Modifier un fichier de formes dans ArcMap par programme?

9

Est-ce quelque chose qui peut être fait?

Par exemple, si j'ai créé une superposition sur une carte et que je l'ai enregistrée en tant que fichier de formes, je veux aller modifier cette superposition ( fichier préexistant. ) ... Soit ajouter des points / supprimer des points changer de couleur / fillstyle / etc.

Idéalement, je veux éviter de créer un nouveau fichier de formes et de supprimer l'ancien.

Pensées?

Edit 1: OK, maintenant que quelqu'un a dit que cela pouvait être fait. La question évidente est de savoir comment modifier le fichier de formes (dans ArcObjects de manière grammaticale)?

Edit 2: En regardant les commentaires, il semble que je doive faire quelque chose comme ça, mais je ne suis pas sûr.

J'ai actuellement un fichier de formes de base que je souhaite modifier dans ArcObjects en C #.

J'ai créé un fichier de formes en créant une FeatureClass, un espace de travail, puis en passant évidemment ma forme. Dans ce cas, il s'agit simplement d'une simple polyligne avec quelques points dessus. Ce que j'aimerais faire, c'est avoir la possibilité de mettre à jour ce fichier de formes.

Je suppose que je dois réutiliser cette FeatureClass, Workspace et passer sous une nouvelle forme. Cependant, ce que je fais ne semble pas fonctionner. C'est où j'en suis sur l'édition - tout conseil serait génial.

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: Solution finale

featureCursor = inFeatureClass.Update(null ,true);
//DELETE old shape
featureCursor = inFeatureClass.Insert(true);
//Insert new 
workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);
ist_lion
la source
Êtes-vous en train de dire que vous avez dessiné des couches d'annotation sur la carte avec les outils de dessin d'ArcMap? Si vous l'avez converti en fichier de forme, vous pouvez certainement le modifier comme s'il s'agissait d'un fichier de formes.
jvangeld
J'utilise ArcMap.TrackPolygon pour créer un IPolygon, puis je le transforme finalement en un fichier de forme. Ce que je veux faire ensuite, c'est éditer ce fichier de formes .... Je sais comment obtenir les propriétés (points, fillstyle, couleur, etc.)
ist_lion
1
Donc, dans ArcObjects de manière pro-grammaticale?
Mapperz
Oui, c'est ce que j'aimerais faire
ist_lion
Merci d'avoir partagé la solution, fyi si vous taggez avec C #, vous obtiendrez une coloration syntaxique.
patrick

Réponses:

4

J'ai créé et manipulé un fichier de formes par programmation - alors peut-être que cela peut fournir des conseils pour ajouter des points: enregistrer IGeometry sur le disque en tant que fichier de couche

Quant à la coloration d'un calque, c'est assez 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;
}
patrick
la source
Hmm, je ne formule peut-être pas correctement cette question. Je peux déjà créer et enregistrer un fichier de forme par programmation. Ce que je veux faire, c'est éditer ce fichier préexistant. Je suppose que la même logique fonctionnera cependant ....
ist_lion
1
@PSU_Kardi Je pense que vous devez utiliser featureCursor.InsertFeature (fb); et featureCursor.DeleteFeature pour modifier votre fichier préexistant
patrick
Je vais y réfléchir - je pense que c'est ce que je veux
ist_lion