Я использую QGIS 1.8 Lisboa. После вычисления центроидов из шейп-файла многоугольника, если некоторые из них лежат вне контуров многоугольника, я бы хотел переместить их на многоугольник, с которого они пришли. Критерий должен быть однозначным, поскольку я должен использовать их для извлечения координат, которые будут использоваться в качестве идентификационного кода самого многоугольника. Следовательно, процедура должна выводить одно и то же местоположение точки каждый раз, когда она выполняется для одного и того же многоугольника (а не случайное положение, подобное тому, которое задано функцией «случайные точки», которая дает новый результат при каждом запуске).
9
Ответы:
Вы можете использовать библиотеку питона Shapely, которая предоставляет функцию,
representative_point()
которая гарантированно находится внутри многоугольника.Вот скрипт Python, который можно запустить в консоли QGIS Python. Слой полигона, для которого вы хотите создать атрибут, должен быть выбран. Функция берет имя атрибута, который вы хотите обновить. Атрибут должен уже существовать в вашем слое, он должен иметь строковый тип и быть достаточно длинным (30 символов).
Вот пример точек, найденных алгоритмом:
источник
Инструмент центроида ftools может поместить центроид вне многоугольника, если он вогнутый.
ST_PointOnSurface
обязательно сделаем то, что вы хотите. Вы можете использовать команду из QGIS, если вы установили ее с помощью SPIT, чтобы загрузить свой шейп-файл в PostGIS, а затем использовать плагин PgQuery для запуска запроса.В качестве альтернативы, если установка PostGIS слишком сложна для одноразового использования, вы можете использовать Spatialite из QGIS. Затем вы можете использовать плагин QSpatiaLite, чтобы импортировать ваши данные в SpatiaLite и выполнить запрос (SpatialLite honours
ST_PointOnSurface
).источник
когда я вас правильно понял, используйте: Vector-> Research Tools_> Random Points. Теперь выберите в разделе «Проект стратифицированной выборки (отдельные полигоны)» значение из поля ввода и используйте соответствующее поле, которое дает числовое значение точек, которые должны быть сгенерированы для каждого отдельного полигона.
источник
Плагин realcentroids, доступный для установки через Plugins> Manage and Install Plugins, работал для меня в QGIS 2.2 для создания центроидоподобных точек, принудительно создаваемых внутри каждого многоугольника, если он вогнутый (точка будет лежать очень близко к краю). Я попробовал инструмент «Случайные точки», как предложил Курт, и хотя я указал 1 точку на многоугольник, он генерирует два вместо. Дополнительным недостатком является то, что в большинстве случаев точки не представляют центроид, поскольку они являются случайными.
http://www.agt.bme.hu/gis/qgis/realcentroid/
источник