1

我正在尝试通过 Google Earth API 加载 KML 文件并拥有自己的时间滑块控件。

为了确定我是否需要启用/显示我自己的自定义时间滑块,我正在查询谷歌地球 TimeControl 以查看是否设置了任何开始和结束时间。

如果我加载具有时间跨度的 KML,我会看到设置了开始时间和结束时间,并且谷歌地球时间滑块出现在谷歌地球中。

如果我然后加载另一个 KML 文件,但这次没有任何时间跨度,谷歌地球不会正确显示时间滑块,但是当我通过谷歌地球 API 询问 TimeControl 时,它仍然具有第一个 KML 的开始和结束时间。

我已附加(通过 kmltree bind() 方法)一个函数,该函数在 KML 加载后被调用。我询问 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 主窗口对象并相应地启用/禁用我的自定义时间滑块小部件。

加载第二个 KML 时,我希望没有 TimeControl(因为 Google Earth 没有显示),因此输入上面代码的“else”部分。不是这种情况。TimeControl 仍然存在,并且具有加载的第一个 KML 文件的开始时间和结束时间。

任何帮助将不胜感激。

谢谢

4

0 回答 0