Реализация геозоны - C # - PullRequest
3 голосов
/ 18 марта 2011

Мне нужно реализовать Geofence в C #. Область Geofence может быть круглой, прямоугольной, многоугольной и т. Д. У кого-нибудь есть реализация Geofence в C #?

Я нашел Geo Fencing - точка внутри / снаружи полигона . Но он поддерживает только многоугольник.

Ответы [ 2 ]

6 голосов
/ 30 июля 2014

Я протестировал различные реализации, и этот пример работал для меня правильно:

* ** 1003 тысяча два * Пример
public static bool PolyContainsPoint(List<Point> points, Point p) {
    bool inside = false;

    // An imaginary closing segment is implied,
    // so begin testing with that.
    Point v1 = points[points.Count - 1];

    foreach (Point v0 in points)
    {
        double d1 = (p.Y - v0.Y) * (v1.X - v0.X);
        double d2 = (p.X - v0.X) * (v1.Y - v0.Y);

        if (p.Y < v1.Y)
        {
            // V1 below ray
            if (v0.Y <= p.Y)
            {
                // V0 on or above ray
                // Perform intersection test
                if (d1 > d2)
                {
                    inside = !inside; // Toggle state
                }
            }
        }
        else if (p.Y < v0.Y)
        {
            // V1 is on or above ray, V0 is below ray
            // Perform intersection test
            if (d1 < d2)
            {
                inside = !inside; // Toggle state
            }
        }

        v1 = v0; //Store previous endpoint as next startpoint
    }

    return inside; 
}
1 голос
/ 23 марта 2011

Обратитесь к моей реализации:

Многоугольник

Круг

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...