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 :

Ajout d'altitude sur gpx


Sujet :

IGN API Géoportail

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 177
    Points : 191
    Points
    191
    Par défaut Ajout d'altitude sur gpx
    Bonjour,

    J'essai d'ajouter les altitudes sur les fichiers gpx.

    J'arrive avec les waypoints mais pas pour les routes. Je récupère les points de la route avec getVertices, j'en extrait les lattitude et longitude, ce qui me permet de trouver l'altitude.

    Comment ajouter les altitudes de ces points dans le gpx ?

    Voici le code :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function elevationP(feature, point, lat, lon) {
    	var rz= new OpenLayers.Request.GET({
    		url:'http://api.geonames.org/srtm3JSON?lng='+lon+'&lat='+lat+'&username=votre username',
    		async: false,
    		
    		success:function(r) {
    			if (!r.responseText || r.responseText.length==0) { altitudeFailure(); return; }
    			eval('var data= '+r.responseText+';');
    			var altitude= data.srtm3;
    			if (altitude.length==0) { altitudeFailure(); return; }
    			altitude= parseFloat(altitude);//Altitude prête pour l'ajout 
    			feature.attributes['ele'] = altitude;//Ligne qui doit ajouter les altitudes
    		},
    		failure:altitudeFailure
    	});
    }
    
    gpxLayer.onFeatureInsert = function(feature) {
    	var name = prompt('Nom ?');
    	feature.attributes['name'] = name;
    	
    	if (feature.geometry.CLASS_NAME.match('\.String$')){
    		
    		var points = feature.geometry.getVertices(feature); //récupération des points
    		
    		for (var i = 0; i < points.length; i++) {
    			feature.geometry.transform(viewer.getMap().getProjection(), OpenLayers.Projection.CRS84);
    			var lat = points[i].y;
    			var lon = points[i].x;
    			feature.geometry.transform(OpenLayers.Projection.CRS84, viewer.getMap().getProjection());
    			elevationP(feature, points[i], lat, lon);
    		}
    	}
    };

  2. #2
    Membre du Club
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    102
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 102
    Points : 65
    Points
    65
    Par défaut
    Bonjour,
    peux-tu expliciter stp ce sur quoi tu veux ajouter les elevations ?
    Si c'est directement dans ton code je ne sais pas t'aider, en revanche, si c'est sur un fichier trace de type GPX, tu peux utiliser le site GPSVisualizer.
    Il recalcule les élévations manquantes !
    a+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 177
    Points : 191
    Points
    191
    Par défaut
    Bonjour,

    En fait je souhaitais ajouter l'altitude directement dans la linestring au moment de sa création. Je n'ai pas réussi.

    Au moment d'enregistrer la trace je fais une requête sur géoname pour connaître l'altitude et je l'inclus dans le fichier gpx cela fonctionne.

    Merci pour la réponse.

    Je mettrai un code en exemple, dans quelques jours, le temps de préparer un code présentable et documenté.

    Gilles

  4. #4
    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
    De mémoire, il faut passer par attributes.metadata. Les rtept et trkpt porte l'information ele qui sont stockés dans metadata (qui est un tableau pour chaque point)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2010
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 177
    Points : 191
    Points
    191
    Par défaut
    Je crois que tu as bonne mémoire.

    On peut facilement ajouter le nom en faisant attribute [name] qui est dans data, mais l'altitude est stocké dans métadata et je ne savais pas comment y accéder. Je l'avais vu avec firebug.

    Je n'en ai plus besoin, mais si j'ai le temps j'essaierai.

    Gilles.

  6. #6
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Voici une méthode permettant de rajouter les altitudes sur les trkpt:
    Ajouter le paramètre preFeatureInsert à la couche GPX:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    preFeatureInsert:
    
    	function(f) {
    		if (f) {
    			var tab_alti=[]; //tableau qui va contenir les altitudes des trkpt
    			var tab_trkpt=[]; // tableau qui va contenir les trkpt contenus dans trk
    			
    			if (f.attributes['typeName']=='trk') {
    				
    				tab_alti= f.attributes['metadata']; //Les altitudes sont stockées dans le tableau attributes.metadata
    				tab_trkpt=f.geometry.components[0].components; //On recupère les trkpt
    
    				for (var k=0;k<tab_trkpt.length;k++){
    					
    					//Création de la feature
    					var trkpt=new OpenLayers.Feature.Vector(
    									new OpenLayers.Geometry.Point(tab_trkpt[k].x,tab_trkpt[k].y),
    									{	'typeName':'trkpt',
    										'ele':tab_alti[k].ele,
    									},
    									{
    										'label': "",
                                                                                    'labelAlign': "rb",
    										'labelXOffset': -20,
    										'labelYOffset': -20,
    										'labelBackgroundColor': "#FFFF00",
    										'labelBorderColor': "black",
    										'labelBorderSize': "1px",
    										'fontColor': "black",
    										'fontWeight': "bold",
    										'fontSize': "12px",
    										'fontFamily': "Courier New, monospace"
    									}
    								);
    					//Ajout de la feature au tableau de features de la couche GPX
    					f.layer.features.push(trkpt);
    				}
    			}
    		}
    	}
    L'altitude ne doit être affichée que si le zoom est supérieur à une certaine valeur:
    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
    VISU.getMap().events.register("zoomend", VISU.getMap(), function() {
    
    	if (VISU.getMap().zoom<13) { //On supprime les labels
    
    	       for(var k=0;k<couche_gpx.features.length;k++){
    				 
    			OpenLayers.Util.extend(couche_gpx.features[k].style, {
    
    				label: ''
    			});
    		}  
    	}
    	else //On remet les labels
    	{
    		for(var l=0;l<couche_gpx.features.length;l++){
    			
    			OpenLayers.Util.extend(couche_gpx.features[l].style, {
    				label: couche_gpx.features[l].attributes.ele,
    			});
    		}
    	 }
    	couche_gpx.redraw();
     
    });

Discussions similaires

  1. Enregistrer altitude sur fichier GPX
    Par superpoi dans le forum IGN API Géoportail
    Réponses: 9
    Dernier message: 16/09/2013, 13h34
  2. Ajouter du texte sur une vidéo
    Par ChIcKeN78 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 01/06/2005, 11h43
  3. Réponses: 6
    Dernier message: 18/04/2005, 22h12
  4. Problème d'ajout d'imprimante sur LPT1
    Par arnaud_verlaine dans le forum Périphériques
    Réponses: 10
    Dernier message: 15/03/2005, 23h23
  5. ajout de colonnes sur une selection
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/08/2004, 18h44

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