1

我创建了一个时间感知动画,其中包含数千个代表人口估计的地标我在http://www.catalinagis.org/foxrecovery

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

人口估计每年都在波动,因此有些点在消失之前只持续很短的时间;其他人从时间跨度的开始一直持续到结束。3000多点,不想一一回过KML。

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

4

1 回答 1

1

我仍然不确定“在屏幕上呈现”是什么意思 - 你确定你不想计算如果它们在视野中会呈现的地标(例如在时间上,但在地球的另一边) .

如果您的意思是渲染,那么计算地标的问题是唯一的方法是计算当前视图的边界,然后测试加载的地标是否在边界内并且可见。

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

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

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

要在任何时候获得全部可见地标,您只需走 KML dom 并检查每个地标的可见性getVisiblity()- 类似这样。

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 事件、按钮等上)。您如何处理结果计数也取决于您。

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

于 2013-05-11T00:00:51.707 回答