Как вытащить границы населённых пунктов из OpenStreetMap в KML за 5 минут
Обучение

Как вытащить границы населённых пунктов из OpenStreetMap в KML за 5 минут

Вы столкнулись с задачей, которая периодически всплывает у любого картографа или аналитика: нужна точная геометрия границы города/посёлка/района в формате KML для дальнейшей работы в Google Earth, мобильных навигаторах или корпоративных ГИС.

Варианты решения, которые обычно приходят в голову:

  • Рисовать вручную — долго, неточно, больно
  • Искать на data.nextgis.com — хорошо для целых стран, но для конкретного посёлка — избыточно
  • Парсить OSM через overpass-turbo.eu — мощно, но требует знания Overpass QL
  • Использовать QuickOSM в QGIS — оптимальный баланс простоты и гибкости

Сегодня разберём последний вариант — он позволяет получить границы любого населённого пункта, имеющегося в OpenStreetMap, буквально в несколько кликов.

Установка плагина

  1. Откройте QGIS (версия 3.x или новее)
  2. Перейдите в меню Модули → Управление модулями…
  3. Во вкладке «Все» введите в поиске: QuickOSM
  4. Выберите плагин и нажмите «Установить»
  5. После установки плагин появится в меню Вектор → QuickOSM или на панели инструментов

Прежде чем качать данные, нужно понимать, как в OpenStreetMap хранятся административные границы:

  • Relation (отношение) — это сложный объект, объединяющий несколько way (линий) в полигон
  • Tag boundary=administrative — признак административной границы
  • Tag admin_level=4..10 — уровень административного деления (4 — регион, 6 — район, 8 — город/посёлок, 10 — квартал)

Для населённых пунктов обычно ищем admin_level=8, но иногда бывает 6 (города областного значения) или 10 (микрорайоны внутри города).
 

Открываем QuickOSM (Вектор → QuickOSM). Видим простой интерфейс с тремя основными полями:

Key → вводим: name
Value → вводим название: Сергиев Посад
Canvas extent → выбираем Around и задаём радиус в метрах (например, 50000 для поиска в радиусе 50 км)

Но это неоптимально — найдётся всё, что содержит слово «Сергиев Посад», включая улицы и POI.

Лучше использовать расширенный запрос:

Переключаемся на вкладку Query и вводим:

boundary=administrative
name="Сергиев Посад"
admin_level=8

Нажимаем Run query. Плагин обращается к Overpass API, загружает геометрию и автоматически собирает relation в полигон (multipolygon).

Экспорт в KML

  1. В панели Layers (Слои) найдите слой с multipolygons (обычно это основные границы)
  2. При необходимости отфильтруйте нужные объекты
  3. Правый клик на слое → Экспорт → Сохранить объекты как…

В диалоговом окне выберите формат:

  • Формат: Keyhole Markup Language [KML]
  • Имя файла: выберите папку и имя файла (например, boundaries.kml)


Важно: в опциях слоя указываем NameField — поле, которое будет отображаться как название объекта в Google Earth (обычно name или ref)

Batch-загрузка нескольких населённых пунктов

Если нужны границы 50 посёлков, ручной поиск утомителен. Используем Overpass QL напрямую в QuickOSM (вкладка Query):

[out:json][timeout:60];
area["name"="Московская область"]->.searchArea;
(
 relation["boundary"="administrative"]["admin_level"="8"](area.searchArea);
);
out body;
>;
out skel qt;

Этот запрос выгрузит все населённые пункты (admin_level=8) внутри Московской области.

Для оперативного получения границ населённых пунктов инструмент QuickOSM не имеет равных по соотношению «время/результат». Особенно ценно, что вы получаете не просто геометрию, а связанные с ней атрибуты — названия, административные коды (OKATO/TIN), статус и историю изменений.