/// <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());
        }
Exemple #3
0
        /// <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
            });
        }
Exemple #4
0
        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());
        }