расстояние от точки в пределах многоугольника до края многоугольника - PullRequest
3 голосов
/ 22 мая 2009

Я работаю с огромной территорией, 7 штатами леса и без лесов, используя данные НЖКР. В некоторых лесных районах есть участок (это магистерская работа, над которой я работаю). Я поставил в тупик всех, кого я спросил, с этим большим набором данных, но мы уверены, что там есть решение. Лес / не лесная зона является подписанным и дискретным растром. Я смог превратить лесную зону в полигоны, выделив лесную зону. Я не могу превратить не лесную область в многоугольники (слишком большие). Итак, я пытался определить расстояние до точки (точка находится внутри многоугольника) до края лесного многоугольника. У вас есть предложения по получению расстояния от точки до края леса?

Ответы [ 3 ]

2 голосов
/ 18 марта 2013

Вот некоторый код, который выводит расстояние от точки до ребра, является ли многоугольник выпуклым или нет, против часовой стрелки или нет. Вам нужно будет проверить все ребра полигонов. Это может быть немного медленно для большого набора ребер.

- (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 + (edgePointA.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));

}
2 голосов
/ 22 мая 2009

Ну, это действительно зависит от нескольких вещей; в частности, какой край вы хотите? Хотите найти ближайшее ребро или у вас есть другие критерии, по которым вы хотите выбрать ребро по (например, кардинальному направлению)?

Если вы хотите найти ближайший край, вы в основном хотите выполнить итерацию по всем отрезкам линии, которые определяет многоугольник, выполнив вычисление расстояния от отрезка до точки; это найдет ваше расстояние. Есть хорошая реализация алгоритма в Python по этому вопросу, и там есть хорошее описание алгоритмов.

1 голос
/ 22 мая 2009

, если вы не уверены, что точка находится внутри внешнего многоугольника, сначала проверьте это. Затем, чтобы проверить расстояние до ближайшего края леса, вы можете попробовать что-то вроде этого:

http://www.bdcc.co.uk/Gmaps/BdccGeo.js

У Google есть множество результатов для "расстояния от точки до края многоугольника"

...