17. Övningar för projicering

Här är en påminnelse om några av de funktioner vi har sett. Tips: de bör vara användbara för övningarna!

  • sum(uttryck) aggregat för att returnera en summa för en uppsättning poster

  • ST_Length(linestring) returnerar längden på linestring

  • ST_SRID(geometry) returnerar geometrins SRID

  • ST_Transform(geometry, srid) konverterar geometrier till olika spatiala referenssystem

  • ST_GeomFromText(text) returnerar geometry

  • ST_AsText(geometry) returnerar WKT text

  • ST_AsGML(geometry) returnerar GML text

Kom ihåg de online-resurser som finns tillgängliga för dig:

Tänk också på de tabeller vi har tillgängliga:

  • 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. Övningar

  • Vad är längden på alla gator i New York, mätt i UTM 18?

    SELECT Sum(ST_Length(geom))
      FROM nyc_streets;
    
    10418904.7172
    
  • Vad är WKT-definitionen av SRID 2831?

    SELECT srtext FROM spatial_ref_sys
    WHERE SRID = 2831;
    

    Eller, via 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"]]
    
  • Vad är längden på alla gator i New York, mätt i SRID 2831?

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

    Observera

    Skillnaden mellan UTM 18 och State Plane Long Island-måtten är (10421993 - 10418904)/10418904, eller 0,02%. Beräknat på sfäroiden med hjälp av Geografi är den totala gatulängden 10421999, vilket är närmare State Plane-värdet. Detta är inte förvånande, eftersom State Plane Long Island-projektionen är exakt kalibrerad för ett mycket litet område (New York City) medan UTM 18 måste ge rimliga resultat för ett stort regionalt område.

  • Hur många gator korsar 74:e meridianen?

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

    ”74:e meridianen” är ett fint sätt att säga ”en vertikal linje i geografin där X-värdet är -74”. Vi kan konstruera en sådan linje och sedan jämföra den med gatorna, som också projiceras i geografin. Om man projicerar linjen i UTM och jämför den där får man ett något annorlunda svar. För att få samma svar måste du ”segmentisera” den, så att den har fler punkter, innan du transformerar.

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