Я работаю с огромной территорией, 7 состояниями леса и нелеса, используя данные NLCD. В некоторых лесных массивах есть участок (над моей магистерской диссертацией я работаю). Я поставил всех в тупик этим большим набором данных, но мы уверены, что есть решение. Лесная / нелесная область представляет собой дискретный растр со знаком. Я смог разделить лесную зону на многоугольники, выделив лесную зону. Я не могу превратить нелесную территорию в полигоны (слишком большие). Итак, я пытался получить расстояние от точки (точка находится внутри многоугольника) до края многоугольника, засаженного деревьями. Есть ли у вас предложения по увеличению расстояния до опушки леса?
расстояние от точки внутри многоугольника до края многоугольника
Ответы (3)
Что ж, это действительно зависит от нескольких вещей; конкретно, какой край вам нужен? Вы хотите найти ближайшее ребро или у вас есть другие критерии, по которым вы хотите выбрать ребро (например, направление света)?
Если вы хотите найти ближайшее ребро, вы в основном хотите перебрать все линейные сегменты, определяемые многоугольником, выполняя расчет расстояния между отрезками линии и точкой; это определит ваше расстояние. Есть хорошая реализация алгоритма в Python на this Вопрос, а там есть хорошее описание алгоритмов.
Вот код, который выводит расстояние от точки до края, является ли многоугольник выпуклым или нет, против часовой стрелки или нет. Вам нужно будет проверить все края ваших полигонов. Это может быть немного медленным для большого набора ребер.
- (double) distanceFromPoint:(yourPoint)testPoint
{
double pointX = edgePointB.x - edgePointA.x;
double pointY = edgePointB.y - edgePointA.y;
double k = pointX * pointX + pointY * pointY;
double u = ((testPoint.x - edgePointA.x) * pointX + (testPoint.y - edgePointA.y) * pointY) / k;
if (u > 1)
u = 1;
else if (u < 0)
u = 0;
double x = edgePointA.x + (u * pointX);
double y = edgePointA.y + (u * pointY);
double dx = x - testPoint.x;
double dy = y - testPoint.y;
return sqrt((dx * dx) + (dy * dy));
}
[0, 1]
), которая представляет, где в сегменте / ребре падает проекция точки
- person Azat Ibrakov; 30.04.2020
если вы не уверены, что точка находится внутри внешнего многоугольника, сначала проверьте это. Затем, чтобы проверить расстояние до ближайшего края леса, вы можете попробовать что-то вроде этого:
http://www.bdcc.co.uk/Gmaps/BdccGeo.js
У Google есть множество результатов по запросу «расстояние от точки до края многоугольника».