1

我使用此代码将 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因为我还不允许上传图片。

如何获取这些功能的名称和描述?

提前致谢。

4

2 回答 2

1

我认为您的问题是 HTTP 调用与您的调用异步发生

kmlLayer.features[0]

所以显得空荡荡的。解决方案是仅在 KML 完全加载后访问要素数组,如下所示:

kmlLayer.events.register("loadend", kmlLayer, function (e) {
    console.log(kmlLayer.features[0].attributes.name)
    });

无论您使用 Firefox 还是 Chrome,只需在加载地图后输入您的开发者 Web 控制台 kmlLayer.features[0],它就会告诉您它实际上不是未定义的。

让我知道这是否有帮助!

于 2013-01-28T14:07:44.387 回答
0

http://openlayers.org/en/v3.9.0/doc/faq.html#why-aren-t-there-any-features-in-my-source-

他们似乎已经为 API v3 发布了解决此问题的方法,使用“更改”事件并监听“就绪”。

于 2015-10-21T19:34:17.423 回答