2015-09-15 12 views
5

ich diese GeoJSON Datei (polygon.geojson) ...Wie erhält man den Umfang einer GeoJSON-Vektorquelle?

{ 
    "type": "Feature", 
    "geometry": { "type": "Polygon", "coordinates": [ [ [73, 15], [83.0, 15], [83, 5], [73, 5], [73, 15] ] ] }, 
    "properties": { "name": "Foo" } 
} 

... und es als Vektorquelle verwenden:

var vectorSource = new ol.source.Vector({ 
    url: 'polygon.geojson', 
    format: new ol.format.GeoJSON(), 
    projection : 'EPSG:4326', 
}); 

Jetzt möchte ich mit dem Ausmaß bekommen:

var extent = vectorSource.getExtent(); 

der Wert von extent aber ist:

Array [ Infinity, Infinity, -Infinity, -Infinity ] 

Ich verwende OL 3.9.0 und die Vektorebene mit dieser Quelle wird ordnungsgemäß angezeigt. Was mache ich falsch?

+0

könnten Sie versuchen, '' von ol-debug.js' und Schritt in die getExtent Methode zu ersetzen ol.js', um wirklich zu sehen, was los ist (mit Ihrem Browser Dev Tool). Vielleicht könnte das helfen. –

+0

Sicher verwenden Sie nicht den 'useSpatialIndex' oder rufen Sie die Methode auf, bevor die Vektorquelle irgendwelche Funktionen geladen hat? –

+0

Vielleicht sind die Daten noch nicht geladen, wenn ich den Umfang berechnen möchte (ich habe bemerkt, dass der Extent gesetzt ist, wenn ich die Webkonsole öffne, nachdem die Seite geladen wurde). Wie kann ich prüfen, ob die Daten fertig geladen sind? – Mark

Antwort

5

ich es herausgefunden. Ich muss warten, bis die Quelle geladen wird:

vectorSource.once('change',function(e){ 
    if(vectorSource.getState() === 'ready') { 
     var extent = vectorSource.getExtent(); 
     console.log(extent); 
     map.getView().fit(extent, map.getSize()); 
    } 
}); 

EDIT: Es könnte sicherer sein, nur um es zu vergrößern, wenn die Schicht nicht leer ist:

vectorSource.once('change',function(e){ 
    if(vectorSource.getState() === 'ready') { 
     if(layers[0].getSource().getFeatures().length>0) { 
      map.getView().fit(vectorSource.getExtent(), map.getSize()); 
     } 
    } 
}); 
+0

Arbeiten am 3.15.1 bestätigt auch. –

1

Wenn Sie fit in dem Maße gesuchte dies versuchen:

var extent = *YOURLAYER*.getSource().getExtent(); 
map.getView().fit(extent, map.getSize()); 
+0

Ja, das versuche ich zu erreichen. Allerdings bekomme ich 'TypeError: Argument 2 von CanvasRenderingContext2D.putImageData ist kein endlicher Gleitkommawert. ' – Mark

1

Sie könnten Schleife für jede Funktion und schaffen berechnen Grenzen wie folgt aus:

var bounds = ol.extent.createEmpty(); 
for(var i=0;i< features.length;i++){ 
ol.extent.extend(bounds,features[i].getGeometry().getExtent()) 
} 

map.getView().fitExtend(bounds , map.getSize()); 
Verwandte Themen