座標[北緯46.20, 西緯122.18の郡はどこか検索してみる。
distance関数:2つの地物間の距離を計算する。
該当する一点を算出にはPOINTを使う
mydb=# SELECT county FROM countyp020 WHERE distance(the_geom, 'POINT(-122.18 46.20)') = 0;
county
-----------------
Skamania County
(1 row)
複数のポイントの算出にはLINESTRINGを使う
mydb=# SELECT county FROM countyp020 WHERE distance(the_geom, 'LINESTRING(-122.18 46.20,-122.00 45.00)') = 0;
county
------------------
Skamania County
Multnomah County
Clackamas County
(3 rows)
近隣ポリゴンの検索
'Sonoma County'に隣接するCountyを検索します。
a.the_geomに全てのb.the_geomと比較して検索しています。
mydb=# SELECT a.county FROM countyp020 a, countyp020 b WHERE b.county = 'Sonoma County' AND a.the_geom && b.the_geom;
county
------------------
Mendocino County
Lake County
Yolo County
Napa County
Sonoma County
Marin County
Solano County
(7 rows)
上記検索は座標周辺を長方形としてとらえて検索するので正確に郡の境界をとらえてません。
よって、実際に隣接していないYolo Countyもとらえてしまう。
次は、条件を加え正確な境界をもとに検索する。
mydb=# SELECT a.county FROM countyp020 a, countyp020 b WHERE b.county = 'Sonoma County' AND a.the_geom && b.the_geom
mydb-# AND distance(a.the_geom, b.the_geom) = 0;
county
------------------
Mendocino County
Lake County
Napa County
Sonoma County
Marin County
Solano County
(6 rows)
distance関数は'Sonoma County'と全ての座標(b.the_geom)との2点間の距離を計算しています。
上記distance関数は前述の7つの郡に対してのみ計算しています。