如何以编程方式创建kmltreeview文件夹并在其中添加地标?

时间:2012-12-02 18:16:21

标签: c# winforms google-earth-plugin

使用C#winforms-ge-plugin我正在搜索协议找到它们时,将wi-fi热点添加到ge globe和kmltreeview。我想基于城市使用GPS坐标对它们进行分组。计划是将每个城市分组为一个文件夹,但我无法弄清楚如何在kmltreeview中创建文件夹。

最初我试过这个:

        var folder = kmlTreeView.CreateNode(FC.GEPluginCtrls.ApiType.KmlFolder);
        kmlTreeView.ParseKmlObject(folder);

但它不起作用。

我在另一个论坛上发现了一些基于javascript的代码,但它无法正常工作:

        var folder = ge1.createFolder("test");
        folder.getFeatures().setVisibility(true);
        folder.getFeatures().setOpen(true);

        var placemark = ge1.createPlacemark();
        folder.getFeatures().appendChild(placemark);

        ge1.getFeatures().appendChild(folder);

感谢您提供的任何帮助! TC

1 个答案:

答案 0 :(得分:1)

CreateNode方法将任何KmlObject作为其参数,但是您将其传递给api中某个类型的枚举器。

只需创建文件夹,然后解析它。

var folder = ge1.createFolder("test");
kmlTreeView.ParseKmlObject(folder);

为了解释,KmlTreeView不生成或创建KmlFolders,或者“kml”任何其他内容 - 它只显示作为层次结构中的节点加载到其中的KmlObjects的视图。

'tree',你实际在树视图中看到的东西,只是KmlContainer的表示,例如KmlFolder或KmlDocument。

使用KmlTreeView的另一种方法是将加载到插件中的任何kmlObject直接加载到其中。这通常是从对GEWebBeowser的FetchKml方法的调用返回的相同对象。例如。

   // load the plugin
    geWebBrowser1.LoadEmbededPlugin();

    // when the plug-in has loaded
    geWebBrowser1.PluginReady += (o, e) =>
    {
        // load the kml from the local server
        kmlTreeView1.SetBrowserInstance(e.ApiObject);
        geWebBrowser1.FetchKml("http://foo/some.kml");
    };

    // when the kml has loaded
    geWebBrowser1.KmlLoaded += (o, e) =>
    {
        // add the kml to the plugin and tree-view 
        geWebBrowser1.ParseKmlObject(e.ApiObject);
        kmlTreeView1.ParseKmlObject(e.ApiObject);
    };

这样树视图将与插件中的显示同步 - 因此双击树视图中的节点会将您带到他们的位置等。