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 :

décalage des markers avec changement d'échelle


Sujet :

IGN API Géoportail

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 9
    Points
    9
    Par défaut décalage des markers avec changement d'échelle
    Bonjour,
    je reviens à l'attaque avec mes décalages de markers au passage du niveau de zoom 4 à 5. J'ai cru que la beta5 avait tout réglé mais en y regardant de plus près le problème persiste (enfin du même genre).

    J'utilise deux types de scripts pour afficher mes markers sur une carte (trouvés dans ce forum).
    1- Mon premier (page d'accueil) utilise les objets icon et les calques LonLat (ci dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var size= new OpenLayers.Size(8,8);
    var offset= new OpenLayers.Pixel(-(size.w/2), -(size.h/2));//centered
    var icon = new OpenLayers.Icon('#CHEMIN{img/rep_r.gif}',size,offset);        	
    var markers= new OpenLayers.Layer.Markers("centrale");
    <BOUCLE_pos(POUR){tableau #GET{coord}}{valeur != 0}>
      map.getMap().addLayer(markers);
      var ll#CLE= new OpenLayers.LonLat(#VALEUR);
      ll#CLE.transform(OpenLayers.Projection.CRS84, map.getMap().getProjection());
      markers.addMarker(new OpenLayers.Marker(ll#CLE,icon.clone()));			
    </BOUCLE_pos>
    Nota : Ici Les lignes situées entre <BOUCLE... et </BOUCLES... sont répétées autant de fois que j'ai de points. #VALEUR est une chaine de type Lon, Lat. (syntaxe SPIP)

    Il fonctionne bien et permet de placer des points aux antilles (malgré que le système de référence n'est pas précisé) et à la réunion sans problème. En revanche si on zoom on s'aperçoit que la carte est très étirée sur l'axe des longitude (??), ce qui n'est pas très esthétique. y a-t-il une explication à cela ?

    2- j'utilise (par soucis esthétique du coup) un autre script pour mes cartes plus proches ici par exemple ou encore ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var couche = new OpenLayers.Layer.Vector('Centrales');
    var style = {externalGraphic:'IMG/rubon2.png', graphicWidth:21, graphicHeight:25,graphicXOffset:-10.5,graphicYOffset:-25};
     <BOUCLE_centrale_eolien(ARTICLES){branche}{cstatut>0}{cterritoire = #GET{zone}}>
      var position#ID_ARTICLE = new OpenLayers.Geometry.Point(#GET{coord});
      position#ID_ARTICLE.transform(OpenLayers.Projection.CRS84,  map.getMap().getProjection());				
      var pt#ID_ARTICLE = new OpenLayers.Feature.Vector(position#ID_ARTICLE, null, style);
      couche.addFeatures([pt#ID_ARTICLE]);
      map.getMap().addLayer(couche);
    </BOUCLE_centrale_eolien>
    Nota: même remarque pour <BOUCLE... </Boucle, #GET{coord} renvoi les coordonnées lon, lat - #ID_ARTICLE est l'identifiant du point

    Du coup je précise pour chaque zone géographique le système de référence FXX, MTQ,... Si j'affiche ma carte avec un zoom à 4 (Monde) c'est bon, mais dès que je zoom, tous mes markers France se retrouvent en Algérie. Si je change mon script pour afficher à un zoom initial de 5 : pas e problème mes points sont bien placés, mais si je dézoome à 4, alors ils partent tous au pôle nord ! et si on joue de la molette, ils ont l'air de se promener partout... Vraiment le passage de 4 à 5 me pose bien des soucis!

    Alors soit je (enfin nous) trouve une solution au problème, soit je bloque le zoom ! (au fait comment fait-on pour bloquer roulette et clavier ? )

    Merci d'avance pour votre précieuse aide

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Je me réponds un peu honteux, car c'est l'inclusion de map.getMap().addLayer(markers); (script1) et map.getMap().addLayer(couche); (script2)
    dans ma boucle qui créait ce bug lors du zoom.. les choses sont plus claires le matin

    Cependant, à votre avis quel est la meilleur script ? (ou le moins mauvais)

    Je reste aussi intéressé par votre expérience sur la limitation des zoom et des déplacement de carte, voire l'interdiction d'utiliser les commandes souris/clavier.

    merci

  3. #3
    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
    Citation Envoyé par frkdavid Voir le message
    Cependant, à votre avis quel est la meilleur script ? (ou le moins mauvais)
    Pour ma part, j'utilise plutôt (très proche du script 1 - sauf que tous les markers sont dans une même couche) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var markers= new OpenLayers.Layer.Markers("Centrales");
    map.getMap().addLayer(markers);var size= new OpenLayers.Size(8,8);var offset= new OpenLayers.Pixel(-(size.w/2), -(size.h/2));//centered
    var icon = new OpenLayers.Icon('#CHEMIN{img/rep_r.gif}',size,offset);            
    <BOUCLE_pos(POUR){tableau #GET{coord}}{valeur != 0}>
      var ll#CLE= new OpenLayers.LonLat(#VALEUR);
      ll#CLE.transform(OpenLayers.Projection.CRS84, map.getMap().getProjection());
      markers.addMarker(new OpenLayers.Marker(ll#CLE,icon.clone()));
    </BOUCLE_pos>
    Citation Envoyé par frkdavid Voir le message
    Je reste aussi intéressé par votre expérience sur la limitation des zoom et des déplacement de carte, voire l'interdiction d'utiliser les commandes souris/clavier
    Le spécialiste pour l'ergonomie, c'est cmail , voir .
    Pour le reste, plusieurs pistes :

    * limiter le minZoomLevel de la map en retirant le niveau Monde (zooms 0 à 4), via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var wldLayers= map.getMap().getLayersBy('territory','WLD');
    for (var i= 0, l= wldLayers.length; i<l; i++) {
      var lyr= wldLayers[i];
      map.getMap().removeLayer(lyr);
    }
    TODO: je vais regarder comment, à la construction de la carte, empêcher de construire le niveau Monde sur demande du développeur.

    * limiter les zooms sur chaque territoire (hors Monde), c'est prendre la baseLayer du territoire (territory=='TER' && isBaseLayer==true) et modifier ses minZoomLevel / MaxZoomLevel;

    * limiter l'espace de déplacement, il faut utiliser l'option restrictedExtent à la construction de la Geoportal.Map;

  4. #4
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Merci pour cette montée en grade dont je suis bien indigne...

    je vais regarder comment, à la construction de la carte, empêcher de construire le niveau Monde sur demande du développeur.
    Je suis preneur....

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

Discussions similaires

  1. Uniformiser une échelle sur des images avec résolutions différentes
    Par pjzbbsection dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 05/02/2013, 17h36
  2. [Google Maps] décalage des markers api v3
    Par nanog dans le forum APIs Google
    Réponses: 1
    Dernier message: 15/07/2012, 15h51
  3. changement des droits avec >>
    Par exe2bin dans le forum Administration système
    Réponses: 2
    Dernier message: 13/02/2011, 17h05
  4. décalage des marker avec changement d'échelle
    Par frkdavid dans le forum IGN API Géoportail
    Réponses: 12
    Dernier message: 25/02/2010, 15h28
  5. [PHP 5.2] Générer un tableau avec PHP (décalage des en-têtes)
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2009, 17h43

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