Editando shapefile no ArcMap programaticamente?


9

Isso é algo que pode ser feito?

Por exemplo, se eu criei uma sobreposição em um mapa e a salvei como um arquivo de forma , quero editar esta sobreposição ( arquivo preexistente. ) ... Adicionar pontos / remover pontos, alterar cor / estilo de preenchimento / etc.

Idealmente, quero evitar criar um novo shapefile e excluir o antigo.

Pensamentos?

Edit 1: OK, agora que alguém disse que isso pode ser feito. A pergunta óbvia é: como você edita o shapefile (no ArcObjects de forma programática)?

Edit 2: Olhando para os comentários, parece que preciso fazer algo assim, mas não tenho certeza.

Atualmente, tenho um shapefile básico que quero editar no ArcObjects em C #.

Eu criei um shapefile criando um FeatureClass, Workspace e, obviamente, passando na minha forma. Nesse caso, é apenas uma polilinha simples com alguns pontos. O que eu gostaria de fazer é ter a capacidade de atualizar esse shapefile.

Estou assumindo que preciso reutilizar esse FeatureClass, Workspace e passar em uma nova forma. No entanto, o que estou fazendo não parece funcionar. Aqui é onde estou na edição - qualquer conselho seria ótimo.

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: Solução final

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

Você está dizendo que desenhou algumas camadas de anotação no mapa com as ferramentas de desenho do ArcMap? Se você o converteu em um arquivo de forma, é possível editá-lo definitivamente como se fosse um arquivo de forma.
precisa saber é o seguinte

Estou usando o ArcMap.TrackPolygon para criar um IPolygon e, eventualmente, transformo isso em um arquivo de forma. O que eu quero fazer, então, é editar este shapefile .... Eu sei como obter as propriedades (pontos, FillStyle, cor, etc)
ist_lion

11
Então, no ArcObjects de forma programática?
Mapperz

Sim, isso é o que eu gostaria de fazer
ist_lion

Obrigado por compartilhar a solução, fyi, se você marcar com C #, obterá o destaque da sintaxe.
patrick

Respostas:


4

Criei e manipulei um shapefile programaticamente - então talvez isso possa fornecer algumas dicas para adicionar pontos: salve o IGeometry em disco como um arquivo de camada

Quanto à coloração de uma camada, isso é bem simples.

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, talvez eu não esteja formulando essa pergunta corretamente. Já posso criar e salvar um arquivo de forma programaticamente. O que eu quero fazer é editar este arquivo pré-existente. Eu estou supondo que a mesma lógica vai funcionar embora ....
ist_lion

11
@PSU_Kardi Acho que você precisa usar o featureCursor.InsertFeature (fb); e featureCursor.DeleteFeature para editar seu arquivo preexistente
patrick

Eu vou olhar para ele - Acho que isso é o que eu quero
ist_lion
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.