예제 #1
0
        public override bool IsPointClose(Coordonnees point, double precision)
        {
            if (NbPoints < 2)
            {
                return(false);
            }
            Bbox.InitBbox(Coordonnees);

            if (point.Longitude < Bbox.Min.Longitude || point.Longitude > Bbox.Max.Longitude)
            {
                return(false);
            }
            if (point.Latitude < Bbox.Min.Latitude || point.Latitude > Bbox.Max.Latitude)
            {
                return(false);
            }

            // calculer distance entre point et les 2 extremites + mediane et considerer le plus petit
            for (int i = 0; i < Coordonnees.Count - 1; i++)
            {
                double distance;
                distance = MathUtil.DistanceBetweenLine(Coordonnees[i].Longitude, Coordonnees[i].Latitude, Coordonnees[i + 1].Longitude, Coordonnees[i + 1].Latitude, point.Longitude, point.Latitude);
                if (distance < precision)
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #2
0
        public override bool IsPointClose(Coordonnees point, double precision)
        {
            if (NbPoints == 0)
            {
                throw new ArgumentException("La liste de polyline est vide");
            }

            Bbox.InitBbox(Coordonnees);

            if (point.Longitude < Bbox.Min.Longitude || point.Longitude > Bbox.Max.Longitude)
            {
                return(false);
            }
            if (point.Latitude < Bbox.Min.Latitude || point.Latitude > Bbox.Max.Latitude)
            {
                return(false);
            }

            for (int i = 0; i < Coordonnees.Count; i++)
            {
                double distance;
                if (i < Coordonnees.Count)
                {
                    distance = MathUtil.DistanceBetweenLine(Coordonnees[i].Longitude, Coordonnees[i].Latitude, Coordonnees[i + 1].Longitude, Coordonnees[i + 1].Latitude, point.Longitude, point.Latitude);
                    if (distance < precision)
                    {
                        return(true);
                    }
                }
                else // derniere ligne pour fermer le polygone
                {
                    distance = MathUtil.DistanceBetweenLine(Coordonnees[i].Longitude, Coordonnees[i].Latitude, Coordonnees[0].Longitude, Coordonnees[0].Latitude, point.Longitude, point.Latitude);
                    if (distance < precision)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }