17. Ejercicios sobre Proyecciones

Aquí tienes un recordatorio de algunas de las funciones que hemos visto. Pista: ¡serán útiles para los ejercicios!

  • sum(expresión) función de agregación para devolver una suma de un conjunto de registros

  • ST_Length(linestring) retorna la longitud de la línea

  • ST_SRID(geometry) retorna el SRID de la geometría

  • ST_Transform(geometry, srid) convierte las geometrías a un determinado SRID

  • ST_GeomFromText(text) retorna un objeto geometry desde una definición WKT

  • ST_AsText(geometry) devuelve la representación de geometry en formato WKT

  • ST_AsGML(geometry) retorna la geometría expresada como un texto GML

Recuerde los recursos que están disponibles:

También recuerde las tablas que tenemos disponibles:

  • 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. Ejercicios

  • ¿Cuál es la longitud total de las calles de Nueva York, medida en UTM 18?

    SELECT Sum(ST_Length(geom))
      FROM nyc_streets;
    
    10418904.7172
    
  • ¿Cuál es la definición WKT del SRID 2831?

    SELECT srtext FROM spatial_ref_sys
    WHERE SRID = 2831;
    

    O, vía 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"]]
    
  • ¿Cuál es la longitud de todas las calles de Nueva York, medida en el SRID 2831?

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

    Nota

    La diferencia entre las medidas de Long Island en UTM 18 y State Plane Long Island es de (10421993 - 10418904)/10418904, es decir, 0,02%. Calculado en el esferoide utilizando Geografía la longitud total de las calles es 10421999, que se aproxima más al valor del State Plane. Esto no es sorprendente, ya que la proyección State Plane Long Island está calibrada con precisión para un área muy pequeña (la ciudad de Nueva York), mientras que UTM 18 tiene que proporcionar resultados para un región grande.

  • ¿Cuántas calles cruza el meridiano 74?

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

    El «meridiano 74» es una forma elegante de decir «una línea vertical en geografía donde el valor X es -74». Podemos construir dicha línea y compararla con las calles, proyectadas también en geografía. Si proyectamos la línea en UTM y la comparamos allí, obtendremos una respuesta ligeramente distinta. Para obtener la misma respuesta, hay que «segmentarla», para que tenga más puntos, antes de transformarla.

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