都道府県ごとの重心になる緯度経度を求める
id:yellow_73:20060501 では、緯度経度から都道府県コードを得るクエリを作りましたが、今度は逆。geocodingもどきです。
PostGIS に id:yellow_73:20060406 にあるようなデータベースを持っているとします。
まず市区町村の場合、市区町村ごとにポリゴンがあるので、このポリゴンの重心を求めればいいだけ。
オブジェクトの重心を求める組み込み関数 Centroid を使います。
SELECT jcode, X(c_geom), Y(c_geom) FROM (SELECT jcode, Centroid(the_geom) AS c_geom FROM city WHERE jcode=<市区町村コード>) AS Q;
今度は都道府県。都道府県ごとに、市区町村ポリゴンの集合を出す必要がありますが、Collect を使ったら一発で出ます。その集合の重心を出すだけ。
SELECT pcode, X(c_geom), Y(c_geom) FROM ( SELECT pcode, Centroid(Collect(the_geom)) AS c_geom FROM ( SELECT jcode/1000 AS pcode, the_geom FROM city WHERE jcode/1000=<都道府県コード> ) AS Q_PGEOM GROUP BY pcode ) AS Q_CENTROID;