Modificare lo shapefile in ArcMap a livello di codice?


9

È qualcosa che si può fare?

Ad esempio, se ho creato un overlay su una mappa e l'ho salvato come shapefile, voglio andare a modificare questo overlay ( file preesistente. ) ... O aggiungi punti / rimuovi punti cambia colore / fillstyle / etc.

Idealmente, voglio evitare di creare un nuovo shapefile ed eliminare quello vecchio.

Pensieri?

Modifica 1: OK, ora che qualcuno ha detto che può essere fatto. La domanda ovvia è: come si modifica lo shapefile (in ArcObjects in modo pro-grammaticale)?

Modifica 2: guardando i commenti sembra che debba fare qualcosa del genere, ma non ne sono sicuro.

Al momento ho uno shapefile di base che voglio modificare in ArcObjects in C #.

Ho creato uno shapefile creando FeatureClass, Workspace e ovviamente passando nella mia forma. In questo caso è solo una semplice polilinea con alcuni punti. Quello che mi piacerebbe fare è avere la possibilità di aggiornare questo shapefile.

Suppongo di dover riutilizzare quella FeatureClass, Workspace e passare una nuova forma. Tuttavia, quello che sto facendo non sembra funzionare. Questo è il punto in cui mi trovo nella modifica: qualsiasi consiglio sarebbe fantastico.

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

EDIT 3: Soluzione finale

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

Stai dicendo che hai disegnato alcuni livelli di annotazione sulla mappa con gli strumenti di disegno di ArcMap? Se lo hai convertito in un file di forma, puoi sicuramente modificarlo come se fosse un file di forma.
jvangeld,

Sto usando ArcMap.TrackPolygon per creare un IPolygon e alla fine lo trasformo in un file di forma. Quello che voglio fare quindi è modificare questo shapefile .... So come ottenere le proprietà (punti, stile di riempimento, colore, ecc.)
ist_lion

1
Quindi in ArcObjects in modo pro-grammaticale?
Mapperz

Sì, è quello che mi piacerebbe fare
ist_lion

Grazie per aver condiviso la soluzione, fyi se tagghi con C # otterrai l'evidenziazione della sintassi.
patrick,

Risposte:


4

Ho creato e manipolato un file di forma a livello di codice, quindi forse questo può fornire alcuni suggerimenti per l'aggiunta di punti: salva IGeometry su disco come file Layer

Per quanto riguarda la colorazione di un livello, è abbastanza semplice.

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

Hmm, forse non sto formulando correttamente questa domanda. Posso già creare e salvare un file di forma a livello di codice. Quello che voglio fare è modificare questo file preesistente. Immagino che la stessa logica funzionerà però ...
ist_lion

1
@PSU_Kardi Penso che devi usare featureCursor.InsertFeature (fb); e featureCursor.DeleteFeature per modificare il tuo file preesistente
patrick

Lo esaminerò - penso che sia quello che voglio
ist_lion
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.