使用Visual Studio C#Winforms Google Earth插件,地球上添加了4个地标,如下图所示:
我的目标是能够删除线串地标。步骤似乎是获取所有地标,找到线串并将其删除。
以下是用于创建线串地标的代码(或多或少来自API网站)
var lineStringPlacemark = ge2.createPlacemark("Line_" + name);
// create the line string geometry
var lineString = ge2.createLineString("");
lineStringPlacemark.setGeometry(lineString);
// add the the points to the line string geometry
double dlat1 = Convert.ToDouble(lat1) / 100000;
double dlon1 = Convert.ToDouble(lon1) / 100000;
double dlat2 = Convert.ToDouble(lat2) / 100000;
double dlon2 = Convert.ToDouble(lon2) / 100000;
lineString.getCoordinates().pushLatLngAlt(dlat1, dlon1, 0);
lineString.getCoordinates().pushLatLngAlt(dlat2, dlon2, 0);
// Create a style and set width and color of line
lineStringPlacemark.setStyleSelector(ge2.createStyle(""));
var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
lineStyle.setWidth(5);
lineStyle.getColor().set("9900ffff"); // aabbggrr format
// Add the feature to Earth
ge2.getFeatures().appendChild(lineStringPlacemark);
这是我最终用来删除该行的代码。注意GEHelpers.RemoveFeatureById(ge2,s);因为某些原因它不适合我,因此被注释掉了。
for (int i = 0; i < ge2.getFeatures().getChildNodes().getLength(); i++)
{
var kmlobject = ge2.getFeatures().getChildNodes().item[i];
string s = kmlobject.getId();
if (s.Contains("Line_"))
{
ge2.getFeatures().removeChild(kmlobject);
kmlobject.release();
//GEHelpers.RemoveFeatureById(ge2, s);
}
}
答案 0 :(得分:0)
您应该使用的行应该删除所有当前加载的内容。
GEHelpers.RemoveAllFeatures(ge); // removes all loaded features from 'ge'
如果您要删除特定地标或任何其他功能,只需将其ID指定为RemoveFeatureById
方法的参数。
GEHelpers.RemoveFeatureById(ge, 'foo'); // remove the feature with the id 'foo'
当您通过api创建要素或以kml定义要素时,可以设置ID。 e.g。
// api
ge.createPlacemark('foo');
//kml id
<Document id="foo">
</Document>
编辑:
除了......之外你不应该做任何其他事情。
for (int i = 0; i < ge2.getFeatures().getChildNodes().getLength(); i++)
{
var kmlobject = ge2.getFeatures().getChildNodes().item[i];
if (kmlobject.getId().Contains("Line_"))
{
ge2.getFeatures().removeChild(kmlobject);
}
}
我认为您的设置可能还有其他问题,可能与同时运行多个插件实例有关。