我使用此代码将KML文件加载到OpenLayers中:
var kmlLayer = new OpenLayers.Layer.Vector("KML", {
projection: map.displayProjection,
isBaseLayer: false,
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: "mykml.kml",
format: new OpenLayers.Format.KML({
extractStyles: true,
extractAttributes: true,
maxDepth: 2
})
})
});
现在我必须列出此文件中包含的多边形的所有名称。
尝试console.log(kmlLayer.features)
我可以看到这些功能,但我不知道如何访问它们。请参阅http://s14.directupload.net/file/d/3148/2et4d7wf_png.htm,因为我还不允许上传图片。
如何获得这些功能的名称和描述?
提前致谢。
答案 0 :(得分:1)
我认为您的问题是HTTP调用是从您对
的调用异步发生的kmlLayer.features[0]
所以看起来很空洞。解决方案是仅在完全加载KML之后访问要素数组:
kmlLayer.events.register("loadend", kmlLayer, function (e) {
console.log(kmlLayer.features[0].attributes.name)
});
您使用Firefox或Chrome只需在加载地图后输入您的开发人员网络控制台kmlLayer.features [0],它就会告诉您它实际上并非未定义。
请告诉我这是否有帮助!
答案 1 :(得分:0)
http://openlayers.org/en/v3.9.0/doc/faq.html#why-aren-t-there-any-features-in-my-source-
他们似乎已经为API的v3发布了这个问题的解决方案,使用'change'事件并听取'ready'。