IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

OpenLayers.Map function getCenter


Sujet :

IGN API Géoportail

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut OpenLayers.Map function getCenter
    Est-il possible d'avoir des précisions sur les valeurs retournées par cette fonction, 'getCenter', selon les systèmes de référence utilisées?

    Mon problème est le suivant:

    j'ai la séquence, très simple, de script suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Centrage de la carte  
       map.getMap().setCenterAtLonLat(mlong, mlat, 15);
       var centreG = map.getMap().getCenter();
    //Initialisation des coordonnées dans la page HTML
       document.coord_G.G_long.value = centreG.lon;
       document.coord_G.G_lat.value = centreG.lat;
    les variables mlong et mlat sont, dans le cas présent, initialisées à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mlong = -1.3;
    mlat = 43.8;
    Si l'initialisation de la carte est faite par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geoportalLoadmap("map_canvas", "normal", "FXX", "IGNF:RGF93G", "IGNF:RGF93G");
    Tout est correct et je retrouve bien dans les zones de la page HTML les valeurs de longitude et latitude égales à -1.3 et 43.8

    Si l'initialisation de la carte est faite par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geoportalLoadmap("map_canvas", "normal", "FXX", "IGNF:GEOPORTALFXX", "IGNF:RGF93G");
    Les données renvoyées par getCenter me surprennent. Je récupère dans ce cas:

    longitude : -99615.46510688316
    latitude : 4875793.696745382

    D'où ma question sur l'interprétation des données renvoyées par getCenter en fonction des systèmes de référence utilisés et ou trouver les informations nécessaires à cette interprétation (j'ai peut-être mal cherché mais je n'ai rien trouvé dans la documentation).

    NOTA1 : dans les deux cas le centrage de la carte s'effectue correctement et au même point (pas de soucis avec le 'setCenterAtLonLat')

    NOTA2: la même question se pose avec la fonction OpenLayers de conversion de coordonnées pixel en longitude/latitude.
    Ayant un suivi du déplacement de la souris et une conversion de cette position en longitude/latitude, les valeurs retournées sont du même ordre.

    NOTA3: dans le bandeau en dessous de la carte je constate que l'affichage des coordonnées est correct, dans les deux cas, aussi bien au départ que lors du déplacement de la souris (les concepteurs de l'API semblent savoir comment faire la conversion ).

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    En fait, la réponse est dans la question

    getCenter() retourne les coordonnées dans le système de coordonnées de la carte.
    Ce qui complexifie la chose, c'est qu'avec OpenLayers, la carte correspond à l'actuelle couche de base (propriété baseLayer de la map) qui porte les autres couches (propriété layers).
    Toutes les fonctions OpenLayers fonctionnent sur ce principe : même si les noms sont mal choisis (d'ailleurs, ils pensent les changer pour la version 3.0)

    Donc: "pixel vers lon lat" signifie pixel vers système de coordonnées de la carte de base.

    Le système de coordonnées de la carte se récupère toujours via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var mapproj= MAP.getMap().getProjection();
    Ensuite, il faut jouer avec les fonctions de transformation (transform()).

    Pour les systèmes de coordonnées, la documentation est .

    Pour les conversions de coordonnées, aucune magie, Cf. PROJ4JS. L'IGN participe au développement de cette bibliothèque.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci pour cette réponse toujours aussi rapide (même le weekend!)

    Cette réponse étant totalement satisfaisante je marque ce sujet résolu.

    Cordialement

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    J'ai oublié de préciser, c'était sous-entendu en marquant le sujet résolu, que maintenant tout fonctionne correctement.

    Si certains débutants se posent comme moi ce problème de conversion voici le code utilisé avec la fonction transform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Centrage de la carte mlong et mlat sont définis ailleurs
       map.getMap().setCenterAtLonLat(mlong, mlat, 15);
       
    //Initialisation des zones souris et marqueur dans la page HTML
       var cen = map.getMap().center;
       var n_centreG = cen.clone();      // Attention transform modifie "sur place"
       n_centreG.transform(map.getMap().getProjection(), map.displayProjection); 
       document.coord_G.G_long.value = arrondi(n_centreG.lon,9);
       document.coord_G.G_lat.value = arrondi(n_centreG.lat,9);
       document.coord_G.M_long.value = arrondi(n_centreG.lon,9);
       document.coord_G.M_lat.value = arrondi(n_centreG.lat,9);
    Concernant le suivi de la souris, avec un code analogue, j'obtiens bien les mêmes valeurs que celles affichées dans le bandeau inférieur standard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Suivi  évènement mousemove et visualisation des coordonnées dans le document HTML
       map.getMap().events.register("mousemove", map.getMap(), function(e) {
         var position = this.events.getMousePosition(e);
         var lonlat = map.getMap().getLonLatFromPixel(e.xy);
         var n_lonlat = lonlat.clone();
         n_lonlat.transform(map.getMap().getProjection(), map.displayProjection);
    .............
    NOTA1 : rassurez-vous je ne bégaie pas, si j'initialise deux champs avec la longitude et deux avec la latitude c'est parce que ultérieurement une zone reçoit les coordonnées associées au déplacement de la souris et l'autre reçoit les coordonnées d'un marqueur "dragable". Mais à l'initialisation le marqueur est au centre.

    NOTA2 : la fonction arrondi(A,B) me permet simplement de faire l'arrondi de la valeur A à la Bème décimale.

    Encore Merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 119
    Points : 1 764
    Points
    1 764
    Par défaut Juste deux petites remarques
    * Pourquoi ne pas utiliser la fonction toFixed
    * et 9 chiffres c'est beaucoup

    Un degré de latitude fait environ 111 111 mètres (40 000km / 360 ).
    Le 6ème chiffre est de l'ordre de 11cm ce qui doit être inférieur à la taille représentée par un pixel

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    1. Aucune objection à utiliser toFixed, simple question d'habitude, chacun a les siennes et pas toujours les meilleures!! Personnellement je n'aime pas les zéros ajoutés par toFixed si le nombre a moins de décimales. Question de gout.
    2. Dans cet exemple j'ai mis 9 décimales car c'est ce qui est utilisé dans le bandeau inférieur des cartes (lorsque l'on passe en décimal). C'était juste pour m'assurer que l'utilisation de transform était correcte et que j'obtenais bien la même valeur.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 119
    Points : 1 764
    Points
    1 764
    Par défaut
    Merci de ces précisions, point de vue qui se défend

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Geoportal search function of toolbox in Openlayers map
    Par zafrii dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 21/02/2014, 09h33
  2. openlayers + Export Map
    Par owenho dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 04/12/2012, 17h56
  3. Réponses: 2
    Dernier message: 05/09/2011, 19h35
  4. [OpenLayers] étendre de la class Map donne l'erreur this.registerEvents is not a function dans Firebug
    Par lermit dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 09/08/2010, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo