2013-02-26 52 views
0

使用Visual Studio C#的WinForms谷歌地球插件,4個標已被添加到地球作爲可以在下面的圖片中可以看出:從谷歌地球插件刪除功能在C#

enter image description here

我的目標是要能夠刪除線串地標。這些步驟似乎是獲取所有地標,找到線串並將其刪除。

這裏是被用來創建(從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

你有這條線應該工作,並刪除所有當前加載的內容。

GEHelpers.RemoveAllFeatures(ge); // removes all loaded features from 'ge' 

如果你想刪除一個特定的地標,或其他任何功能,只需指定其ID作爲參數傳遞給RemoveFeatureById方法。

GEHelpers.RemoveFeatureById(ge, 'foo'); // remove the feature with the id 'foo' 

一個ID可以當通過API創建特徵時或在KML定義特徵來設定。例如

// 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); 
    } 
} 

我認爲有可能是別的事情上與你建立了什麼,也許做同時有多個插件實例在運行。

+0

嗨弗雷澤,並感謝您的迴應。傳遞給兩個函數的參數是'ge' - 我稱之爲'ge1'。我有另一個叫做'ge2'。 我打算使用GetAllFeatures獲取ID並將它們與已知ID進行比較,並使用RemoveFeatureById和匹配的ID。 – CramerTV 2013-02-26 21:56:24

+0

如果你有一個已知的ID,那麼你可以簡單地使用它來通過RemoveFeatureById刪除功能。在任何情況下,你都不需要調用GetAllFeaturesKml,這對你來說毫無用處。 – Fraser 2013-02-26 22:54:14

+0

另外,你正在使用圖書館的舊版本的東西。你應該嘗試更新到最新版本。 – Fraser 2013-02-26 22:59:39