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 和州平面长岛测量之间的差异是 (10421993 - 10418904)/10418904,即 0.02%。使用 Geography 在球体上计算,总街道长度为 10421999,更接近州平面值。这并不奇怪,因为州平面长岛投影是针对非常小的区域(纽约市)精确校准的,而 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)
      );