C# 使用GE插件,如何以编程方式在文件夹中放置位置标记?

C# 使用GE插件,如何以编程方式在文件夹中放置位置标记?,c#,treeview,google-earth-plugin,C#,Treeview,Google Earth Plugin,很抱歉问了这么多问题,但我似乎无法理解这个API的窍门 这似乎是一个非常简单的操作,但我还没有弄明白 我在PluginReady()回调中创建了一个文件夹: folder = ge1.createFolder("Sites"); folder.setName("Sites"); kmlTreeView1.ParseKmlObject(folder); 创建文件夹后,我等待数据进入,这些数据将创建一个放置在该文件夹中的placemark。当数据到达时,我创建一个place

很抱歉问了这么多问题,但我似乎无法理解这个API的窍门

这似乎是一个非常简单的操作,但我还没有弄明白

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

    folder = ge1.createFolder("Sites");
    folder.setName("Sites");
    kmlTreeView1.ParseKmlObject(folder);
创建文件夹后,我等待数据进入,这些数据将创建一个放置在该文件夹中的placemark。当数据到达时,我创建一个placemark,然后尝试将其放入kmltreeview“Sites”文件夹:

    //kmlTreeView1.ParseKmlObject(placemark);
    KmlTreeViewNode node = kmlTreeView1.GetNodeById("Sites");
    node.ApiObject.getFeatures().appendChild(placemark);
    ge1.getFeatures().appendChild(node.ApiObject);
我相信placemark在文件夹中,因为当我双击文件夹时,会弹出一个指向placemark的气球。但是,文件夹中没有加号表示其中有内容。kmltreeview1属性“ShowPlusMinus”设置为true


如果有人能给我指出正确的方向,我将不胜感激。

KmlTreeView根本不会创建任何kml…如果您将空KmlFolder加载到树中,则它就是空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
例如,如果在创建树节点后向同一个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文件加载到其中,并与插件同步而设计的。虽然您可以像这样创建单独的树节点,但它不是设计用来使用的…

弗雷泽,您关于这方面的知识库似乎无穷无尽。这非常有效,我离为我们的客户提供一个很好的工作GUI越来越近了。这应该是我在KMLTreeView方面所需要的一切。我唯一想做的另一件事是加载一些kmz文件,我几乎完成了。我确实意识到我在用一种非正统的方式做事。也许一旦我把剩下的部分做得更进一步,我就可以开始创建和加载kml文件,而不是这样做。再次感谢。不用担心…我知道很多关于KmlTreeView和你正在使用的控制库,因为我写了它,所以我在这方面有不公平的优势。值得注意的是,这些控制远远不够完美,因此回答您的问题确实有助于了解如何改进……太棒了。我很高兴我能有所帮助您好,Fraser,使用FetchKmlocal并使用上述方法将kml加载到文件夹中可能会出现某种问题。使用FetchKml很好。对于Local,kml将加载,但当我单击文件夹的加号时,加号将消失。文件夹保持不变。我可以将其添加到GEPlugin问题中,也可以在这里提问并包括屏幕截图。或者,也许,我只是又做错了什么……请使用项目页面上的wiki评论来询问有关控件库的问题。