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
    

    注釈

    ジオメトリでは正方形の上辺は直線で、ポイントの**下**を通るので、正方形はポイントを含みません。ジオグラフィでは正方形の上辺は大円で、ポイントの**上**を通るので、正方形はポイントを含みます。