Смещение точек с одинаковыми координатами, ShiftPoints/OGR

Материал из GIS-Lab
Версия от 08:41, 22 июля 2012; Voltron (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/point-displacement.html


Описание инструментов для смещения точек с одинаковыми координатами.

Одна из проблем, с которыми мы столкнулись в процессе работы над картой «Избирательная география Москвы»: по одному и тому же адресу может находиться несколько точек — участковых избирательных комиссий (УИК). Из-за этого точки, соответствующие УИКам, накладывались друг на друга и просмотр данных был возможен только для верхней точки.

Очевидное решение этой проблемы — сместить перекрывающиеся точки на небольшое расстояние так, чтобы все они были видны. Вариант с разносом точек вручную отпал сразу, слишком много перекрывающихся точек и трудно выдержать одинаковое расстояние. Необходимо автоматизированное решение. В первую очередь мы вспомнили о модуле QGIS «Смещение точек» (сейчас он включен в ядро). К сожалению, этот модуль смещает точки только в процессе отрисовки карты, реальные координаты остаются неизменными.

Поэтому для решения данной задачи был написан небольшой скрипт. А чуть позже и инструмент для QGIS.

Nextgis.png Создание открытого ПО ГИС и реализация проектов

Скрипт на Python

Подготовка

Для работы скрипта необходимо иметь сам скрипт, интерпретатор Python версии 2.5 или выше, библиотеку GDAL и ее привязки (bindings) к Python.

Наиболее простым способом получить необходимые компоненты в ОС Windows является использование установщика OSGeo4W:

  1. загрузить установщик. Для пользователей, у которых возникают проблемы с доступом к серверу download.osgeo.org, создан альтернативный установщик, работающий с зеркалом download2.osgeo.org
  2. запустить установщик
  3. выбрать пункт «Расширенная установка» и нажать «Далее»
  4. выбрать пакеты gdal и gdal-python (категория Libs), нажать «Далее»
  5. выбранные пакеты и необходимые зависимости будут загружены и установлены автоматически

Пользователи OC Linux должны установить необходимые пакеты при помощи пакетного менеджера своего дистрибутива.

Архив со скриптом необходимо распаковать, и файл displacement.py поместить в любой удобный каталог, например, в C:\Tools\GIS. Запускать скрипт следует из командной строки OSGeo4W.

Использование

Скрипт запускается из командной строки и принимает два обязательных аргумента. Также существует несколько параметров для настройки.

displacement.py [OPTIONS] INPUT_FILE OUTPUT_FILE

Аргументы:

  • INPUT_FILE — исходный точечный shape-файл
  • OUTPUT_FILE — файл, в который будет записан результат работы

Список параметров:

  • -d DISTANCE, --distance=DISTANCE — расстояние, на которое будут сдвигаться перекрывающиеся точки. ВАЖНО! Необходимо следить, чтобы расстояние было в тех же единицах, что и координаты точек. Например, если координаты точек заданы в десятичных градусах, то расстояние должно быть в десятичных градусах.
  • -r, --rotate — параметр-переключатель. Если он задан, то две перекрывающиеся точки будут разнесены по горизонтали, иначе — по вертикали. По умолчанию False, т.е точки разносятся по вертикали.
  • -l FILE, --log=FILE — имя файла, в который будут записаны ID перекрывающихся точек и значения заданного поля. Имеет смысл только вместе с указанием параметра "-f"
  • -f FIELD, --field=FIELD — имя поля shape-файла, значение которого будет выводиться в лог. Имеет смысл только вместе с указанием параметра "-l"

Скрипт находит точки с одинаковыми координатами и размещает их по кругу, используя в качестве центра исходные координаты и значение параметра "-d" в качестве радиуса. Таким образом, скрипт дает практически ту же картину, что и модуль QGIS «Смещение точек».

Ниже показан результат работы скрипта (синий — исходные точки, зеленый — точки после сдвига, величина сдвига ~10 м.).

Point-displacement-01.png

Инструмент для QGIS

Получение и установка

Расширение доступно из официального репозитория расширений QGIS. Если вы пользуетесь QGIS 1.7.x, вам необходимо добавить его к списку репозиториев вручную.

ShiftPoints разработан для QGIS версии 1.0.0 или старше и не имеет зависимостей.

Исходный код модуля можно получить выполнив команду

git clone https://github.com/alexbruy/shiftpoints.git

Работа с расширением

После подключения и запуска расширения с помощью кнопки

Shiftpoints.png

появится главное окно

Point-displacement-03.png

В выпадающем списке «Исходный векторный слой» выбирается точечный векторный слой, объекты которого необходимо разнести. При помощи числового поля «Расстояние смещения» задается желаемой расстояние, на которое перекрывающиеся точки будут сдвигаться. ВАЖНО! Расстояние смещение задается в тех же единицах, которые используются в самом слое.

В поле «Выходной файл» необходимо указать файл, в который будет записан измененый слой. Переключатель «В случае двух точек размещать горизортально (иначе вертикально)» позволяет настраивать размещение двух перекрывающихся точек. Если он активирован, точки будут разнесены в горизонтальной плоскости, в противном случае — в вертикальной. При необходимости полученный shape-файл — можно загрузить в проект, для этого надо активировать переключатель «Добавить результат на карту».

Процесс обработки запускается нажатием на кнопку «OK».

Контакты

Если вы нашли ошибку или у вас есть предложения по улучшению расширения — воспользуйтесь багтрекером. Кроме того, вопросы по использованию как скрипта так и расширения можно задать авторам напрямую.

Nextgis.png Создание открытого ПО ГИС и реализация проектов

Ссылки по теме