医療機関テーブルに二次医療圏コードを追加する

 医療機関テーブルには二次医療圏コードが存在しない.そのため,ある医療機関がどの二次医療圏に属しているかを調べるには空間データを調べる必要がある.空間データは計算コストが高く,テーブルの結合条件に STWIthin() メソッドを使うのは時間がかかる.そのため,医療機関テーブルに二次医療圏コードを追加しようと考えた.

最初に医療機関テーブルと二次医療圏テーブルを結合する

 最初に考えたクエリは次の通り.実行には40分以上かかる.

USE	MedicalAreaDB
GO
SELECT	I.*
,	M.A38b_003
FROM [dbo].[T_Medical_Institution]	AS I
INNER JOIN	dbo.T_MedicalArea2_Dissolved	AS M
ON	I.Location.STWithin(M.geog) = 1
(181309 行処理されました)

次に医療機関テーブルに二次医療圏コード列を追加する

 医療機関テーブルである T_Medical_Institute に対し,SQL Server Management Studio のオブジェクトエクスプローラー上で右クリックし,「デザイン」を選ぶ.

SQL Server Management Studio のオブジェクトエクスプローラー上で右クリックし,「デザイン」を選ぶ
SQL Server Management Studio のオブジェクトエクスプローラー上で右クリックし,「デザイン」を選ぶ

 下図のように列名に SecondaryMedicalAreaCode とタイプし,データ型を nchar(4) とする.

SecondaryMedicalAreaCode とタイプし,データ型を nchar(4) とする
SecondaryMedicalAreaCode とタイプし,データ型を nchar(4) とする

 クエリウィンドウを閉じると保存するよう促されるので「はい」をクリックする.

さらにクエリでUPDATEする

 下記クエリで医療機関テーブル T_Medical_Institute を更新する.実行には43分かかった.

USE	MedicalAreaDB
GO
UPDATE	I
SET	SecondaryMedicalAreaCode = M.A38b_003
FROM [dbo].[T_Medical_Institution]	AS I
INNER JOIN	dbo.T_MedicalArea2_Dissolved	AS M
ON	I.Location.STWithin(M.geog) = 1
(181309 行処理されました)

結合条件を変更して結果を確認

 下記クエリのように結合条件に二次医療圏コードを使用して実行する.実行には1秒かかったのみ.効果は劇的である.

USE	MedicalAreaDB
GO
SELECT	I.*
,	M.A38b_003
FROM [dbo].[T_Medical_Institution]	AS I
INNER JOIN	dbo.T_MedicalArea2_Dissolved	AS M
ON	I.SecondaryMedicalAreaCode = M.A38b_003

ポリゴンを融合した二次医療圏テーブルを元のテーブルと比較する

 以前の記事(国土数値情報の医療圏データの文字化けを解決する)では二次医療圏のポリゴンに重複があるのではないかと仮定してジオメトリ数とポイント数の分布を示したが,決定的な証拠とはならなかった.今回はもう少し踏み込んだ議論をしてみたい.

 下記のクエリはポリゴンを融合した二次医療圏テーブル T_MedicalArea2_Dissobled と元のテーブル A38-20_2 を結合し,両者の持つ Point の総数を比較するものである.

SELECT	D.A38b_003
,	D.geog.STNumPoints()	AS DissobledNum
,	SUM(A.geog.STNumPoints())	AS IndividualNum
FROM	dbo.T_MedicalArea2_Dissolved	AS D
INNER	JOIN	dbo.[A38-20_2]	AS A
ON	D.A38b_003 = A.A38b_003
GROUP	BY	D.A38b_003,	D.geog.STNumPoints()

 結果を散布図に示す.

ポリゴンを融合した二次医療圏テーブルと元のテーブルのポイント数を比較する
ポリゴンを融合した二次医療圏テーブルと元のテーブルのポイント数を比較する

 ほぼ一直線上に点が並んでいる.ポリゴンに重複はなく,国土の複雑さゆえにポリゴン数が多いのであることがほぼ確定的である.

まとめ

 医療機関テーブルに二次医療圏コードを追加した.空間演算による結合と比較して,二次医療圏コードによる結合は結合にかかる計算効率が非常に高い.

 国土交通省におかれては,医療機関テーブルに最初から二次医療圏コードを付与しておいていただきたい.

 ところで一時医療圏テーブルには一次医療圏コードが存在しない.行政区域コードがその代替なのだろうか.だとすると行政区域コードで一時医療圏テーブルを集約することも可能となる.これについては次の課題としたい.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください