Обсудить в форуме Комментариев 1Редактировать в вики
Описание инструментов для смещения точек с одинаковыми координатами.
Одна из проблем, с которыми мы столкнулись в процессе работы над картой «Избирательная география Москвы»: по одному и тому же адресу может находиться несколько точек — участковых избирательных комиссий (УИК). Из-за этого точки, соответствующие УИКам, накладывались друг на друга и просмотр данных был возможен только для верхней точки.
Очевидное решение этой проблемы — сместить перекрывающиеся точки на небольшое расстояние так, чтобы все они были видны. Вариант с разносом точек вручную отпал сразу, слишком много перекрывающихся точек и трудно выдержать одинаковое расстояние. Необходимо автоматизированное решение. В первую очередь мы вспомнили о модуле QGIS «Смещение точек» (сейчас он включен в ядро). К сожалению, этот модуль смещает точки только в процессе отрисовки карты, реальные координаты остаются неизменными.
Поэтому для решения данной задачи был написан небольшой скрипт. А чуть позже и инструмент для QGIS.
![]() |
Создание открытого ПО ГИС и реализация проектов |
Содержание |
Для работы скрипта необходимо иметь сам скрипт, интерпретатор Python версии 2.5 или выше, библиотеку GDAL и ее привязки (bindings) к Python.
Наиболее простым способом получить необходимые компоненты в ОС Windows является использование установщика OSGeo4W:
Пользователи OC Linux должны установить необходимые пакеты при помощи пакетного менеджера своего дистрибутива.
Архив со скриптом необходимо распаковать, и файл displacement.py поместить в любой удобный каталог, например, в C:\Tools\GIS. Запускать скрипт следует из командной строки OSGeo4W.
Скрипт запускается из командной строки и принимает два обязательных аргумента. Также существует несколько параметров для настройки.
displacement.py [OPTIONS] INPUT_FILE OUTPUT_FILE
Аргументы:
Список параметров:
Скрипт находит точки с одинаковыми координатами и размещает их по кругу, используя в качестве центра исходные координаты и значение параметра "-d" в качестве радиуса. Таким образом, скрипт дает практически ту же картину, что и модуль QGIS «Смещение точек».
Ниже показан результат работы скрипта (синий — исходные точки, зеленый — точки после сдвига, величина сдвига ~10 м.).
Расширение доступно из официального репозитория расширений QGIS. Если вы пользуетесь QGIS 1.7.x, вам необходимо добавить его к списку репозиториев вручную.
ShiftPoints разработан для QGIS версии 1.0.0 или старше и не имеет зависимостей.
Исходный код модуля можно получить выполнив команду
git clone https://github.com/alexbruy/shiftpoints.git
После подключения и запуска расширения с помощью кнопки
появится главное окно
В выпадающем списке «Исходный векторный слой» выбирается точечный векторный слой, объекты которого необходимо разнести. При помощи числового поля «Расстояние смещения» задается желаемой расстояние, на которое перекрывающиеся точки будут сдвигаться. ВАЖНО! Расстояние смещение задается в тех же единицах, которые используются в самом слое.
В поле «Выходной файл» необходимо указать файл, в который будет записан измененый слой. Переключатель «В случае двух точек размещать горизортально (иначе вертикально)» позволяет настраивать размещение двух перекрывающихся точек. Если он активирован, точки будут разнесены в горизонтальной плоскости, в противном случае — в вертикальной. При необходимости полученный shape-файл — можно загрузить в проект, для этого надо активировать переключатель «Добавить результат на карту».
Процесс обработки запускается нажатием на кнопку «OK».
Если вы нашли ошибку или у вас есть предложения по улучшению расширения — воспользуйтесь багтрекером. Кроме того, вопросы по использованию как скрипта так и расширения можно задать авторам напрямую.
![]() |
Создание открытого ПО ГИС и реализация проектов |
Обсудить в форуме Комментариев 1Редактировать в вики
Последнее обновление: 2014-05-14 22:37
Дата создания: 11.12.2011
Автор(ы): Александр Бруй
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).