¿Editar archivo de formas en ArcMap mediante programación?


9

¿Es esto algo que se puede hacer?

Por ejemplo, si creé una superposición en un mapa y la guardé como un archivo de forma, quiero ir y editar esta superposición ( archivo preexistente ) ... Agregar puntos / eliminar puntos, cambiar el color / estilo de relleno / etc.

Idealmente, quiero evitar crear un nuevo shapefile y eliminar el antiguo.

Pensamientos?

Edición 1: OK, ahora que alguien ha dicho que se puede hacer. La pregunta obvia es, ¿cómo edita el archivo de forma (en ArcObjects de forma programática)?

Edición 2: Al mirar los comentarios, parece que necesito hacer algo como esto, pero no estoy seguro.

Actualmente tengo un shapefile básico que quiero editar en ArcObjects en C #.

He creado un archivo de forma creando una FeatureClass, Workspace y luego obviamente pasando mi forma. En este caso es solo una polilínea simple con algunos puntos. Lo que me gustaría hacer es tener la capacidad de actualizar este archivo de forma.

Supongo que necesito reutilizar esa FeatureClass, Workspace y pasar una nueva forma. Sin embargo, lo que estoy haciendo no parece funcionar. Aquí es donde estoy en la edición: cualquier consejo sería genial.

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

EDITAR 3: Solución final

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

¿Estás diciendo que dibujaste algunas capas de anotación en el mapa con las herramientas de dibujo de ArcMap? Si lo convirtió en un archivo de forma, definitivamente puede editarlo como si fuera un archivo de forma.
jvangeld

Estoy usando ArcMap.TrackPolygon para crear un IPolygon y luego eventualmente lo convierto en un archivo de forma. Lo que quiero hacer entonces es editar este archivo de forma .... Yo sé cómo conseguir las propiedades (puntos, FillStyle, color, etc)
ist_lion

1
Entonces, ¿en ArcObjects de forma programática?
Mapperz

Sí, eso es lo que me gustaría hacer
ist_lion

Gracias por compartir la solución, para su información, si etiqueta con C #, obtendrá un resaltado de sintaxis.
patrick

Respuestas:


4

Creé y manipulé un archivo de forma mediante programación, por lo que tal vez esto pueda proporcionar algunas sugerencias para agregar puntos: guardar IGeometry en el disco como un archivo de capa

En cuanto a colorear una capa, eso es bastante simple.

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, tal vez no estoy redactando esta pregunta correctamente. Ya puedo crear y guardar un archivo de forma mediante programación. Lo que quiero hacer es editar este archivo preexistente. Sin embargo
supongo que

1
@PSU_Kardi Creo que debe usar featureCursor.InsertFeature (fb); y featureCursor.DeleteFeature para editar su archivo preexistente
patrick

Lo investigaré, creo que eso es lo que quiero
Ist_lion
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.