Смещение точек с одинаковыми координатами, ShiftPoints/OGR: различия между версиями
Voltron (обсуждение | вклад) (Новая страница: «{{Статья|Опубликована|point-displacement}} {{Аннотация|Описание инструментов для смещения точек с …») |
Voltron (обсуждение | вклад) Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 44: | Строка 44: | ||
Список параметров: | Список параметров: | ||
* -d DISTANCE, --distance=DISTANCE — расстояние, на которое будут сдвигаться перекрывающиеся точки. ВАЖНО! Необходимо следить, чтобы расстояние было в тех же единицах, что и координаты точек. Например, если координаты точек заданы в десятичных градусах, то расстояние должно быть в десятичных градусах. | * -d DISTANCE, --distance=DISTANCE — расстояние, на которое будут сдвигаться перекрывающиеся точки. '''ВАЖНО'''! Необходимо следить, чтобы расстояние было в тех же единицах, что и координаты точек. Например, если координаты точек заданы в десятичных градусах, то расстояние должно быть в десятичных градусах. | ||
* -r, --rotate — параметр-переключатель. Если он задан, то две перекрывающиеся точки будут разнесены по горизонтали, иначе — по вертикали. По умолчанию False, т.е точки разносятся по вертикали. | * -r, --rotate — параметр-переключатель. Если он задан, то две перекрывающиеся точки будут разнесены по горизонтали, иначе — по вертикали. По умолчанию False, т.е точки разносятся по вертикали. | ||
* -l FILE, --log=FILE — имя файла, в который будут записаны ID перекрывающихся точек и значения заданного поля. Имеет смысл только вместе с указанием параметра "-f" | * -l FILE, --log=FILE — имя файла, в который будут записаны ID перекрывающихся точек и значения заданного поля. Имеет смысл только вместе с указанием параметра "-f" | ||
Строка 95: | Строка 95: | ||
* [http://gis-lab.info/qa/ogr-python.html Работа с векторными данными при помощи OGR и Python] | * [http://gis-lab.info/qa/ogr-python.html Работа с векторными данными при помощи OGR и Python] | ||
* [http://gis-lab.info/qa/qgis-install-plugin.html Установка модулей расширения в QGIS] | |||
* [http://gis-lab.info/docs/qgis/ Документация по QGIS] |
Текущая версия от 08:41, 22 июля 2012
по адресу http://gis-lab.info/qa/point-displacement.html
Описание инструментов для смещения точек с одинаковыми координатами.
Одна из проблем, с которыми мы столкнулись в процессе работы над картой «Избирательная география Москвы»: по одному и тому же адресу может находиться несколько точек — участковых избирательных комиссий (УИК). Из-за этого точки, соответствующие УИКам, накладывались друг на друга и просмотр данных был возможен только для верхней точки.
Очевидное решение этой проблемы — сместить перекрывающиеся точки на небольшое расстояние так, чтобы все они были видны. Вариант с разносом точек вручную отпал сразу, слишком много перекрывающихся точек и трудно выдержать одинаковое расстояние. Необходимо автоматизированное решение. В первую очередь мы вспомнили о модуле QGIS «Смещение точек» (сейчас он включен в ядро). К сожалению, этот модуль смещает точки только в процессе отрисовки карты, реальные координаты остаются неизменными.
Поэтому для решения данной задачи был написан небольшой скрипт. А чуть позже и инструмент для QGIS.
Создание открытого ПО ГИС и реализация проектов |
Скрипт на Python
Подготовка
Для работы скрипта необходимо иметь сам скрипт, интерпретатор Python версии 2.5 или выше, библиотеку GDAL и ее привязки (bindings) к Python.
Наиболее простым способом получить необходимые компоненты в ОС Windows является использование установщика OSGeo4W:
- загрузить установщик. Для пользователей, у которых возникают проблемы с доступом к серверу download.osgeo.org, создан альтернативный установщик, работающий с зеркалом download2.osgeo.org
- запустить установщик
- выбрать пункт «Расширенная установка» и нажать «Далее»
- выбрать пакеты gdal и gdal-python (категория Libs), нажать «Далее»
- выбранные пакеты и необходимые зависимости будут загружены и установлены автоматически
Пользователи 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 м.).
Инструмент для QGIS
Получение и установка
Расширение доступно из официального репозитория расширений QGIS. Если вы пользуетесь QGIS 1.7.x, вам необходимо добавить его к списку репозиториев вручную.
ShiftPoints разработан для QGIS версии 1.0.0 или старше и не имеет зависимостей.
Исходный код модуля можно получить выполнив команду
git clone https://github.com/alexbruy/shiftpoints.git
Работа с расширением
После подключения и запуска расширения с помощью кнопки
появится главное окно
В выпадающем списке «Исходный векторный слой» выбирается точечный векторный слой, объекты которого необходимо разнести. При помощи числового поля «Расстояние смещения» задается желаемой расстояние, на которое перекрывающиеся точки будут сдвигаться. ВАЖНО! Расстояние смещение задается в тех же единицах, которые используются в самом слое.
В поле «Выходной файл» необходимо указать файл, в который будет записан измененый слой. Переключатель «В случае двух точек размещать горизортально (иначе вертикально)» позволяет настраивать размещение двух перекрывающихся точек. Если он активирован, точки будут разнесены в горизонтальной плоскости, в противном случае — в вертикальной. При необходимости полученный shape-файл — можно загрузить в проект, для этого надо активировать переключатель «Добавить результат на карту».
Процесс обработки запускается нажатием на кнопку «OK».
Контакты
Если вы нашли ошибку или у вас есть предложения по улучшению расширения — воспользуйтесь багтрекером. Кроме того, вопросы по использованию как скрипта так и расширения можно задать авторам напрямую.
Создание открытого ПО ГИС и реализация проектов |