19. Ejercicios de Datos Tipo Geography

Aquí tiene un recordatorio de todas las funciones que hemos visto hasta ahora. Le serán útiles para los ejercicios!

  • Sum(number) suma todos los números del conjunto de resultados

  • ST_GeogFromText(text) retorna un objeto tipo geography

  • ST_Distance(geography, geography) retorna la distancia entre dos objetos tipo geography

  • ST_Transform(geometry, srid) retorna el objeto tipo geometría en la nueva proyección

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

  • ST_Intersects(geometry, geometry) retorna true si los objetos no son disyuntos en un espacio plano

  • ST_Intersects(geography, geography) devuelve true si los objetos no son disjuntos en el espacio esferoidal

También recuerde las tablas que tenemos disponibles:

  • nyc_streets

    • name, type, geom

  • nyc_neighborhoods

    • name, boroname, geom

19.1. Ejercicios

  • ¿A qué distancia está Nueva York de Seattle? ¿Cuáles son las unidades de la respuesta?

    Nota

    New York = POINT(-74.0064 40.7142) y Seattle = POINT(-122.3331 47.6097)

    SELECT ST_Distance(
      'POINT(-74.0064 40.7142)'::geography,
      'POINT(-122.3331 47.6097)'::geography
      );
    
    3875538.57141352
    
  • **¿Cuál es la longitud total de todas las calles de Nueva York, calculada sobre el esferoide?

    SELECT Sum(
      ST_Length(Geography(
        ST_Transform(geom,4326)
      )))
    FROM nyc_streets;
    
    10421999.666
    

    Nota

    La longitud calculada en la proyección plana «UTM Zone 18» es 10418904,717, un 0,02% de diferencia. UTM es bueno para preservar el área y la distancia, dentro de los límites de la zona.

  • **¿Se cruza “POINT(1 2,0001)” con “POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))” en geografía? ¿En geometría? ¿Por qué la diferencia?

    SELECT ST_Intersects(
      'POINT(1 2.0001)'::geography,
      'POLYGON((0 0,0 2,2 2,2 0,0 0))'::geography
    );
    
    SELECT ST_Intersects(
      'POINT(1 2.0001)'::geometry,
      'POLYGON((0 0,0 2,2 2,2 0,0 0))'::geometry
    );
    
    true and false
    

    Nota

    La arista superior del cuadrado es una línea recta en geometría, y pasa por debajo del punto, por lo que el cuadrado no contiene el punto. La arista superior del cuadrado es un gran círculo en geografía, y pasa por encima del punto, por lo que el cuadrado sí contiene el punto.