都道府県ごとの重心になる緯度経度を求める

id:yellow_73:20060501 では、緯度経度から都道府県コードを得るクエリを作りましたが、今度は逆。geocodingもどきです。
PostGISid: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;