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% です。ジオグラフィ を使ってストリートの総延長を回転楕円体面で計算すると 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)
      );