19. Вправи з географії

Ось нагадування про всі функції, які ми бачили до цього часу. Вони мають бути корисними для виконання вправ!

  • Sum(number) додає всі числа в наборі результатів

  • ST_GeogFromText(text) повертає geography

  • ST_Distance(geography, geography) повертає відстань між geography

  • ST_Transform(geometry, srid) повертає геометрію в новій проекції

  • ST_Length(geography) повертає довжину лінії

  • ST_Intersects(geometry, geometry) повертає true, якщо об’єкти не є роз’єднаними в планарному просторі

  • :command:`ST_Intersects(geography, geography)`повертає true, якщо об’єкти не є роз’єднаними у сфероїдальному просторі

Також пам’ятайте про таблиці, які у нас є:

  • nyc_streets

    • name, type, geom

  • nyc_neighborhoods

    • name, boroname, geom

19.1. Вправи

  • Як далеко Нью-Йорк від Сіетла? Якими одиницями виразити відповідь?

    Примітка

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

    SELECT ST_Distance(
      'POINT(-74.0064 40.7142)'::geography,
      'POINT(-122.3331 47.6097)'::geography
      );
    
    3875538.57141352
    
  • Яка загальна довжина всіх вулиць Нью-Йорка, розрахована на сфероїді?

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

    Примітка

    Довжина, розрахована в плоскій проекції «UTM Zone 18», становить 10418904,717, що відрізняється на 0,02%. UTM добре зберігає площу та відстань у межах зони.

  • Чи перетинається «POINT(1 2.0001)» з «POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))» в географії? А в геометрії? Чому є різниця?

    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
    

    Примітка

    Верхній край квадрата у геометрії — це пряма лінія, яка проходить нижче від точки, тож квадрат не містить цю точку. Верхній край квадрата у географії — це великий круг, який проходить вище від точки, тому квадрат містить цю точку.