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); }
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); }