0

Visual Studio C# Winforms Google Earth プラグインを使用すると、次の図に示すように、地球に 4 つの目印が追加されました。

ここに画像の説明を入力

私の目標は、ラインストリングの目印を削除できるようにすることです。手順は、すべての目印を取得し、ラインストリングを見つけて削除することのようです。

ラインストリングの目印を作成するために使用されているコードは次のとおりです (多かれ少なかれ API Web サイトから)

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

1 に答える 1

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

おそらく、プラグインの複数のインスタンスを同時に実行していることに関連して、セットアップで何か他のことが起こっている可能性があると思います。

于 2013-02-26T21:48:21.570 に答える