我在导航从 Web 服务器上的 KMZ 文件(使用 fetchKml)获得的 KML DOM 时遇到了一些性能问题。我正在使用此处描述和讨论的 gex.dom.walk 方法:
https://developers.google.com/earth/articles/domtraversal
http://code.google.com/p/earth-api-utility-library/wiki/GEarthExtensionsDomReference
本质上,我只是想在文件夹名称与 GUI 点击事件中的某些条件匹配时打开/关闭文件夹的可见性。正如我所说,这可行,但性能不是很好。在应用程序中更新可见性设置可能需要 30 - 60 秒。我在上面的链接中读到,您可以关闭子节点的行走,我尝试使用下面的对象文字方法来做到这一点。我包含的代码不会产生任何 javascript 错误,但不会提高性能。我不确定我是否正确创建了对象文字并正确设置了 walk children 属性。有什么建议吗?使用 gex.dom.walk 关闭 walk children 属性的一个很好的例子将非常有帮助。我在网上找不到示例。
这些文件夹中有许多地标(100 个),我有 25 个文件夹。所以,我想避免走他们,并怀疑这至少是性能问题的罪魁祸首的一部分。KMZ 文件大约 250 Kb,里面的 KML 大约 7.5 Mb。随着时间的推移,这个文件也会有所增长。
我还阅读了有关 Gzip 压缩的信息,并且必须对此进行更多研究。我怀疑这也可能有所帮助。
感谢您的任何直接回复或相关提示!
function visibilityKml(context) {
//this is called by click events on the GUI
//if a menu item click, traverse the KML DOM to process the visibility request
//
//
var gex = new GEarthExtensions(ge);
var walkStatus = {
walkChildren : true
};
gex.dom.walk({
rootObject: ge,
visitCallback: function(walkStatus) {
// 'this' is the current DOM node being visited.
if ('getType' in this && this.getType() == 'KmlFolder') {
if ( context.match("AXYZ") && this.getName().match("AXYZ") && this.getVisibility() == false) {
this.setVisibility(true);
}
else if ( context.match("AXYZ") && this.getName().match("BXYZ") && this.getVisibility() == true) {
this.setVisibility(false);
}
else if ( context.match("BXYZ") && this.getName().match("BXYZ") && this.getVisibility() == false) {
this.setVisibility(true);
}
else if ( context.match("BXYZ") && this.getName().match("AXYZ") && this.getVisibility() == true) {
this.setVisibility(false);
}
else if ( context.match("All XYZ") && this.getName().match("XYZ") && this.getVisibility() == false) {
this.setVisibility(true);
}
if ( this.getName().match("XYZ") ) {
this.walkChildren = false;
}
}
}
});
}