17. 投影練習

以下是我們看過的部分函式提醒。提示:它們在練習中很有用喔!

  • sum(expression) 彙總以取得一系列紀錄的總和

  • ST_Length(linestring) 傳回線串的長度

  • ST_SRID(geometry) 傳回幾何圖形的 SRID

  • ST_Transform(geometry, srid) 將幾何轉換成不同的空間參考系統

  • ST_GeomFromText(text) 傳回 geometry

  • ST_AsText(geometry) 傳回 WKT text

  • ST_AsGML(geometry) 傳回 GML text

記得你可以使用線上資源

也請記住我們有以下這些可用的表格

  • nyc_census_blocks

    • name、popn_total、boroname、geom

  • nyc_streets

    • name、type、geom

  • nyc_subway_stations

    • name、geom

  • nyc_neighborhoods

    • name、boroname、geom

17.1. 練習

  • 以 UTM 18 度量,紐約所有街道的長度是多少?

    SELECT Sum(ST_Length(geom))
      FROM nyc_streets;
    
    10418904.7172
    
  • SRID 2831 的 WKT 定義為何?

    SELECT srtext FROM spatial_ref_sys
    WHERE SRID = 2831;
    

    或者,透過 https://epsg.io/2831

    PROJCS["NAD83(HARN) / New York Long Island",
      GEOGCS["NAD83(HARN)",
        DATUM["NAD83 (High Accuracy Regional Network)",
          SPHEROID["GRS 1980", 6378137.0, 298.257222101,
            AUTHORITY["EPSG","7019"]],
          TOWGS84[-0.991, 1.9072, 0.5129, 0.0257899075194932, -0.009650098960270402, -0.011659943232342112, 0.0],
          AUTHORITY["EPSG","6152"]],
        PRIMEM["Greenwich", 0.0,
          AUTHORITY["EPSG","8901"]],
        UNIT["degree", 0.017453292519943295],
        AXIS["Geodetic longitude", EAST],
        AXIS["Geodetic latitude", NORTH],
        AUTHORITY["EPSG","4152"]],
      PROJECTION["Lambert Conic Conformal (2SP)",
        AUTHORITY["EPSG","9802"]],
      PARAMETER["central_meridian", -74.0],
      PARAMETER["latitude_of_origin", 40.166666666666664],
      PARAMETER["standard_parallel_1", 41.03333333333333],
      PARAMETER["false_easting", 300000.0],
      PARAMETER["false_northing", 0.0],
      PARAMETER["scale_factor", 1.0],
      PARAMETER["standard_parallel_2", 40.666666666666664],
      UNIT["m", 1.0],
      AXIS["Easting", EAST],
      AXIS["Northing", NORTH],
      AUTHORITY["EPSG","2831"]]
    
  • 以 SRID 2831 度量,紐約所有街道的長度是多少?

    SELECT Sum(ST_Length(ST_Transform(geom,2831)))
      FROM nyc_streets;
    
    10421993.706374
    

    注意事項

    UTM 18 和 State Plane Long Island 度量之間的差異為 (10421993 - 10418904)/10418904,即 0.02%。使用 地理 計算球體上的總街道長度為 10421999,與 State Plane 的值較為接近。這並不出奇,因為 State Plane Long Island 投影會特別針對非常小區域(紐約市)校準,而 UTM 18 必須針對大型區域提供合理的結果。

  • 有多少條街道穿越第 74 條子午線?

    SELECT Count(*)
    FROM nyc_streets
    WHERE ST_Intersects(
      ST_Transform(geom, 4326),
      'SRID=4326;LINESTRING(-74 20, -74 60)'
      );
    
    223
    

    “第 74 條子午線”是一種文雅的說法,表示「X 值為 -74 的地理座標系中之垂直線」。我們可以建構這類線,然後將其與同樣投影到地理座標系中的街道進行比較。將線投影至 UTM 並於其中進行比較將會傳回略有不同的答案。若要取得相同的答案,您需要在轉換前將其「分段」,讓它有更多點。

    SELECT Count(*)
    FROM nyc_streets
    WHERE ST_Intersects(
      geom,
      ST_Transform(ST_Segmentize('SRID=4326;LINESTRING(-74 20, -74 60)'::geometry,0.001), 26918)
      );