使用GE插件,如何以编程方式将地标放在文件夹中?

时间:2012-12-06 03:10:36

标签: c# treeview google-earth-plugin

对于不间断的问题感到抱歉,但我似乎无法掌握这个API。

这似乎是一个非常简单的操作,但我无法弄明白。

我在PluginReady()回调中创建了一个文件夹:

    folder = ge1.createFolder("Sites");
    folder.setName("Sites");
    kmlTreeView1.ParseKmlObject(folder);

创建文件夹后,我等待数据进入,这将创建一个位于此文件夹中的地标。当数据到达时,我创建一个地标,然后尝试将其放入kmltreeview“Sites”文件夹中:

    //kmlTreeView1.ParseKmlObject(placemark);
    KmlTreeViewNode node = kmlTreeView1.GetNodeById("Sites");
    node.ApiObject.getFeatures().appendChild(placemark);
    ge1.getFeatures().appendChild(node.ApiObject);

我相信地标位于文件夹中,因为当我双击文件夹时会弹出一个指向地标的气球。但是,该文件夹没有加号表示其中有内容。 kmltreeview1属性“ShowPlusMinus”设置为true。

如果有人能指出我正确的方向,我会很感激。

1 个答案:

答案 0 :(得分:1)

KmlTreeView根本不会创建任何kml ...如果你将一个空的KmlFolder加载到树中,那么它就是一个空的kmlFolder。如果您随后使用KmlFolder执行某些操作,则不会更改树中的内容。

例如,如果您在创建treenode之后向该KmlFolder添加功能,则它们将不会显示在树视图中 - 因为您尚未将它们添加到树视图中,您已将它们添加到KmlFolder中。

在您的示例中,您必须从树中删除空站点节点。 然后根据包含某些内容的文件夹创建一个新节点,然后将其添加回树中。

KmlTreeViewNode node = kmlTreeView1.GetNodeById("Sites"); // get the empty node you added to the tree
node.ApiObject.getFeatures().appendChild(placemark); // get the KmlFolder and add a placemark
ge1.getFeatures().appendChild(node.ApiObject); // add the KmlFolder and features to the plugin
kmlTreeView1.Nodes.RemoveByKey("sites"); // remove the empty node from the tree...
kmlTreeView1.ParseKmlObject(node.ApiObject); // add the KmlFolder that contains your placemark

另一方面,KmlTreeView主要用于将KML文件加载到其中,并与插件同步。虽然您可以像这样创建单独的树节点,但它不是如何设计使用的......