Géolocalisation

Soyez le premier à donner votre avis sur cette source.

Vue 36 915 fois - Téléchargée 2 299 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
Whismeril
Messages postés
17654
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
13 août 2022
612
14 févr. 2019 à 19:02
BONJOUR un peu de politesse ça ne fait de mal à personne.
Cette erreur est signalée depuis février 2006, soit depuis que le source est posté (il suffit de regarder les 5 commentaires avant toi), l'auteur n'a jamais corrigé et n'est d'ailleurs pas réapparu sur le forum depuis.

D'autre part, dans la description il explique que les coordonnées sont en NTF, je ne vais pas faire un cours de géodésie là maintenant, mais ce système est illégal en France depuis décembre 2000. La NTF était le système précédent et datait des années 1880, soit un siècle avant l'invention du GPS.

Donc, même si le programme ne buggait pas, tu ne pourrais pas y rentrer les coordonnées GPS de ta ville, ou ta maison.

Dans sa description, il a écrit que le site de l'IGN explique tout bien comme il faut, je confirme.
Erreur au Debug
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

12 janv. 2009 à 13:29
Problème j'arrive pas à faire fonctionner le source.

Erreur sur le this.CarteAffi.Reload.
cs_nonold
Messages postés
22
Date d'inscription
samedi 11 octobre 2003
Statut
Membre
Dernière intervention
23 octobre 2008

16 juil. 2008 à 11:23
Pas moyen de faire fonctionner la source.

Erreur sur le this.CarteAffi.Reload.
jfrot
Messages postés
1
Date d'inscription
mercredi 17 mars 2004
Statut
Membre
Dernière intervention
9 mars 2007

9 mars 2007 à 14:53
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
Afficher les 7 commentaires

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.