Programowo edytować plik kształtu w ArcMap?

9

Czy to jest coś, co można zrobić?

Na przykład, jeśli utworzyłem nakładkę na mapie i zapisałem ją jako plik kształtu, chcę przejść i edytować tę ( wcześniej istniejący plik ) . Nakładkę ... Albo dodaj punkty / usuń punkty, zmień kolor / styl wypełnienia / itp.

Idealnie chcę uniknąć tworzenia nowego pliku kształtu i usuwania starego.

Myśli?

Edycja 1: OK, teraz, gdy ktoś powiedział, że można to zrobić. Oczywistym pytaniem jest, w jaki sposób edytujesz plik kształtów (w programie ArcObjects pro gramatycznie)?

Edycja 2: Patrząc na komentarze, wydaje się, że muszę zrobić coś takiego, ale nie jestem pewien.

Obecnie mam podstawowy plik kształtu, który chcę edytować w ArcObjects w C #.

Utworzyłem plik kształtu, tworząc FeatureClass, Workspace, a następnie oczywiście przekazując swój kształt. W tym przypadku jest to po prostu prosta polilinia z kilkoma punktami. Chcę zaktualizować ten plik kształtu.

Zakładam, że muszę ponownie użyć FeatureClass, Workspace i przekazać nowy kształt. Jednak to, co robię, nie działa. Tu jestem przy redakcji - każda rada byłaby świetna.

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

EDYCJA 3: Ostateczne rozwiązanie

featureCursor = inFeatureClass.Update(null ,true);
//DELETE old shape
featureCursor = inFeatureClass.Insert(true);
//Insert new 
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
ist_lion
źródło
Czy mówisz, że narysowałeś kilka warstw adnotacji na mapie za pomocą narzędzi do rysowania ArcMap? Jeśli przekonwertowałeś to na plik kształtu, możesz go z pewnością edytować tak, jakby to był plik kształtu.
jvangeld
Korzystam z ArcMap.TrackPolygon, aby utworzyć IPolygon, a następnie ostatecznie przekształcam go w plik kształtu. Chcę wtedy edytować ten plik
kształtu
1
A więc w ArcObjects pro-gramatycznie?
Mapperz
Tak, to właśnie chciałbym zrobić
ist_lion
Dzięki za udostępnienie rozwiązania, fyi, jeśli dodasz tag do C #, otrzymasz wyróżnianie składni.
Patrick

Odpowiedzi:

4

Programowo utworzyłem plik kształtu i manipulowałem nim - więc może to może dostarczyć wskazówek dotyczących dodawania punktów: zapisz IGeometry na dysku jako plik warstwy

Jeśli chodzi o kolorowanie warstwy, to całkiem proste.

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;
}
Patrick
źródło
Hmmm, być może nie sformułuję tego pytania poprawnie. Mogę już programowo utworzyć i zapisać plik kształtu. Chcę edytować ten istniejący plik. Zgaduję, że ta sama logika zadziała ...
ist_lion
1
@PSU_Kardi Myślę, że musisz użyć featureCursor.InsertFeature (fb); i featureCursor.DeleteFeature do edycji istniejącego pliku
Patrick
Zajmę