Вычислить минимальное расстояние между точками и полигонами в QGIS?
9
У меня есть два векторных слоя: одна точка и один многоугольник, и я хочу вычислить минимальное расстояние каждой точки от многоугольников (то есть расстояние от ближайшей точки ближайшего многоугольника).
Вы имеете в виду вершины многоугольника, центроид или что-то еще?
lynxlynxlynx
Эту задачу лучше бы решить postgis.
Пабло
Я имею в виду расстояние от границ многоугольника (на самом деле это расстояние между наблюдаемыми морскими птицами в море и береговой линией, которое я хочу вычислить)
Сильвия,
Пабло, к сожалению, я не знаю, как использовать PostGIS, и я не могу написать код ...
Сильвия,
Ответы:
9
Преобразование полигона в точки сначала плохая идея. Вы не будете рассчитывать расстояние до вашего многоугольника, вы будете рассчитывать расстояние до ближайшего узла ваших многоугольников (а не ребер, которые могут быть ближе). Вы можете использовать плагин NNJoin, чтобы получить точные измерения для вашего полигона. Убедитесь, что ваши слои находятся в одной проекции, прежде чем выполнять анализ.
Плагин QGIS NNJoin позаботится о преобразовании системы координат. Но вы должны убедиться, что вы используете проекционную систему координат для набора данных соединения (входной набор данных будет преобразован в систему координат набора данных соединения, если их системы координат различаются).
Håvard Tveite
6
Если вы хотите использовать QGIS, функция GRASS v.distance в плагине GRASS должна выполнить эту работу. NNJoin плагин должен работать для небольших наборов данных, и является менее обременительным для использования.
NNJoin плагин использует функцию QgsGeometry.distance () (который использует GEOSdistance) для вычисления расстояния.
Это хороший ответ на первоначальный вопрос, но с тех пор этот вопрос был изменен в комментарии. Извлечь узлы и матрицу расстояний может не найти самое близкое место на границе (самое близкое место может быть между точками граничной полилинии). GRASS v.distance или плагин NNJoin.
Дистанция хаба сделала свое дело, но для записи я сначала преобразовал полигон в точечный слой и рассчитал минимальные расстояния от точки до точки. С помощью полигонов вычислялось минимальное расстояние от центроидов или середины береговой границы
Ответы:
Преобразование полигона в точки сначала плохая идея. Вы не будете рассчитывать расстояние до вашего многоугольника, вы будете рассчитывать расстояние до ближайшего узла ваших многоугольников (а не ребер, которые могут быть ближе). Вы можете использовать плагин NNJoin, чтобы получить точные измерения для вашего полигона. Убедитесь, что ваши слои находятся в одной проекции, прежде чем выполнять анализ.
источник
Если вы хотите использовать QGIS, функция GRASS v.distance в плагине GRASS должна выполнить эту работу. NNJoin плагин должен работать для небольших наборов данных, и является менее обременительным для использования.
NNJoin плагин использует функцию QgsGeometry.distance () (который использует GEOSdistance) для вычисления расстояния.
источник
Сначала преобразуйте полигон в точки:
Вектор -> Инструменты геометрии -> Узлы извлечения
Добавьте этот новый слой, затем вычислите матрицу расстояний между слоем точек и новым слоем с многоугольниками, которые вы только что создали.
Вектор -> Инструменты анализа -> Матрица расстояний
Обязательно выберите «Использовать только ближайшие (k) целевые точки» в качестве 1
источник
Попробуйте Hub Distance в плагине MMQGIS.
http://michaelminn.com/linux/mmqgis/
Ссылки:
источник