/// <summary> /// obtient une liste de RTSSC ainsi que sa distance par rapport à la BGR /// </summary> public IList <Tuple <double, Rtssc> > InverseGeocodeMultipleWithDistance(GeoCoordinate coordonnees, int rayonRecherche, int nombreMaximumRtssRechercher, IEnumerable <int> ideRtss) { // conversion coordonnées gps vers lambert LambertCoordinate lambert = GpsHelper.ConvertNAD83ToLambertMtq(coordonnees.Latitude, coordonnees.Longitude); var request = new ObtenirSousRouteCoordonneesRequete(); request.CoordonneeX = lambert.X; request.CoordonneeY = lambert.Y; request.RayonRecherche = rayonRecherche; request.NombreMaximumRtssRechercher = nombreMaximumRtssRechercher; ObtenirSousRouteCoordonneesReponse response = this.ObtenirSousRouteCoordonnees(request); var listeResultat = response.ListeSousRoute.Select(coord => coord.IdentifiantSousRoute).OrderBy(_ => _).ToArray(); if (ideRtss == null || !listeResultat.Intersect(ideRtss).Any()) { return(InverseGeocodeMultipleRouteWithDistance(lambert, rayonRecherche, listeResultat)); } else { return(InverseGeocodeMultipleRouteWithDistance(lambert, rayonRecherche, listeResultat.Intersect(ideRtss))); } }
public IList <T> InverseGeocodeMultipleRoute <T>(GeoCoordinate coordonnees, int rayonRecherche, IEnumerable <int> ideRTSs) where T : IRtssc, new() { // conversion coordonnées gps vers lambert LambertCoordinate lambert = GpsHelper.ConvertNAD83ToLambertMtq(coordonnees.Latitude, coordonnees.Longitude); var request = new GeocoderPointsInverseRequete(); request.ListeInformation = ideRTSs.Select( ideRTS => new InfoGeocoderPointInverse { CoordonneeX = lambert.X, CoordonneeY = lambert.Y, RayonRecherche = rayonRecherche, IdentifiantTheme = 207, IdentifiantSousRoute = Convert.ToInt32(ideRTS), DateActivite = DateTime.Today, CodeEmplacement = "" }).ToArray(); GeocoderPointsInverseReponse response = this.GeocoderPointsInverse(request); return(response.ListeInformation .OrderBy(item => item.DistanceTrace) .Select( item => new T { Chainage = item.Chainage, Route = item.NumeroRoute, Section = item.NumeroSection, SousRoute = item.NumeroSousRoute, Troncon = item.NumeroTroncon, Ide = Convert.ToInt32(item.IdentifiantSousRoute) }) .ToList()); }
/// <summary> /// Obtenir le RTSSC qui se trouve à la coordonnée GPS demandée /// à la date de référence choisie /// </summary> /// <param name="coordonnees"></param> /// <param name="rayonRecherche">Tolérance de distance entre le point GPS /// et le RTSSC le plus proche, en mètre</param> /// <param name="dateRef"></param> public T InverseGeocode <T>(GeoCoordinate coordonnees, double rayonRecherche, DateTime dateRef) where T : IRtssc, new() { double trace = 0; string emplacement = ""; string route = ""; string troncon = ""; string section = ""; string sousRoute = ""; int chainage = 0; // conversion coordonnées gps vers lambert LambertCoordinate lambert = DLC.Scientific.Core.Geocoding.Gps.GpsHelper.ConvertNAD83ToLambertMtq(coordonnees.Latitude, coordonnees.Longitude); // géocodage inverse this.GeocoderPointInverse( lambert.X, lambert.Y, rayonRecherche, dateRef, IdentDictnTheme, null, false, ref trace, ref emplacement, ref route, ref troncon, ref section, ref sousRoute, ref chainage); return(new T { Route = route, Troncon = troncon, Section = section, SousRoute = sousRoute, Direction = 0, Chainage = chainage }); }
public static IEnumerable <Tuple <double, Rtssc> > InverseGeocodeMultipleWithDistance(this PostGIS client, GeoCoordinate coordinates, int radius, DateTime date) { if (client == null) { throw new ArgumentNullException("client"); } if (coordinates == null) { throw new ArgumentNullException("coordinates"); } LambertCoordinate lambert = GpsHelper.ConvertNAD83ToLambertMtq(coordinates.Latitude, coordinates.Longitude); return(client.ObtenirListeRTSSC(new Point { X = lambert.X, Y = lambert.Y }, radius, string.Empty, date.ToString()) .Select(rtssc => Tuple.Create( rtssc.Distance, new Rtssc { Ide = client.ObtenirIDE(rtssc, date.ToShortDateString()).IdentifiantIDE, Route = rtssc.Route, Troncon = rtssc.Troncon, Section = rtssc.Section, SousRoute = rtssc.CodeSousRoute, Chainage = Math.Round(rtssc.Chainage, 0), Longueur = rtssc.LongueurSousRoute }))); }
/// <summary> /// obtient une liste RTSSC qui se trouvent à la coordonnée GPS demandée /// </summary> public IList <Rtssc> InverseGeocodeMultiple(GeoCoordinate coordonnees, int rayonRecherche, int nombreMaximumRtssRechercher) { // conversion coordonnées gps vers lambert LambertCoordinate lambert = GpsHelper.ConvertNAD83ToLambertMtq(coordonnees.Latitude, coordonnees.Longitude); var request = new ObtenirSousRouteCoordonneesRequete(); request.CoordonneeX = lambert.X; request.CoordonneeY = lambert.Y; request.RayonRecherche = rayonRecherche; request.NombreMaximumRtssRechercher = nombreMaximumRtssRechercher; ObtenirSousRouteCoordonneesReponse response = this.ObtenirSousRouteCoordonnees(request); return(InverseGeocodeMultipleRoute <Rtssc>(coordonnees, rayonRecherche, response.ListeSousRoute.Select(coord => coord.IdentifiantSousRoute))); }
private IList <Tuple <double, Rtssc> > InverseGeocodeMultipleRouteWithDistance(LambertCoordinate lambert, int rayonRecherche, IEnumerable <int> ideRTSs) { var request = new GeocoderPointsInverseRequete(); request.ListeInformation = ideRTSs.Select( ideRTS => new InfoGeocoderPointInverse { CoordonneeX = lambert.X, CoordonneeY = lambert.Y, RayonRecherche = rayonRecherche, IdentifiantTheme = 207, IdentifiantSousRoute = ideRTS, DateActivite = DateTime.Today, CodeEmplacement = "" }).ToArray(); GeocoderPointsInverseReponse response = this.GeocoderPointsInverse(request); return(response.ListeInformation .OrderBy(item => item.DistanceTrace) .Select(item => Tuple.Create( item.DistanceTrace, RtsscHelper.GetRtsscFromIde(Convert.ToInt32(item.IdentifiantSousRoute), item.Chainage))) .ToList()); }