SyntaxHighliter

2012年7月15日日曜日

JDBCでポリゴンを取得 前編(Google Maps V3 - 4)

PostGISはPostgresqlの拡張パッケージなので

  • PostgresqlのJDBCドライバ
  • PostGISの追加モジュール
の2つが必要です。

まずは、PostgresqlのJDBCドライバをダウンロード。
Javaが1.6と1.7は「JDBC4を使え」ということなのでこちらをダウンロードしました。


次にPostGISのJDBCドライバなのですが、
本家サイトのリンクからは「Not Found」という状態。

postgis-2.0.0SVN.jar というファイル名で検索するとダウンロードできるサイトが見つかったのでここからダウンロードした。
本来ならPostGISのソースに入っているJDBCドライバをmakeするべきなんだろうけど。。。

今は実験段階なので深くは考えずに先に進もう。

データ取得のSQLを考えると、画面に表示されている経度と緯度の矩形(四角)に
市区町村の境界が含まれていればその境界のデータを取得すればよい。

PostGISの関数リファレンスを探すとST_Intersectsが使えそう。
最初はST_Overlapsの方かと思ったのですが、こっちは完全に含む場合でした。

まずはコマンドラインで試してみる。
SELECT gid, geom
FROM localarea
WHERE ST_Intersects(geom,
ST_GeomFromText('MULTIPOLYGON(((
 経度A 緯度A
,経度B 緯度A
,経度B 緯度B
,経度A 緯度B
,経度A 緯度A
)))', 4612)) = true;
注意しなくちゃいけないのが、MULTIPOLYGONの書式。
ひとつは四角を点であらわす時には始点と終点が一致しないといけないということ。
ついつい終点をわすれて考えてしまうので要注意。

もう一つは、MULTIPOLYGONの場合はかっこが3つ必要だということ。
POLYGONの場合はかっこは2つ必要。
MULTIPOLYGONの場合は飛び地などの複数の面をあらわすことができるので こういう書式になっているのだろう。
ちなみにMULTIPOLYGONを使っているが今回の場合は画面は飛び地がないのでPOLYGONでも大丈夫だと思う。
入っているデータがMULTIPOLYGONなのであわせているだけです。

0 件のコメント:

コメントを投稿