【问题标题】:getFeatures() is emptygetFeatures() 为空
【发布时间】:2015-04-03 12:58:29
【问题描述】:

我有类似POI in OpenLayer 3 的问题,但不一样。

我正在使用 KML 文件绘制地图:

var layerVector = new ol.layer.Vector({
    source : new ol.source.KML({
        projection : projection,
        url : _url
    }),
});

它工作正常,我可以在地图中看到 KML 文件中的点。

(Using <Style> and <styleUrl> Tags in the KML file.)

但如果我尝试查看功能,我会得到一个空数组。

console.log( layerVector.getSource().getFeatures() );

==> Array [ ]

有什么想法吗?

thx mx

【问题讨论】:

  • 您能在jsfiddle.net 上创建一个最小化的示例吗?这样调试会更容易。

标签: kml openlayers-3


【解决方案1】:

在我们即将发布的常见问题解答中查看答案:

https://github.com/openlayers/ol3/blob/master/doc/faq.md

来自上面的链接:

为什么我的源代码中没有任何功能?

假设您要加载 KML 文件并在地图上显示包含的要素。可以使用如下代码:

var vector = new ol.layer.Vector({
  source: new ol.source.KML({
    projection: 'EPSG:3857',
    url: 'data/kml/2012-02-10.kml'
  })
});

您可能会问自己该 KML 中有多少功能,然后尝试以下操作:

var vector = new ol.layer.Vector({
  source: new ol.source.KML({
    projection: 'EPSG:3857',
    url: 'data/kml/2012-02-10.kml'
  })
});
var numFeatures = vector.getSource().getFeatures().length;
console.log("Count right after construction: " + numFeatures);

这将记录源中包含 0 个要素的计数。这是因为 KML 文件的加载将以异步方式发生。为了尽快获得计数(在文件被提取并且源已经填充了特性之后),您应该在源上使用事件监听器函数:

vector.getSource().on('change', function(evt){
  var source = evt.target;
  if (source.getState() === 'ready') {
    var numFeatures = source.getFeatures().length; 
    console.log("Count after change: " + numFeatures);
  }
});

这将正确报告特征的数量,在特定情况下为 1119。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2012-01-04
    • 2020-08-12
    相关资源
    最近更新 更多