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
Примітка
Верхній край квадрата у геометрії — це пряма лінія, яка проходить нижче від точки, тож квадрат не містить цю точку. Верхній край квадрата у географії — це великий круг, який проходить вище від точки, тому квадрат містить цю точку.