Wykryj, czy geolokalizacja ma złożony wielokąt, czy nie

Obecnie używamy następującego algorytmu do wykrywania, czy punkt geograficzny znajduje się wewnątrz złożonego wielokąta, czy nie. Działa to dobrze, z wyjątkiem sytuacji, gdy wielokąt przekracza linię 180 ° długości geograficznej.

Na przykład punkt (-170, 60) nie jest wykrywany w wielokącie 160,65,0 160,15,0 -160,15,0 -160,65,0 160,65,0

Spójrz na poniższy obrazek: [Img] http://tinypic.com/r/14x2xl1 [/ img] Chcę wszystkiego w czerwonym polu. Nie żółte pudełko!

    public static bool IsCoordinateInPolygon(IList<KMLCoordinate> 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;

    }

Czy ktoś ma lepszy algorytm?

questionAnswers(1)

yourAnswerToTheQuestion