.net 如何从Google Earth以编程方式删除KML节点?

.net 如何从Google Earth以编程方式删除KML节点?,.net,kml,google-earth,.net,Kml,Google Earth,我在C#中构建了一个winforms应用程序,其中嵌入了Google Earth作为查看器。喜欢 我的应用程序定期接收数据,将其转换为KML,并在Google Earth中显示结果。每当我收到新的更新,我都想删除旧的KML,但我在GE API中找不到如何删除。我所发现的只是让旧东西隐形: this.ge = new ApplicationGEClass(); // .... string newKml = this.ConvertNewInputT

我在C#中构建了一个winforms应用程序,其中嵌入了Google Earth作为查看器。喜欢 我的应用程序定期接收数据,将其转换为KML,并在Google Earth中显示结果。每当我收到新的更新,我都想删除旧的KML,但我在GE API中找不到如何删除。我所发现的只是让旧东西隐形:

        this.ge = new ApplicationGEClass();
        // ....
        string newKml = this.ConvertNewInputToKML();
        this.ge.LoadKmlData(ref newKml);
        FeatureGE oldFeature = this.ge.GetFeatureByName("myOldKmlFeature");
        oldFeature.Visibility = 0;

我想知道从长远来看,这是否会导致内存/性能问题。或者有没有从Google Earth KML节点中删除的方法?

您可以使用基于时间的刷新的NetworkLink以一定的间隔替换旧数据


在KML中也可能有其他方法来指定它。

KML只不过是XML。我建议您从XML树中删除适当的节点,并每隔一段时间重新写入文件


我对KML还不太了解。是否每次要对已呈现的内容进行更改时都需要重新加载整个文件?

您应该能够使用ge.getFeatures().removeChild(kmlObject);如果旧对象上仍有句柄。

Networklink假定有REST服务发出KML。我没有,我也不想建立一个,因为它使部署比必要的更复杂。我希望所有内容都包含在自己的可执行文件中。“URL(HTTP地址或本地文件规范)。当的父级为NetworkLink时,则为KML文件。”--。可能有一种更简单的方法,但我确实认为这将在不使部署复杂化的情况下起作用。类似GE的“LoadKmlData”方法的COM调用允许将KML推入,而不会使部署复杂化。我只是想知道如何通过类似的COM调用删除旧的东西。据我所知,如果您使用“this.ge.LoadKmlData(ref newKml);”方法提交相同的KML文件2x,您将在模型树中加载两个副本。它们不会相互覆盖。