SpatiaLiteで逆ジオコーディング

国土数値情報-行政区域-SHAPEの全国分行政区域のデータをSpatiaLiteでSQLiteへ取り込む。そんなんあるなら国土数値情報XMLファイルから日本全国分のshapeファイルを作る - 泥縄トラップとか要らねーよ、って奴は甘い。蜂蜜を煮詰めたより甘い。

上記リンク先のファイルだとトップページに「利用上の注意」とやらが書かれており、元になる国土交通省によるXMLファイルよりも若干制限が厳しくなっている。現状、シェアウェア開発のための作業ではないので特に問題はないが、私のゴーストが「好きに使いたいなら材料は自分で用意しなさい」と囁いているので、上記ファイルはSQL文の練習にだけ用いる。

spatialite-gui操作手順

ダウンロード手順は割愛。

  • Creating a new(empty) SQLite DB
  • Files
  • Load shapefile
    • 一度にロード出来るのは1個。統合していないといかにも面倒

SQL文で逆ジオコーディング

カラム名国土数値情報(行政区域) タグ名・内容対応 - 泥縄トラップ参照。

経度緯度から検索

新宿駅の経度・緯度を渡して検索。駅のデータがあればそういう検索もできるはず。

select pk_uid, prn, con, cn2 from "n03-09320-all" 
where within(makepoint(139.700258, 35.690921), geometry)

結果

pk_uid prn con cn2
21034 東京都 新宿区

SpatiaLite SQL functions reference listより

関数 内容
MakePoint( x Double precision , y Double precision , [ , SRID Integer] ) : Geometry 任意の座標を示すgeometry型を返す
Within( geom1 Geometry , geom2 Geometry ) : Integer 1が2に含まれるかどうかを返す。