19. ジオグラフィ演習¶
これまでに見た全ての関数のリマインダです。演習に役立つはずです!
Sum(number) 結果集合の全ての数値を合計します
ST_GeogFromText(text) はジオグラフィを返します
ST_Distance(geography, geography) ジオグラフィ間の距離を返します
ST_Transform(geometry, srid) 新しい投影法でのジオメトリを返します
ST_Length(geography) 線長を返します
ST_Intersects(geometry, geometry) オブジェクトが平面空間でつながっているなら TRUE を返します
ST_Intersects(geography, geography) オブジェクトが球面空間でつながっているなら TRUE を返します
次の利用可能なテーブルも覚えておいてください:
nyc_streets
name, type, geom
nyc_neighborhoods
name, boroname, geom
19.1. 演習¶
シアトルからニューヨークはどれぐらい遠いでしょう? 答の単位は何ですか?
注釈
ニューヨークは
POINT(-74.0064 40.7142)
で、シアトルはPOINT(-122.3331 47.6097)
SELECT ST_Distance( 'POINT(-74.0064 40.7142)'::geography, 'POINT(-122.3331 47.6097)'::geography );
3875538.57141352
球面で計算した場合の、ニューヨークの全てのストリートの長さの合計はいくつでしょう?
SELECT Sum( ST_Length(Geography( ST_Transform(geom,4326) ))) FROM nyc_streets;
10421999.666
注釈
"UTM Zone 18" 投影平面で計算した長さは 10418904.717 で 0.02% の違いがありました。UTM は、ゾーン内では、面積と距離を維持するのが得意です。
‘POINT(1 2.0001)’ は ‘POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))’ とジオグラフィでインタセクトするでしょうか? ジオメトリではどうでしょう? なぜ違うのでしょう?
SELECT ST_Intersects( 'POINT(1 2.0001)'::geography, 'POLYGON((0 0,0 2,2 2,2 0,0 0))'::geography ); SELECT ST_Intersects( 'POINT(1 2.0001)'::geometry, 'POLYGON((0 0,0 2,2 2,2 0,0 0))'::geometry );
true and false
注釈
ジオメトリでは正方形の上辺は直線で、ポイントの**下**を通るので、正方形はポイントを含みません。ジオグラフィでは正方形の上辺は大円で、ポイントの**上**を通るので、正方形はポイントを含みます。