2017-04-21 1 views
0

J'utilise Leaflet 1.0.3 et quelques plugins dont Leaflet.ajax. Mon appel L.geo.ajax fonctionne et retourne des objets geojson, cependant, les coordonnées sont inversées. J'ai créé une fonction pour résoudre ce problème:Leaflet: comment échanger les coordonnées reçues d'un appel ajax

var convertLatLng = function (latlng) { 
 
    var temp = latlng[y]; 
 
    latlng[y] = latlng[x]; 
 
    latlng[x] = temp; 
 
    convertedLatLng = latlng; 
 
    return convertedLatLng; 
 
    console.log('this function is running') 
 
    }

Mais mon problème est que je ne sais pas où le mettre. Est-ce que je l'utilise dans mon appel geoJson? Si oui, où? Voici un extrait de l'appel ajax:

var geojson = L.geoJson.ajax('http://www.iotwf.com/deployment_map/json', { 
 

 
    pointToLayer: function (feature, latlng) { 
 
    convertLatLng(latlng); 
 
    ... 
 
    }, 
 
    onEachFeature: function(feature, layer) { 
 
    
 
    ... 
 
    } 
 
    });

Je suis également ouvert à d'autres suggestions pour ce qui peut le corriger.

Répondre

0

Bienvenue à SO!

Assurez-vous d'abord que vos coordonnées sont effectivement inversées.

Notez que le format GeoJSON prévoit [longitude, latitude], alors que Leaflet attend généralement [latitude, longitude], sauf dans le cas de L.geoJSON() usine (et le plug-in L.geoJson.ajax()), où il lit automatiquement l'ordre GeoJSON et construit les couches aux coordonnées correctes. Si vos coordonnées sont encore inversées, la correction appropriée serait évidemment de corriger directement l'ordre dans votre source de données (ou quel que soit le service de sortie de vos données), de sorte que vous obteniez des données GeoJSON réellement conformes. Cela résoudrait beaucoup de futurs maux de tête.

Si ce n'est pas possible, alors vous pouvez essayer une solution de contournement dans votre script.

La manière la plus appropriée de le faire serait probablement d'utiliser l'option coordsToLatLng de l'usine L.geoJSON.

Changer son default implementation, vous obtiendrez quelque chose comme:

L.geoJson.ajax(url, { 
    coordsToLatLng: function (coords) { 
     //     latitude , longitude, altitude 
     //return new L.LatLng(coords[1], coords[0], coords[2]); //Normal behavior 
     return new L.LatLng(coords[0], coords[1], coords[2]); 
    } 
}); 
+0

Merci pour votre réponse. Ça ne marche toujours pas mais je me demande si c'est juste parce que je ne sais pas comment utiliser les coords nouvellement retournés comme latlng dans la prochaine fonction pointToLayer? J'y travaille! –

+0

Malheureusement, je n'ai pas de contrôle sur le json que je reçois, donc je dois utiliser ce travail. –

+0

Okay! Ça marche! Fondamentalement comme vous l'avez suggéré. J'avais ajouté une faute de frappe qui l'empêchait de fonctionner. Merci encore!! –