Géolocalisation

Description

Exemple sous Visual Studio 2005 de paramétrage d'une carte à partir de la longitude et la latitude connues de certaines villes (France métropolitaine).
Pour ceux qui veulent approfondir le sujet, l'IGN met à disposition sur son site des informations relatives aux calculs des coordonnées, des cartes libres de droit, ainsi que les coordonnées des communes.

Pour utiliser l'étalonnage, il faut charger une carte voir CarteDep.jpg dans ressource du projet (carte IGN libre de droit) puis se positionner dans la grille sur les villes et cliquer sur la carte.
On peut tester l'étalonnage de la carte avec différentes villes indiquées dans la combo Ville.

Source / Exemple :


public class Lambert
    {

        /// <summary>
        /// Calcul de Coordonnées Lambert II étendues
        /// </summary>
        /// <param name="pLatitude">Latitude en degrée decimale</param>
        /// <param name="pLongitude">Longitude en degrée decimale</param>
        /// <returns>Coordonnées Lambert II étendues</returns>
        public static Point Coordonnees(double pLatitude, double pLongitude)
        {
            double latitude = Deg2Grad(pLatitude);
            double longitude = Deg2Grad(pLongitude);
            Point lcRet = new Point();
            Double n = 0.7289686274;
            Double C = 11745793.39;
            Double Xs = 600000;
            Double Ys = 8199695.768;
            //Double Ys = 6199695.768;
            // Longitude du Meridien central en radian
            // Utlisation de Londres comme référence ED50
            //Double mC = Deg2Grad(2, 20, 14.025);
            // Utilisation de Paris comme référence NTF
            Double mC = 0;
            // Exentricité de l'ellipsoïde
            Double e = 0.08248325676;

            Double l = (0.5 * Math.Log(((1 + Math.Sin(Grad2Rad(latitude))) / (1 - Math.Sin(Grad2Rad(latitude))))))
                - ((e / 2) * Math.Log(((1 + (e * Math.Sin(Grad2Rad(latitude)))) / (1 - (e * Math.Sin(Grad2Rad(latitude)))))));
            Double R = C * Math.Exp(-n * l);
            Double fi = n * (longitude - mC);

            lcRet.X = (int)Math.Round(Xs + (R * Math.Sin(Grad2Rad(fi))));
            lcRet.Y = (int)Math.Round(Ys - (R * Math.Cos(Grad2Rad(fi))));

            return lcRet;
        }
        /// <summary>
        /// Conversion d'angle
        /// </summary>
        /// <param name="pAngle">Degré</param>
        /// <returns>Radian</returns>
        public static double Deg2Grad(Double pAngle)
        {
            return pAngle * 200 / 180;
        }
        /// <summary>
        /// Conversion d'angle
        /// </summary>
        /// <param name="pAngle">Grade</param>
        /// <returns>Degré</returns>
        public static double Grad2Deg(Double pAngle)
        {
            return pAngle * 180 / 200;
        }

        /// <summary>
        /// Conversion d'angle
        /// </summary>
        /// <param name="pDeg">Degré</param>
        /// <param name="pMin">Minute</param>
        /// <param name="pSec">Seconde</param>
        /// <returns>Grade</returns>
        public static double Deg2Grad(Double pDeg, Double pMin, Double pSec)
        {
            double pAngle = pDeg + (pMin / 60) + (pSec / 3600);
            return pAngle * 200 / 180;
        }

        /// <summary>
        /// Conversion d'angle
        /// </summary>
        /// <param name="pAngle">Grade</param>
        /// <returns>Radian</returns>
        public static double Grad2Rad(Double pAngle)
        {
            return pAngle * Math.PI / 200;
        }
    }

Conclusion :


Le programme est basic, les coordonnées des villes etalons et des villes de test sont en dur dans le programme. Mais l'étalonnage d'une carte est sauvegardée en XML dans mes documents.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.