我曾试图从SE中提出的以前的问题中听到解决问题的消息,但无法通过阅读这些问题来解决问题。因此,作为单独的问题发布。
我正在使用以下代码创建marker
层
mLayer = new OpenLayers.Layer.Vector(layerName, {
projection: map.displayProjection,
extractAttributes: true,
styleMap: new OpenLayers.StyleMap({'default' : Lstyle}),
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: getURL,
format: new OpenLayers.Format.GeoJSON()
})
});
我的任务是计算marker
坐标的平均值,并将其设置为地图的中心,因此我想从mLayer
对象中获取坐标。标记在地图上显示得很好,但当我在控制台中打印mLayer.features.length
时,它显示0
,但features
的大小是10,我可以通过打印vLayer
在firebug console
中看到这一点,这是我的JSON文件。
Openlayers提供了以下功能:
- http://dev.openlayers.org/docs/files/OpenLayers/Layer/Vector-js.html#OpenLayers.Layer.Vector.getDataExtent
然后使用map.getZoomForExtent
和map.panTo
。
将地图中心设置为markers mid point
,因为comments
中建议的Christophe Roussy
在某种程度上是正确的,但他的代码的问题是,代码将在layer
完成下载到浏览器之前执行,因此我们必须检查图层是否完成,如下所示
layer.events.register('loadend', layer, function(evt){map.zoomToExtent(layer.getDataExtent() )} )
它对我来说很好。