Géolocalisation

Soyez le premier à donner votre avis sur cette source.

Vue 35 068 fois - Téléchargée 2 145 fois

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

Ajouter un commentaire

Commentaires

cs_Mauricet
Messages postés
89
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
28 juillet 2008
-
Bonjour
Programme intéressant mais j'ai une erreur de suite au Debug
this.CarteAffi.Reload;

Maurice
websys
Messages postés
1
Date d'inscription
lundi 10 juillet 2006
Statut
Membre
Dernière intervention
10 juillet 2006
-
Bonsoir à tous,
Je cherche à tester cette source, et à chaque fois que je veux enregistrer des infos on me renvois sur DEVENIR MEMBRE.... Alors que je suis déjà logué !

Franck
jfrot
Messages postés
1
Date d'inscription
mercredi 17 mars 2004
Statut
Membre
Dernière intervention
9 mars 2007
-
Super programme, mais je n'arrive pas à placer les villes avec précision dans mon site car je n'ai pas les mêmes coordonnées de villes ...
Les coordonnées de villes d'étalonnage sont-elles en degrés ou radians ?
Et où pourrais-je trouver la même base de données que vous ?

Merci !

Johann
cs_nonold
Messages postés
22
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
23 octobre 2008
-
Pas moyen de faire fonctionner la source.

Erreur sur le this.CarteAffi.Reload.
napples
Messages postés
4
Date d'inscription
mercredi 29 septembre 2004
Statut
Membre
Dernière intervention
12 janvier 2009
-
Problème j'arrive pas à faire fonctionner le source.

Erreur sur le this.CarteAffi.Reload.

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.