Создаем карту границ участков избирательных комиссий Москвы из открытых данных: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
(Новая страница: «{{Статья|Черновик}} {{Аннотация|Шаги для создания карты границ участков]}} В разных уголка…»)
 
Нет описания правки
Строка 64: Строка 64:
Таблица готова к геокодированию.
Таблица готова к геокодированию.


[http://gis-lab.info/data/uik_geo/mgik_addr_all_20130828_process.zip Скачать обработанную таблицу]
[http://gis-lab.info/data/uik_geo/mgik_addr_all_20130828_geocode.zip Скачать обработанную таблицу]


Этап 3 - геокодируем
Этап 3 - геокодируем
Строка 85: Строка 85:


С помощью того же инструмента проведем и обратную операцию, выбрав и удалив все районы в которые не попало ни одной точки.
С помощью того же инструмента проведем и обратную операцию, выбрав и удалив все районы в которые не попало ни одной точки.
[[Файл:Uik-area-map-05.png|550px|thumb|center|Оставшиеся точки и районы]]


Этап 6 - привяжем точки к районам
Этап 6 - привяжем точки к районам


У нас каждой точке адреса соответствует УИК, а нам нужно, чтобы еще у них был и район (для чего - увидим позже). Поэтому в QGIS делаем Вектор/Управление данными/Объединение атрибутов по районам. После этой операции, каждая точка получит все атрибуты того полигона района, который ей нужен.
У нас каждой точке адреса соответствует УИК, а нам нужно, чтобы еще у них был и район (для чего - увидим позже). Поэтому в QGIS делаем Вектор/Управление данными/Объединение атрибутов по районам. После этой операции, каждая точка получит все атрибуты того полигона района, который ей нужен. Визульно точки не изменятся, просто добавятся новое поле с кодом ОКАТО из слоёв АТД.
 
Этап 7 - удалим плохие точки
Удалим все точки, уровень точки геокодирования которых ниже чем Дом, т.е. эти точки привязались к улице или населенному пункту. Для нашего метода это абсолютно неприемлемо, поэтому мы их лучше удалим. Проще всего это сделать через таблицу атрибутов, где сделать выборку g_status != "building" и удалить выделенное.
 
Из 55 тыс адресов у нас останется около 21 тысячи.
 
[http://gis-lab.info/data/uik_geo/mgik_addr_all_20130828_geocode_clean.zip Скачать очищенный набор точек]
 
Этап 8 - разбивка по ОКАТО
Это последний этап подготовки.
Теперь у нас есть точки и полигоны, у всех объектов, помимо прочих, есть код ОКАТО, который их объединяет. Разобьем эти два слоя на множество слоёв, каждый из которых будет представлять один код ОКАТО.
 
В QGIS: Вектор/Управление данными/Разбить векторный слой Разбиваем по полю OKATO_CODE. Рекомендую сложить результирующие точки и полигоны в отдельные папки, которые предварительно нужно создать. После окончания разбивки, нужно переименовать все файлы так, чтобы в названии остался только код ОКАТО. В результате количество файлов точек и полигонов должно точно совпадать.
 
Наши базы адресов и АТД готовы, займемся геообработкой.
 
==Геообработка==
Теперь наша задача следующая, произвести с каждой парой точки (адреса) - полигон (граница района) следующие операции.
 
#Расчитать географический охват полигона
#Построить полигоны Вороного по точкам в границах рассчитанного охвата
#Обрезать получившиеся полигоны Вороного по границе района
#Растворить границы между полигонами с одинаковым номером УИКа.
 
На примере Щукино в картинках:
 
[[Файл:Uik-area-map-06.png|600px|thumb|center|Исходно: адреса и граница района]]
 
[[Файл:Uik-area-map-07.png|700px|thumb|center|Полигоны Вороного по адресам в пределах охвата границы района]]
 
[[Файл:Uik-area-map-08.png|700px|thumb|center|Обрезка полигонов по граница района]]
 
[[Файл:Uik-area-map-09.png|700px|thumb|center|Слияние полигонов относящихся к одному УИКу]]

Версия от 22:35, 4 сентября 2013

Эта страница является черновиком статьи.


Шаги для создания карты границ участков]

В разных уголках нашей страны, а иногда и целиком по все стране иногда проводятся выборы разных уровней.

Эта статья иллюстрирует некоторые, достаточно простые подходы для создания такой карты в границах г. Москвы (исключаю присоединенные территории Новой Москвы). Статья может рассматриваться как иллюстрация применения географического анализа для новичков.

Забегая вперед хочется сказать, что существующие наборы данных неадекватны для решения этой задачи и результат неудовлетворителен. Но лучше хоть какая-то попытка, чем никакой.

Основная идея

Границы избирательных участков можно восстановить зная причисленные к ним адреса.

Исходные данные

Границы административно-территориального деления г. Москва (источник - GIS-Lab)

Адреса причисленные к избирательным участкам (источник - сервис "Поиск места голосования" Мосгоризбиркома).

Картографические данные - OpenStreetMap.

Используемое ПО

Будем использовать только открытое программное обеспечение.

Нам понадобится:

  • Python - программирование скриптов для получения данных с МГИКа и пакетного геокодирования.
  • QGIS/Sextante - геообработка, визуализация.

Получение и подготовка данных

=Границы АТД

Скачаем стабильную версию внутригородских муниципальных образований Москвы и Санкт-Петербурга. Удалим все что относится к Санкт-Петербургу, так как нас в данном случае он не интересует. Для этого откроем слой данных в QGIS, выделим и удалим объекты относящиеся к СПб.

Нам нужны эти границы, так как участки создаются в границах районов Москвы.

Границы муниципальных образований Москвы (без Новой Москвы)

База адресов

Наша задача - получить все адреса домов и привязанный к ним номер УИКа.

Этап 1 - скачаем всю базу адресов МГИК.

Это можно сделать используя специальный скрипт на Python (исходник). Скрипт работает очень просто, обходит весь сервис МГИКа по поиску УИКов по адресу и складывает все найденные данные в CSV файл. Для запуска скрипта нужен чистый питон 2.7.x и пакет BeautifulSoup.

Пример фрагмента результата после скачивания:

Таблица адресов МГИК

В результате присутствуют важные для нас поля:

  • UIK_ID - номер УИКа
  • LVL1 - уровень 1 адреса: название нас.пункта или улицы
  • LVL2 - уровень 2 адреса: название улицы если есть и нас.пункт
  • LVL3 - уровень 3 адреса: номер дома

Скачать исходную таблицу

Этап 2 - подготовим адреса

Путем простых операций в табличном процессоре, превратим таблицу в подходящую для геокодирования, для этого нужно сделать чтобы адрес был в одной ячейке, это сделает простой CONCATENATE:

Таблица адресов МГИК

Кроме всяких служебных полей, нужных для правильной работы скриптов по геокодированию, добавились важные поля:

  • ADDR - слитый адрес
  • ADDR_V - результат очистки, поиском-заменой убраны лишние запятые и т.п.

Таблица готова к геокодированию.

Скачать обработанную таблицу

Этап 3 - геокодируем

Скрипты для геокодирования можно скачать здесь. Это тоже питон использующий бэкэнд OpenStreetMap.ru для геокодирования.

Скачать результат геокодирования

На карте эти адреса будут выглядеть вот так:

Геокодированные адреса на карте районов

Нам понадобится еще несколько шагов, чтобы подготовить только те данные, которые нам нужны:

Этап 4 - удалим всё, что не в старой Москве

Для этого в QGIS выполним Вектор/Выборка/Пространственная выборка и выделим все точки попадающие в границы нашей Москвы. После выборки - инвертируем ее и удалим все что выделилось (вне границ Москвы).

Этап 5 - удалим все районы Москвы без точек

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

Оставшиеся точки и районы

Этап 6 - привяжем точки к районам

У нас каждой точке адреса соответствует УИК, а нам нужно, чтобы еще у них был и район (для чего - увидим позже). Поэтому в QGIS делаем Вектор/Управление данными/Объединение атрибутов по районам. После этой операции, каждая точка получит все атрибуты того полигона района, который ей нужен. Визульно точки не изменятся, просто добавятся новое поле с кодом ОКАТО из слоёв АТД.

Этап 7 - удалим плохие точки Удалим все точки, уровень точки геокодирования которых ниже чем Дом, т.е. эти точки привязались к улице или населенному пункту. Для нашего метода это абсолютно неприемлемо, поэтому мы их лучше удалим. Проще всего это сделать через таблицу атрибутов, где сделать выборку g_status != "building" и удалить выделенное.

Из 55 тыс адресов у нас останется около 21 тысячи.

Скачать очищенный набор точек

Этап 8 - разбивка по ОКАТО Это последний этап подготовки. Теперь у нас есть точки и полигоны, у всех объектов, помимо прочих, есть код ОКАТО, который их объединяет. Разобьем эти два слоя на множество слоёв, каждый из которых будет представлять один код ОКАТО.

В QGIS: Вектор/Управление данными/Разбить векторный слой Разбиваем по полю OKATO_CODE. Рекомендую сложить результирующие точки и полигоны в отдельные папки, которые предварительно нужно создать. После окончания разбивки, нужно переименовать все файлы так, чтобы в названии остался только код ОКАТО. В результате количество файлов точек и полигонов должно точно совпадать.

Наши базы адресов и АТД готовы, займемся геообработкой.

Геообработка

Теперь наша задача следующая, произвести с каждой парой точки (адреса) - полигон (граница района) следующие операции.

  1. Расчитать географический охват полигона
  2. Построить полигоны Вороного по точкам в границах рассчитанного охвата
  3. Обрезать получившиеся полигоны Вороного по границе района
  4. Растворить границы между полигонами с одинаковым номером УИКа.

На примере Щукино в картинках:

Исходно: адреса и граница района
Полигоны Вороного по адресам в пределах охвата границы района
Обрезка полигонов по граница района
Слияние полигонов относящихся к одному УИКу