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 :

Récupérer la longitude / latitude d'un marqueur draggable


Sujet :

IGN API Géoportail

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut Récupérer la longitude / latitude d'un marqueur draggable
    Bonjour,

    Je cherche à récupérer l'objet lonlat d'un marquer draggable.

    Associer le OpenLayers.Control.DragFeature à ma couche ne m'a pas posé trop de pb.
    Mon marqueur est bien "draggable" maintenant j'ai besoin de connaitre la latitude et la longitude de la nouvelle position et la ca se complique. Car le lonlat retourné est null...

    Voici le code en question, la ligne en question est la numéro 33

    Merci d'avance pour votre aide !

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
      <!--
        function initGeoportalMap() {
     
    	geoportalLoadVISU("GeoportalVisuDiv");
     
    	if (VISU) {
    		VISU.addGeoportalLayers(	['ORTHOIMAGERY.ORTHOPHOTOS:WMSC', 'GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC'],
                 					 	{
                 					 		'GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC':{visibility:true},global:{opacity:1},
                 					 		'ORTHOIMAGERY.ORTHOPHOTOS:WMSC':{visibility:false},global:{opacity:1}
                 					 	}
     
                 					);
        }
     
     	VISU.openLayersPanel(false);
    	VISU.openToolsPanel(false);
    	VISU.setInformationPanelVisibility(false) ;
       	VISU.getMap().setCenter(VISU.viewerOptions.defaultCenter,VISU.viewerOptions.defaultZoom);
     
     	//construction du marqueur de depart
    	position = new OpenLayers.Geometry.Point(3, 50);
    	position.transform(OpenLayers.Projection.CRS84, VISU.projection);        
    	style = {externalGraphic:'/pics/marker.png', graphicWidth:24, graphicHeight:48};
    	pt = new OpenLayers.Feature.Vector(position, null, style);
     
    	 //couche du marqueur
    	couche = new OpenLayers.Layer.Vector('Marqueurs');
    	couche.addFeatures([pt]);
    	VISU.getMap().addLayer(couche);
     
    	drag = new OpenLayers.Control.DragFeature(couche, {onComplete: function(f)	{alert(f.lonlat) ;}});
     
     
     
     
    	VISU.getMap().addControl(drag);
    	drag.activate();
     
       	}
     
     
     
    -->

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 45
    Points : 63
    Points
    63
    Par défaut f.geometry
    Mon marqueur est bien "draggable" maintenant j'ai besoin de connaitre la latitude et la longitude de la nouvelle position et la ca se complique. Car le lonlat retourné est null...
    En fait tu ne crées pas un marqueur mais un Geometry.Point.Si tu avais utilisé un OpenLayers.Marker, f.lonlat porterait bien les coordonnées.
    Dans ton cas, si tu affiches l'objet f dans Firebug (à la place de alert(f.lonlat), tu testes console.log(f)), l'objet renvoyé a une propriété geometry.

    Pour afficher les coordonnées, il faut donc utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(f.geometry.x + " "+ f.geometry.y)

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Le pb c'est que si je ne me trompes pas OpenLayers.Control.DragFeature ne s'applique par a un OpenLayers.Marker non ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 45
    Points : 63
    Points
    63
    Par défaut
    Le pb c'est que si je ne me trompes pas OpenLayers.Control.DragFeature ne s'applique par a un OpenLayers.Marker non ?
    Effectivement, OpenLayers.Control.DragFeature s'applique sur un layer Vector.
    Il faut donc bien continuer avec GeometryPoint.
    Cela ne pose pas de problème puisque les coordonnées peuvent aussi être récupérées via f.geometry.x/y.

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    J'avais effectivement réussi à obtenir x et y, le pb c'est que je ne sais pas comment transformer cette valeur en pixel en longitude et latitude.

    [EDIT] Peux être en faisant une projection inverse ca pourrait marcher... j'essaierai ça ce soir...

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 115
    Points : 120
    Points
    120
    Par défaut
    Bingo ca marche !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Al3x Voir le message
    J'avais effectivement réussi à obtenir x et y, le pb c'est que je ne sais pas comment transformer cette valeur en pixel en longitude et latitude.

    [EDIT] Peux être en faisant une projection inverse ca pourrait marcher... j'essaierai ça ce soir...
    Comment as-tu réussi cette projection inverse ??

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    C'est bon j'ai réussi. Voici mon code si ça peux servir pour d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     	//construction du marqueur de depart
    	position = new OpenLayers.Geometry.Point(3.744707, 45.451475);
    	position.transform(OpenLayers.Projection.CRS84, VISU.projection);        
    	style = {externalGraphic:'./API/markers/blueblank.png', graphicWidth:24, graphicHeight:48};
    	pt = new OpenLayers.Feature.Vector(position, null, style);
     
    	//couche du marqueur
    	couche = new OpenLayers.Layer.Vector('Marqueurs');
    	couche.addFeatures([pt]);
    	VISU.getMap().addLayer(couche);
     
    	// fonction du marqueur déplaçable et centré automatiquement avec affichage dans le formulaire - attention à la conversion des coord qui doit être réinversé en fin de fonction
    	drag = new OpenLayers.Control.DragFeature(couche, {onComplete: function(f)	{
    		position.transform(VISU.projection, OpenLayers.Projection.CRS84);
    		VISU.getMap().setCenterAtLonLat(f.geometry.x, f.geometry.y);
    		document.getElementById("longitude").value = f.geometry.x;
    		document.getElementById("latitude").value = f.geometry.y;         
    		position.transform(OpenLayers.Projection.CRS84, VISU.projection);        
    }});
     
     
     
     
    	VISU.getMap().addControl(drag);
    	drag.activate();
    Afin de ne pas perdre le marqueur, il faut bien penser à transformer une seconde fois les coordonnées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    position.transform(VISU.projection, OpenLayers.Projection.CRS84);
    On utilise les coordonnées que l'on a besoin (ici récupérer sur un formulaire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		document.getElementById("longitude").value = f.geometry.x;
    		document.getElementById("latitude").value = f.geometry.y;
    Et on retransforme les coordonnées pour le marqueur draggable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    position.transform(OpenLayers.Projection.CRS84, VISU.projection);

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/07/2011, 11h55
  2. Conversion adresse/longitude latitude
    Par Alex06 dans le forum 4D
    Réponses: 8
    Dernier message: 20/07/2010, 15h28
  3. Réponses: 2
    Dernier message: 06/10/2009, 14h22
  4. Réponses: 5
    Dernier message: 26/12/2007, 10h51
  5. distance entre deux ville à partir de longitude/latitude
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 09/02/2007, 20h57

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