プログラムでArcMapのシェープファイルを編集しますか?


9

これはできることですか?

たとえば、マップ上にオーバーレイを作成してシェープファイルとして保存した場合、この(既存のファイル)オーバーレイに移動して編集したいと思います

理想的には、新しいシェープファイルの作成や古いシェープファイルの削除を避けたいです。

考え?

編集1:OK、今、誰かがそれを行うことができると言いました。明白な質問は、シェープファイルをどのように編集するか(ArcObjectsでプログラム的に)ですか?

編集2:コメントを見ると、私はこのようなことをする必要があるようですが、わかりません。

現在、C#のArcObjectsで編集する基本的なシェープファイルがあります。

FeatureClass、ワークスペースを作成し、形状を渡してシェープファイルを作成しました。この場合、それは、いくつかのポイントを持つ単純なポリラインです。私がしたいことは、このシェープファイルを更新する機能を持っていることです。

そのFeatureClass、Workspaceを再利用し、新しい形状で渡す必要があると想定しています。しかし、私がやっていることはうまくいかないようです。これが私が編集しているところです-どんなアドバイスでも素晴らしいでしょう。

IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)inWorkspace;
workspaceEdit.StartEditing(true);
workspaceEdit.StartEditOperation();

ComReleaser comReleaser = new ComReleaser();

IFeatureCursor featureCursor = inFeatureClass.Update(null , true);

IFeature feature = null;
while((feature = featureCursor.NextFeature()) != null)
{
   int id = feature.Fields.FindField("shape");
   IFeatureBuffer featureBuffer = inFeatureClass.CreateFeatureBuffer();
   featureCursor.DeleteFeature(); //Delete the old 
   featureBuffer.Shape = (IGeometry)inShape;
   featureCursor.InsertFeature(featureBuffer);
}

workspaceEdit.StopEdidtOperation();
workspaceEdit.StopEditing(true);

編集3: 最終的な解決策

featureCursor = inFeatureClass.Update(null ,true);
//DELETE old shape
featureCursor = inFeatureClass.Insert(true);
//Insert new 
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);

ArcMapの描画ツールを使用して、マップ上にいくつかのアノテーションレイヤーを描画したということですか?それをシェープファイルに変換した場合は、シェープファイルのように間違いなく編集できます。
jvangeld 2011年

ArcMap.TrackPolygonを使用してIPolygonを作成し、最終的にそれをシェイプファイルに変換します。次に、このシェープファイルを編集します...プロパティ(ポイント、フィルスタイル、カラーなど)を取得する方法を知っています
ist_lion

1
それでは、ArcObjectsではプログラム的にですか?
Mapperz

はい、それが私がやりたいことです
ist_lion

ソリューションを共有してくれてありがとう、C#でタグ付けすると、構文の強調表示が表示されます。
パトリック

回答:


4

プログラムでシェープファイルを作成して操作しました。これでポイントを追加するためのヒントが得られる可能性があります。IGeometryをレイヤーファイルとしてディスクに保存します

レイヤーのカラーリングについては、これはかなり簡単です。

IGeoFeatureLayer geolayer = thislayer as IGeoFeatureLayer;
ISimpleRenderer simplerenderer = geolayer.Renderer as ISimpleRenderer;
if (simplerenderer != null)
{
//depending on the type one of these objects will probably not be null -- then set .Color and .Symbol 

IMarkerSymbol markersymbol = simplerenderer.Symbol as IMarkerSymbol;
ILineSymbol linesymbol = simplerenderer.Symbol as ILineSymbol;
SimpleFillSymbol simpleFillSymbol = simplerenderer.Symbol as SimpleFillSymbol;
}

うーん、たぶん私はこの質問を正しく述べていません。プログラムで既にシェイプファイルを作成して保存できます。私がやりたいのは、この既存のファイルを編集することです。同じロジックが機能すると
思い

1
@PSU_Kardi featureCursor.InsertFeature(fb);を使用する必要があると思います。およびfeatureCursor.DeleteFeatureを使用して既存のファイルを編集します
patrick

私はそれを調べます-それが私が望んでいることだと思います
ist_lion
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.