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;
}
}
}
});
}