GIS-LAB

Географические информационные системы и дистанционное зондирование

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

Обсудить в форуме Комментариев — 1Редактировать в вики

Эта страница опубликована в основном списке статей сайта
по адресу 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 Создание открытого ПО ГИС и реализация проектов

[править] Ссылки по теме

Обсудить в форуме Комментариев — 1Редактировать в вики

Последнее обновление: 2014-05-15 00:37

Дата создания: 11.12.2011
Автор(ы): Александр Бруй


(Геокруг)

Если Вы обнаружили на сайте ошибку, выберите фрагмент текста и нажмите Ctrl+Enter