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

    • 名稱、類型、幾何

  • nyc_neighborhoods

    • 名稱、區名、幾何

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
    

    注意

    方塊的上緣在幾何中是一條直線,並通過該點的下方,因此方塊不包含該點。方塊的上緣在地理中是一個大圓,並通過該點的上方,因此方塊包含該點。