Como calcular a caixa delimitadora de um objeto geojson usando python ou javascript?

14

Eu tenho o aplicativo django com folheto no frontend e preciso calcular a bbox de um objeto geojson para que eu possa passar as coordenadas para map.fitBounds()

Eu tentei algumas bibliotecas, bem como os getBoundsmétodos de certos objetos no Leaflet, como FeatureGroup, mas reclamou que os limites não estavam definidos.

Alguém pode me indicar uma solução simples para isso?

fccoelho
fonte
1
Em geral, map.fitBounds (featureGroupName.getBounds ()) deve funcionar, desde que o FeatureGroup contenha dados. Você examinou o FeatureGroup para ver como ele fica no momento em que você está tentando obter os limites?
Nathansnider 18/10/2015

Respostas:

26

Se você deseja calcular os limites de uma camada GeoJSON, pode:

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

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

(O mapa é ampliado até a extensão da camada após o carregamento completo da camada).

Se você deseja calcular os limites de cada recurso, pode fazer o seguinte:

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

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

(Zoom para função de recurso em cada pop-up)

Thomas B
fonte
1
Corrigido o demo para remover dep em ajax pedido jsfiddle.net/fxxguv0v/22
sidonaldson
2

Use geojson-bbox para calcular a bbox de qualquer geojson

Uso:

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

Existe o módulo npm para geojson-bbox

Gagan
fonte