Я хотел бы выровнять несколько точек на линию или линии внутри слоя, используя заданный допуск или буфер вокруг объектов линии. Пожалуйста, обратитесь к приложенному образцу эскиза.
В этом примере точки, ближайшие к линии на рисунке ДО, находятся в пределах 5 единиц карты от линии, в то время как крайние точки находятся на расстоянии более 10 единиц карты. Я хотел бы привязать ближайшие точки к ближайшей линии, используя допуск в 5 единиц карты для достижения результата в ПОСЛЕДНЕМ изображении.
Ответы:
Для этого существует (не выпущенная) версия QGIS 3.0 для этого есть встроенный инструмент. Вы можете получить ночной снимок с веб-сайта QGIS, чтобы проверить это заранее.
Сделать это:
Вот результат, показывающий исходные точки в виде «х», а привязанные точки в виде зеленых точек. Я использовал здесь допуск, чтобы привязывались только некоторые входные точки.
источник
Это можно сделать с помощью PyQGIS . Для следующей ситуации:
следующий код, учитывая допуск 5 единиц карты, был запущен на консоли Python QGIS:
Был создан слой памяти, в котором точки были привязаны в соответствии с ранее рассмотренным допуском в 5 единиц карты и перпендикулярным путем к линии.
источник
Вы также можете сделать это в Калькуляторе полей с помощью плагина refFunctions. Вы можете использовать Калькулятор поля для обновления геометрии слоя, а также полей. refFunctions дает вам функцию «geomdistance», чтобы найти ближайшую линию на заданном расстоянии (или «geomnearest», если вы не хотите порог), и возвращает атрибут или геометрию, а функция «closest_point» найдет ближайшую указать на заданную геометрию. Соедините их вместе, чтобы вычислить новые геометрии для вашего точечного слоя:
closest_point(geom_from_wkt(geomdistance('snap_lines','$geometry',10)) , $geometry)
Вместо непосредственного обновления геометрии вы можете вместо этого вычислить поле с привязанной геометрией. Я храню несколько геометрий для привязки точек водопропускной трубы к различным слоям потока, и я могу легко обновить геометрию точек в Калькуляторе поля в зависимости от того, чьи линии потока мне нужно использовать.
С этим связаны некоторые ограничения: оба слоя должны быть одинаковыми CRS, а функция geomdistance выдаст ошибку, если у вас более 100 000 точек, но вы можете изменить это ограничение, если вы редактируете файл плагина refFunctions.
источник