Рассчитать ближайшую точку полигона KML для приложения iPhone - PullRequest
1 голос
/ 05 января 2011

У меня есть ряд природных заповедников, которые необходимо нанести на карту в виде наложений полигонов с использованием координат, содержащихся в данных KML. На веб-сайте Apple я нашел учебник по отображению наложений KML на экземплярах карты.

Проблема в том, что запасы сильно различаются по размеру - от небольшого пруда до нескольких сотен километров. В результате я не могу использовать координаты центральной точки, чтобы найти ближайшие резервы. Вместо этого мне нужно вычислить ближайшую точку полигона резервов, чтобы найти ближайшую. С данными в KML - как бы я попытался достичь этого?

Мне удалось найти только одного человека, спросившего об этом, и никто не ответил: (

1 Ответ

2 голосов
/ 12 августа 2011

Ну, есть пара разных решений в зависимости от ваших потребностей.Чем выше требуемая точность, тем больше требуется работы.Мне нравится идея параметра MeanRadius Фила.Это дало бы вам приблизительное представление о том, какой полигон является ближайшим и его было бы довольно легко вычислить.Эта идея работает лучше всего, если многоугольники "кружатся".Если многоугольник имеет очень неправильную форму, эта идея теряет свою точность.

С математической точки зрения, вот что вы хотите сделать.Переберите все точки всех полигонов.Рассчитайте расстояние от этих точек до вашей текущей координаты.Тогда просто следите за тем, какой из них ближе всего.Есть одна последняя морщина.Представьте себе две точки, образующие очень длинный отрезок.Вы находитесь на расстоянии одного метра от средней точки линии.Что ж, расстояние до этих двух точек очень большое, хотя на самом деле вы очень близки к многоугольнику.Вам нужно будет рассчитать расстояние от вашей координаты до каждого возможного отрезка, что вы можете сделать различными способами, которые изложены здесь:

http://www.worsleyschool.net/science/files/linepoint/distance.html

Наконец, вам нужно спроситьсебя, я в каких-то полигонах?Если вы находитесь в 10 метрах от точки на многоугольнике, но на самом деле находитесь внутри многоугольника, очевидно, вы должны это учитывать.Лучший способ сделать это - использовать алгоритм приведения лучей:

http://en.wikipedia.org/wiki/Point_in_polygon#Ray_casting_algorithm

...