Google Earth API を介して KML ファイルを読み込もうとしており、独自のタイム スライダー コントロールを使用しています。
独自のカスタム タイム スライダーを有効化/表示する必要があるかどうかを判断するために、Google Earth の TimeControl に問い合わせて、開始時刻と終了時刻が設定されているかどうかを確認しています。
タイムスパンを指定して KML をロードすると、開始時刻と終了時刻が設定され、Google Earth のタイム スライダーが Google Earth に表示されます。
次に別の KML ファイルを読み込んで、今回はタイムスパンを指定しないと、Google Earth はタイム スライダーを正しく表示しませんが、Google Earth API を介して TimeControl を調べると、最初の KML の開始時刻と終了時刻が表示されます。
KML が読み込まれると呼び出される関数を (kmltree bind() メソッドを介して) 添付しました。TimeControl に問い合わせるのは、この関数です。
TimeControl にまだ最初の KML の開始時刻と終了時刻が含まれているのはなぜですか? チェックが早すぎますか?
Javascript コードは次のとおりです。
tree = kmltree({
url: kmlUrl,
gex: gex,
element: $('.tree3'),
mapElement: $('#map3d'),
setExtent: true,
restoreState: false
});
$(tree).bind('kmlLoaded', function(event, kmlObject)
{
console.log("In kmlLoaded function");
time = ge.getTime();
if(ge.getTime().getControl())
{
console.log("We have a time primitive.");
control = time.getControl();
extents = control.getExtents();
// We have some time elements
beginTime = extents.getBegin();
console.log("beginTime is: " + beginTime.get());
endTime = extents.getEnd();
console.log("endTime is: " + endTime.get());
mainwindow.enablePlaybackWidgets(beginTime.get(), endTime.get());
}
else
{
console.log("We do NOT have a time primitive.");
mainwindow.enablePlaybackWidgets("", "");
}
});
tree.load()
これを QT アプリと組み合わせて使用しています。新しく読み込まれた KML 内にタイムスパンがあるかどうかを確認すると、QT メインウィンドウ オブジェクトを呼び出し、それに応じてカスタム タイム スライダー ウィジェットを有効/無効にします。
2 番目の KML が読み込まれると、(Google Earth には表示されないため) TimeControl がないことが予想されるため、上記のコードの「else」部分を入力します。これはそうではありません。TimeControl はまだ存在し、最初に読み込まれた KML ファイルの開始時刻と終了時刻を持ちます。
どんな助けでも大歓迎です。
ありがとう