Suite

Comment insérer une entité dans la classe d'entités (en mémoire) ESRI


Je recherche des suggestions sur la façon d'insérer une nouvelle instance d'entité dans une classe d'entités en mémoire, en supposant que je n'ai pas accès à l'espace de travail des entités. Par exemple, la classe d'entités a 4 "lignes", et je souhaite en ajouter une autre pour faire le total de 5.

Donc quelque chose comme ça…

void InsertFeatureInstance (IFeatureClass fc, fonction IFeature) { // Faites le travail ici. }

J'ai une bonne idée de la façon de procéder lorsque j'ai l'espace de travail des fonctionnalités, que j'utilise un curseur de fonctionnalité, que j'appelle CreateFeature, etc.

Travailler dans une application C# autonome, ArcGIS 10 et ArcGIS Engine.

--

ÉDITER: Voici la solution que j'ai trouvé. Une partie a été copiée à partir d'un autre code que j'ai obtenu d'ailleurs (je ne me souviens plus où).

public static void InsertFeatureInstance (IFeatureClass targetFeatureClass, IFeature sourceFeature) { IFeature newfeature = targetFeatureClass.CreateFeature(); var simplifiéFeature = newfeature as IFeatureSimplify; IGeometry myGeometry = sourceFeature.ShapeCopy; simplifiéFeature.SimplifyGeometry(myGeometry); newfeature.Shape = myGeometry; for (int i = 1; i < sourceFeature.Fields.FieldCount; i++) { IFeatureClass sourceFeatureClass = (IFeatureClass) sourceFeature.Class; string fieldName = sourceFeature.Fields.Field[i].Name; bool bCondition1 = fieldName == sourceFeatureClass.ShapeFieldName; bool bCondition2 = (sourceFeatureClass.LengthField != null && fieldName == sourceFeatureClass.LengthField.Name); bool bCondition3 = (sourceFeatureClass.AreaField != null && fieldName == sourceFeatureClass.AreaField.Name); if (!(bCondition1 || bCondition2 || bCondition3)) // Ne pas faire de champs de forme { int myTargetFieldId = targetFeatureClass.FindField(fieldName); // Id du champ dans l'entité source newfeature.Value[myTargetFieldId] = sourceFeature.Value[i]; // Copier la valeur } } newfeature.Store(); }

Vous pouvez obtenir le featureworkspace en transtypant le fc en IDataset, puis en transtypant IDataset.Workspace en IFeatureWorkspace.

Cependant, je ne vois pas pourquoi vous en avez besoin. Si vous lancez feature.Class n'est pas égal à fc (c'est dans un espace de travail différent), vous devez créer une nouvelle fonctionnalité avec fc.CreateFeature, copier chaque valeur de champ dans la nouvelle fonctionnalité à partir de la fonctionnalité transmise, puis appeler IFeature. Magasin().


Voir la vidéo: Combiner les classes dentités arcgis (Octobre 2021).