我创建了一个时间感知动画,涉及数千个代表人口估计的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事件,按钮等)。如何处理结果计数也取决于您。
如果你确实使用我推荐的扩展库,并在上面的例子中使用,请查看开发人员指南,它非常有用。