Редактировать шейп-файл в ArcMap программно?


9

Это то, что можно сделать?

Например, если я создал наложение на карте и сохранил его как шейп -файл , я хочу перейти и отредактировать это ( существующий файл. ) Наложение ... Либо добавьте точки / удалите точки, измените цвет / fillstyle / и т. Д.

В идеале я хочу избежать создания нового шейп-файла и удаления старого.

Мысли?

Редактировать 1: Хорошо, теперь, когда кто-то сказал, что это можно сделать. Очевидный вопрос: как вы редактируете шейп-файл (в ArcObjects программно)?

Изменить 2: Глядя на комментарии, кажется, мне нужно сделать что-то вроде этого, но я не уверен.

В настоящее время у меня есть основной шейп-файл, который я хочу редактировать в ArcObjects в C #.

Я создал шейп-файл, создав FeatureClass, Workspace, а затем, очевидно, передав мою форму. В данном случае это просто простая полилиния с несколькими точками. Я хотел бы иметь возможность обновлять этот шейп-файл.

Я предполагаю, что мне нужно повторно использовать этот 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

Я использую 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;
}

Хм, возможно я не правильно формулирую этот вопрос. Я уже могу создавать и сохранять файл формы программно. Что я хочу сделать, это отредактировать этот ранее существующий файл. Я предполагаю, что та же самая логика будет работать все же ....
ist_lion

1
@PSU_Kardi Я думаю, что вы должны использовать featureCursor.InsertFeature (fb); и featureCursor.DeleteFeature для редактирования ранее существовавшего файла
Патрик

Я посмотрю на это - я думаю, что это то, что я хочу
ist_lion
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.