Comment calculer la boîte englobante d'un objet geojson en utilisant python ou javascript?


14

J'ai une application django avec un dépliant sur le frontend et j'ai besoin de calculer la bbox d'un objet geojson pour pouvoir transmettre les coordonnées à map.fitBounds()

J'ai essayé quelques bibliothèques ainsi que les getBoundsméthodes de certains objets dans Leaflet, comme FeatureGroup, mais il s'est plaint que les limites n'étaient pas définies.

Quelqu'un peut-il m'indiquer une solution simple à cela?


1
En général, map.fitBounds (featureGroupName.getBounds ()) devrait fonctionner, tant que le FeatureGroup contient des données. Avez-vous examiné le FeatureGroup pour voir à quoi il ressemble au moment où vous essayez d'obtenir les limites?
nathansnider

Réponses:


26

Si vous souhaitez calculer les limites d'une couche GeoJSON, vous pouvez faire:

var geojsonLayer = L.geoJson(your_data).addTo(map);
map.fitBounds(geojsonLayer.getBounds());

Exemple: http://jsfiddle.net/expedio/qgkbrjwt/

(La carte effectue un zoom sur l'étendue du calque une fois le calque complètement chargé).

Si vous souhaitez calculer les limites de chaque entité, vous pouvez effectuer les opérations suivantes:

var myGeoJSON = L.geoJson(data, {
    onEachFeature: function (feature, layer) {
        // assign bounds to feature
        feature.properties.bounds_calculated = layer.getBounds();
    }
}).addTo(map);

// do whatever you want with
// feature.properties.bounds_calculated

Exemple: http://jsfiddle.net/expedio/fxxguv0v/

(Zoom pour afficher la fonction dans chaque popup)


1
Correction de la démo pour supprimer dep sur la demande ajax jsfiddle.net/fxxguv0v/22
sidonaldson

2

Utilisez geojson-bbox pour calculer la bbox de n'importe quel geojson

Usage:

<script src="path/to/geojson-bbox.min.js"></script>
var extent = bbox(geojson);
//extent is an array [left, bottom, right, top]

Il existe un module npm pour geojson-bbox

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.