我仍然不确定“在屏幕上呈现”是什么意思 - 你确定你不想计算如果它们在视野中会呈现的地标(例如在时间上,但在地球的另一边) .
如果您的意思是渲染,那么计算地标的问题是唯一的方法是计算当前视图的边界,然后测试加载的地标是否在边界内并且可见。
如果 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 事件、按钮等上)。您如何处理结果计数也取决于您。
如果您确实使用了我在上面的示例中推荐和使用的扩展库,请查看开发人员指南,它非常有用。