Определить, находится ли геолокация в сложном многоугольнике или нет
В настоящее время мы используем следующий алгоритм, чтобы определить, находится ли географическая точка внутри сложного многоугольника или нет. Это прекрасно работает, за исключением случаев, когда многоугольник пересекает 180 ° линия долготы.
Например, точка (-170, 60) не обнаруживается в многоугольнике 160,65,0 160,15,0 -160,15,0 -160,65,0 160,65,0
Посмотрите на следующее изображение: [img] http://tinypic.com/r/14x2xl1 [/ img] Я хочу, чтобы все было в красной рамке. Не желтая коробка!
public static bool IsCoordinateInPolygon(IList polygon, KMLCoordinate testPoint)
{
bool result = false;
int j = polygon.Count - 1;
for (int i = 0; i < polygon.Count; i++)
{
if (polygon[i].Latitude < testPoint.Latitude && polygon[j].Latitude >= testPoint.Latitude || polygon[j].Latitude < testPoint.Latitude && polygon[i].Latitude >= testPoint.Latitude)
{
if (polygon[i].Longitude + (testPoint.Latitude - polygon[i].Latitude) / (polygon[j].Latitude - polygon[i].Latitude) * (polygon[j].Longitude - polygon[i].Longitude) < testPoint.Longitude)
{
result = !result;
}
}
j = i;
}
return result;
}
У кого-нибудь есть лучший алгоритм?