Новый месяц, новые цели. Ваша помощь помогает проекту двигаться вперед. 🖥️ Поддержите sqltest →
SQL код скопирован в буфер обмена

База данных Countries (PostGIS): пространственные таблицы и SQL-задачи

Countries — база PostGIS для изучения пространственного SQL: страны и столицы мира, а также слои Нью-Йорка с переписными кварталами, районами, улицами и станциями метро. На SQLtest.online с ней можно работать прямо в браузере: решать задачи с автоматической проверкой и писать свои запросы в песочнице, ничего не устанавливая.

  • 7 пространственных таблиц
  • 246 стран
  • 491 станция метро
  • 11 SQL-задачи

Что такое Countries

PostGIS — расширение PostgreSQL, которое добавляет геометрические типы и сотни пространственных функций: расстояния, площади, пересечения, преобразования координат. Эта база позволяет попробовать их на понятных данных.

Таблицы Нью-Йорка взяты из известного практикума PostGIS «Introduction to PostGIS», а таблицы мира содержат границы стран и столицы. Вместе они охватывают точки, линии и полигоны в двух системах координат.

Из чего состоит база

Таблицы делятся на две группы.

Мир

countries с полигонами границ и capitals с точками, обе в SRID 4326 (долгота и широта).

Нью-Йорк

nyc_census_blocks, nyc_neighborhoods, nyc_streets, nyc_subway_stations и nyc_homicides в SRID 26918 (UTM, зона 18N, метры).

Главное, что стоит запомнить: таблицы мира хранят градусы, а таблицы Нью-Йорка — метры. Расстояния и площади в слоях Нью-Йорка сразу получаются в метрах, а для таблиц мира геометрию нужно привести к geography или сначала преобразовать.

Сколько данных в таблицах:

ТаблицаСтрокЧто хранит
countries246страны и их границы
capitals192столицы
nyc_census_blocks38 794переписные кварталы с населением
nyc_neighborhoods129районы
nyc_streets19 091улицы
nyc_subway_stations491станции метро
nyc_homicides3 982убийства

Структура таблиц

Нажмите на таблицу, чтобы увидеть её столбцы, пример строки и ключи.

Список таблиц

countries — список стран с геометрией.
  • idуникальный идентификатор записи (PK)
  • nameназвание страны
  • borderгеометрия страны (MultiPolygon, SRID 4326)
id name border
1 Франция MultiPolygon(...) [SRID=4326]
  • PRIMARY KEY, btree (id)
capitals — список столиц с координатами.
  • idуникальный идентификатор записи (PK)
  • nameназвание столицы
  • country_idссылка на страну (FK)
  • locationкоординаты столицы (Point, SRID 4326)
id name country_id location
1 Париж 1 Point(...) [SRID=4326]
  • PRIMARY KEY, btree (id)
  • FOREIGN KEY (country_id) REFERENCES countries(id)
nyc_census_blocks — демография блоков переписи Нью-Йорка.
  • gidуникальный идентификатор записи (PK)
  • blkidID переписного блока
  • popn_totalобщая численность населения
  • popn_whiteчисленность белого населения
  • popn_blackчисленность черного населения
  • popn_nativчисленность коренного населения
  • popn_asianчисленность азиатского населения
  • popn_otherчисленность другого населения
  • boronameназвание района
  • geomгеометрия переписного блока (MultiPolygon, SRID 4326)
gid blkid popn_total popn_white popn_black popn_nativ popn_asian popn_other boroname geom
1 360050001001000 1000 500 200 50 150 100 Манхэттен MultiPolygon(...) [SRID=4326]
  • PRIMARY KEY, btree (gid)
nyc_homicides — инциденты убийств в Нью-Йорке.
  • gidуникальный идентификатор записи (PK)
  • incident_dдата инцидента
  • boronameназвание района
  • num_victimчисло жертв
  • primary_moосновной мотив
  • idID инцидента
  • weaponиспользованное оружие
  • light_darkусловие света или темноты
  • yearгод инцидента
  • geomместоположение инцидента (Point, SRID 4326)
gid incident_d boroname num_victim primary_mo id weapon light_dark year geom
1 2003-01-01 Манхэттен 1 Неизвестно 1 Огнестрельное D 2003 Point(...) [SRID=4326]
  • PRIMARY KEY, btree (gid)
nyc_neighborhoods — районы Нью-Йорка.
  • gidуникальный идентификатор записи (PK)
  • boronameназвание района
  • nameназвание района
  • geomгеометрия района (MultiPolygon, SRID 4326)
gid boroname name geom
1 Манхэттен Финансовый район MultiPolygon(...) [SRID=4326]
  • PRIMARY KEY, btree (gid)
nyc_streets — улицы Нью-Йорка.
  • gidуникальный идентификатор записи (PK)
  • idID улицы
  • nameназвание улицы
  • onewayиндикатор одностороннего движения
  • typeтип улицы
  • geomгеометрия улицы (LineString, SRID 4326)
gid id name oneway type geom
1 1 Бродвей NO avenue LineString(...) [SRID=4326]
  • PRIMARY KEY, btree (gid)
nyc_subway_stations — станции метро Нью-Йорка.
  • gidуникальный идентификатор записи (PK)
  • objectidID объекта
  • idID станции
  • nameназвание станции
  • alt_nameальтернативное название
  • cross_stперекрестная улица
  • long_nameдлинное название
  • labelметка
  • boroughрайон
  • nghbhdрайон
  • routesмаршруты
  • transfersпересадки
  • colorцвет
  • expressиндикатор экспресса
  • closedиндикатор закрытия
  • geomместоположение станции (Point, SRID 4326)
gid objectid id name alt_name cross_st long_name label borough nghbhd routes transfers color express closed geom
1 1 1 Таймс-сквер Times Sq 7th Ave Times Square-42nd Street Times Sq Манхэттен Midtown 1,2,3,7,A,C,E,N,Q,R,S,W 42nd St Красный Да Нет Point(...) [SRID=4326]
  • PRIMARY KEY, btree (gid)

Примеры запросов

Эти запросы показывают, как связаны данные. Скопируйте любой и запустите в песочнице.

Столица внутри своей страны — координаты точки через ST_X / ST_Y и пространственная проверка ST_Contains:

SELECT c.name AS capital, co.name AS country,
       round(ST_Y(c.location)::numeric, 2) AS lat,
       round(ST_X(c.location)::numeric, 2) AS lon,
       ST_Contains(co.border, c.location) AS inside_border
FROM capitals c
JOIN countries co ON co.id = c.country_id
ORDER BY c.name
LIMIT 3;
capitalcountrylatloninside_border
Abu DhabiUnited Arab Emirates24.3054.70true
AbujaNigeria9.087.40true
AccraGhana5.60-0.19true

Станции метро и их SRID — слои Нью-Йорка используют проекцию 26918:

SELECT s.name AS station, s.borough, s.routes, ST_SRID(s.geom) AS srid
FROM nyc_subway_stations s
ORDER BY s.gid
LIMIT 3;
stationboroughroutessrid
Cortlandt StManhattanR,W26918
Rector StManhattan126918
South FerryManhattan126918

SQL-задачи по темам

Задач по PostGIS на этой базе: 11 — расстояния, площади, длины, преобразование в текст и JSON и пространственные соединения. Решение проверяется автоматически на настоящем PostgreSQL с PostGIS. Число справа — количество задач в теме, цветные метки — диапазон сложности.

С чего начать

Первые задачи по базе Countries:

  1. Извлечь геометрию как текст
  2. Извлечь геометрию как JSON
  3. Расстояние между городами
  4. Площадь страны
  5. Станции метро Манхэттена
  6. Вычислить площадь микрорайона
  7. Площадь микрорайона
  8. Средняя площадь района
  9. Длина улиц Нью-Йорка
  10. Станции "Little Italy"

Все задачи по Countries →

Частые вопросы

Нужно ли устанавливать PostGIS, чтобы работать с этой базой?

Нет. Задачи и песочница на SQLtest.online выполняют запросы на сервере, достаточно браузера. В песочнице выберите PostgreSQL 17 + PostGIS WorkShop.

Что такое SRID?

Идентификатор пространственной системы координат: он говорит, в какой системе записаны координаты. 4326 — долгота и широта в градусах (WGS 84), 26918 — UTM, зона 18N, в метрах, её используют для Нью-Йорка.

Откуда взяты таблицы Нью-Йорка?

Из набора данных практикума «Introduction to PostGIS», опубликованного на postgis.net, — частой отправной точки для изучения PostGIS.