Пакетное геокодирование в QGIS: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
мНет описания правки
Строка 10: Строка 10:
* Расширение RuGeocoder (Присутствует в официальном репозитории)
* Расширение RuGeocoder (Присутствует в официальном репозитории)
* Соединение с Интернетом (желательно быстрое)
* Соединение с Интернетом (желательно быстрое)
При подготовке данных так же может понадобится расширенный калькулятор атрибутивных полей. В примерах будет использоваться расширение [http://gis-lab.info/qa/fieldpyculator.html FieldPyculator].<br />
При подготовке данных так же может понадобиться расширенный калькулятор атрибутивных полей. В примерах будет использоваться расширение [http://gis-lab.info/qa/fieldpyculator.html FieldPyculator].<br />
Процесс установки QGIS подробно расписан в статье [http://gis-lab.info/qa/qgis-osgeo4w.html Установка QGIS/GRASS с помощью OSGeo4W].<br />
Процесс установки QGIS подробно описан в статье [http://gis-lab.info/qa/qgis-osgeo4w.html Установка QGIS/GRASS с помощью OSGeo4W].<br />
Более подробно об установке расширений можно прочитать [http://gis-lab.info/qa/qgis-install-plugin.html тут].
Более подробно об установке расширений можно прочитать [http://gis-lab.info/qa/qgis-install-plugin.html тут].


== Подготовка данных ==
== Подготовка данных ==
Для работы геокодер требует точечный слой, с адресами, находящихся в одном или нескольких атрибутивных полях. Компонентная форма записи адреса (название города, название улицы, номер дома и т.д. находятся в отдельных полях) более предпочтительна, и обычно позволяет добиться лучшего результата при геокодировании.
Для работы геокодер требует точечный слой, с адресами, находящимися в одном или нескольких атрибутивных полях. Компонентная форма записи адреса (название города, название улицы, номер дома и т.д. находятся в отдельных полях) более предпочтительна, и обычно позволяет добиться лучшего результата при геокодировании.


=== Преобразование таблицы в SHP файл ===
=== Преобразование таблицы в SHP файл ===
Строка 26: Строка 26:


=== Подготовка адреса ===
=== Подготовка адреса ===
Для повышения качества геокодирования необходимо разбить адрес на составные части: населенный пункт, улица, строение. Каждая из частей должна находится в отдельном поле (поле с названием населенного пункта можно не помещать в отдельное поле, а указать вручную, если все адреса в слое принадлежат этому населенному пункту). Если исходные данные изначально были в такой форме, то этот пункт обработки можно пропустить.<br />
Для повышения качества геокодирования необходимо разбить адрес на составные части: населенный пункт, улица, строение. Каждая из частей должна находиться в отдельном поле (поле с названием населенного пункта можно не помещать в отдельное поле, а указать вручную, если все адреса в слое принадлежат этому населенному пункту). Если исходные данные изначально были в такой форме, то этот пункт обработки можно пропустить.<br />
Как примером воспользуемся ранее подготовленный SHP файл. Добавим его в проект и с помощью FieldPyculator подготовим необходимые поля. Как видно по полю ''addr_vote'', адреса указаны единообразно, но содержат лишнюю информацию - номера школ, название организаций и тд. Выделим название улиц, использовав следующие выражение для Pyculator:
Как примером воспользуемся ранее подготовленным SHP файлом. Добавим его в проект и с помощью FieldPyculator подготовим необходимые поля. Как видно по полю ''addr_vote'', адреса указаны единообразно, но содержат лишнюю информацию - номера школ, название организаций и тд. Выделим название улиц, использовав следующее выражение для Pyculator:
<pre>
<pre>
value =  <addr_vote>.split(',')[1].replace(u'ул.','').strip()
value =  <addr_vote>.split(',')[1].replace(u'ул.','').strip()
Строка 40: Строка 40:
== Геокодирование ==
== Геокодирование ==
После предварительной подготовки адресов можно приступать к самому геокодированию. Слой для обработки должен быть добавлен в проект и открыт на редактирование.
После предварительной подготовки адресов можно приступать к самому геокодированию. Слой для обработки должен быть добавлен в проект и открыт на редактирование.
Форма обработки вызывается нажатием кнопки "Пакетное геокодирование" на панели "Модули". Тоже действие можно выполнить через в меню "Модули". <br />
Форма обработки вызывается нажатием кнопки "Пакетное геокодирование" на панели "Модули". Тоже действие можно выполнить через меню "Модули". <br />
В открывшейся форме необходимо выбрать слой для геокодирования и регион. Если в слое присутствуют адреса из нескольких населенных пунктов, то необходимо выбрать поле, содержащее название поселения. Если все адреса относятся к одному населенному пункту, то его название можно указать вручную. Аналогичная ситуация с районам, с той лишь разницей, что это поле необязательное.<br />
В открывшейся форме необходимо выбрать слой для геокодирования и регион. Если в слое присутствуют адреса из нескольких населенных пунктов, то необходимо выбрать поле, содержащее название поселения. Если все адреса относятся к одному населенному пункту, то его название можно указать вручную. Аналогичная ситуация с районам, с той лишь разницей, что это поле необязательное.<br />
Указание адреса несколько отличается. Если адрес записан в одном поле, то достаточно выбрать это поле.
Указание адреса несколько отличается. Если адрес записан в одном поле, то достаточно выбрать это поле.

Версия от 12:47, 13 сентября 2012

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


Геокодирование в QGIS с помощью сервисов Google, Yandex, OSM(Nominatim).

Введение

Одним из способов получения геоданных является операция геокодирования. Она позволяет получить координаты объектов, у которых заранее известны адреса. В связи с большим объемом адресных БД, эту операцию обычно производят сервисы геокодирования. Наиболее известные сервисы на данный момент - Google Geocoding, Яндекс.Карты Геокодирование и OSM Nominatim.
QGIS не имеет встроенной возможности пользоваться сервисами геокодирования. Но гибкая система расширений позволяет добавлять практически любые функции. Для выполнения пакетного геокодирования можно использовать расширение RuGeocoder.

Подготовка к работе

Для выполнения геокодирования понадобятся:

  • QGIS версии 1.6 и выше
  • Расширение RuGeocoder (Присутствует в официальном репозитории)
  • Соединение с Интернетом (желательно быстрое)

При подготовке данных так же может понадобиться расширенный калькулятор атрибутивных полей. В примерах будет использоваться расширение FieldPyculator.
Процесс установки QGIS подробно описан в статье Установка QGIS/GRASS с помощью OSGeo4W.
Более подробно об установке расширений можно прочитать тут.

Подготовка данных

Для работы геокодер требует точечный слой, с адресами, находящимися в одном или нескольких атрибутивных полях. Компонентная форма записи адреса (название города, название улицы, номер дома и т.д. находятся в отдельных полях) более предпочтительна, и обычно позволяет добиться лучшего результата при геокодировании.

Преобразование таблицы в SHP файл

Достаточно часто, входные данные представлены в виде обычных таблиц. Наиболее удобный формат для обработки - CSV. С данным форматом могут работать практически все современные табличные редакторы: MS Excel, OpenOffice Calc и другие.
Для геокодирования таблицы её необходимо конвертировать в любой формат геоданных, которые можно редактировать в QGIS - SHP, sqlite, mapinfo и тд. Это преобразование можно сделать с помощью ogr2ogr, подробное описание можно прочитать в статье Конвертация данных из CSV в SHP и обратно с OGR. Но данный метод требует создания vrt файла и использование командной строки.
Для удобства RuGeocoder имеет встроенную функцию, с подобным преобразованием. На панели "Модули" необходимо нажать кнопку "Конвертировать CSV в SHP" RuGeocoder Convert.png. Тоже действие можно выполнить через меню "Модули" -> "RuGeocoder" -> "Конвертировать CSV в SHP". В открывшейся форме нужно выбрать входной CSV файл и указать путь, по которому будет сохранен результирующий SHP файл.

RuGeocoder Converter form.png

В результате конвертации, будет получен точечный shp файл с той же самой атрибутикой, и нулевыми координатами. Так же к атрибутике будут добавлены пустые поля типа string: settlement, street, house_num и geocoded. Данные поля можно будет использовать в целях подготовки адреса для геокодера.
Рассмотрим для примера CSV файл (Файл:RuGeocoder Ufa-leninsky utf8.zip), содержащий адреса УИК Ленинского района г. Уфы. После конвертирования получаем следующий SHP файл: Файл:Ufa-leninsky utf8 shp.zip.

Подготовка адреса

Для повышения качества геокодирования необходимо разбить адрес на составные части: населенный пункт, улица, строение. Каждая из частей должна находиться в отдельном поле (поле с названием населенного пункта можно не помещать в отдельное поле, а указать вручную, если все адреса в слое принадлежат этому населенному пункту). Если исходные данные изначально были в такой форме, то этот пункт обработки можно пропустить.
Как примером воспользуемся ранее подготовленным SHP файлом. Добавим его в проект и с помощью FieldPyculator подготовим необходимые поля. Как видно по полю addr_vote, адреса указаны единообразно, но содержат лишнюю информацию - номера школ, название организаций и тд. Выделим название улиц, использовав следующее выражение для Pyculator:

value =  <addr_vote>.split(',')[1].replace(u'ул.','').strip()

Для получения номеров строений используем следующий код:

value =  <addr_vote>.split(',')[2].strip().split(' ')[0]

В результате, получаем SHP файл (Файл:Ufa-leninsky utf8 shp attr.zip) с заполненными полями street и house_num. Исключением является одна запись (УИК с номером 187), в поле street которой попало название поселка. Данный недостаток легко исправить вручную.
Больше примеров обработки адресов можно найти на странице в вики: Проект_УИК_Республики_Башкортостан.

Геокодирование

После предварительной подготовки адресов можно приступать к самому геокодированию. Слой для обработки должен быть добавлен в проект и открыт на редактирование. Форма обработки вызывается нажатием кнопки "Пакетное геокодирование" на панели "Модули". Тоже действие можно выполнить через меню "Модули".
В открывшейся форме необходимо выбрать слой для геокодирования и регион. Если в слое присутствуют адреса из нескольких населенных пунктов, то необходимо выбрать поле, содержащее название поселения. Если все адреса относятся к одному населенному пункту, то его название можно указать вручную. Аналогичная ситуация с районам, с той лишь разницей, что это поле необязательное.
Указание адреса несколько отличается. Если адрес записан в одном поле, то достаточно выбрать это поле.

RuGeocoder AddrMerge.png

Если же адрес компонентный, то необходимо включить переключатель "Номер здания", и соответственно указать поле содержащее название улицы, и поле содержащее номер строения.

RuGeocoder AddrSplit.png

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