我如何计数在给定时间插件中可见的所有placemark



我创建了一个时间感知动画,涉及数千个代表人口估计的placemark在http://www.catalinagis.org/foxrecovery

我想知道如何计算在给定时间点可见的placemarks(在本例中为点)的总数…类似于基于时间的查询。

人口估计每年都在波动,所以有些点只持续很短的时间跨度,然后就消失了;另一些则从时间跨度的开始一直持续到结束。有超过3000个点,所以我不想一个一个地回顾KML。

我得到了每年的种群估计,然后以每月的时间尺度模拟死亡和重新繁殖,使动画看起来更"自然"。我在一段时间前创建了KML,我想检查一下我自己是否做得正确…并在时间滑块移动时显示计数

我仍然不确定'渲染在屏幕上'是你的意思-你确定你不想计数的位置标记,将被渲染,如果他们在视图(按时间,但在地球的另一边,例如)。

如果你的意思是渲染,那么计数placemark的问题是,这样做的唯一方法是计算当前视图的边界,然后测试看看加载的placemark是否在边界内并且是可见的。

如果KML dom很大,这可能需要很长时间,因为它需要每隔一段时间遍历整个dom,然后根据边界视图检查dom中的每个元素。您可以通过将代码作为api的批处理函数执行来实现某些功能。

如果你想尝试这个,那么我建议你看看earth-api-utility-library,它有遍历Kml dom和计算边界对象的有用方法-你应该能够使用它来帮助你的大多数方式。

EDIT:如果你不是指渲染,那么这就容易多了,它本质上仍然是相同的迭代过程-但是现在你不需要计算视图边界或对它进行任何比较。

要在任何点获得总可见的placemark,您只需遍历KML dom并通过getVisiblity()检查每个placemark的可见性-就像这样。

var gex = new GEarthExtensions(ge);
var function countVisiblePlacemarks() {
  var count = 0;
  gex.dom.walk({
    rootObject: ge,
    visitCallback: function() {
    if ('getType' in this &&
        this.getType() == 'KmlPlacemark' &&
        this.getVisibility())
        ++count;
    }
  });
  return count;
}

显然,如何调用countVisiblePlacemarks取决于您-在计时器,api事件,按钮等)。如何处理结果计数也取决于您。

如果你确实使用我推荐的扩展库,并在上面的例子中使用,请查看开发人员指南,它非常有用。

最新更新