我有这个GeoJSON文件(polygon.geojson)...

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

...并将其用作 vector 源:
var vectorSource = new ol.source.Vector({
    url: 'polygon.geojson',
    format: new ol.format.GeoJSON(),
    projection : 'EPSG:4326',
});

现在,我想了解范围:
var extent = vectorSource.getExtent();

但是,extent的值为:
Array [ Infinity, Infinity, -Infinity, -Infinity ]

我使用的是OL 3.9.0,带有此源的 vector 层显示正确。我究竟做错了什么?

最佳答案

我想到了。我需要等待,直到源被加载:

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

编辑:仅在图层不为空时缩放才可能更安全:
vectorSource.once('change',function(e){
    if(vectorSource.getState() === 'ready') {
        if(layers[0].getSource().getFeatures().length>0) {
            map.getView().fit(vectorSource.getExtent(), map.getSize());
        }
    }
});

07-28 03:07