Suite

Comment parcourir un tableau d'entités ponctuelles ?


J'ai un ensemble d'entités ponctuelles et je souhaite trouver les points qui ont des coordonnées communes. Maintenant, j'ai changé le code comme shwon bewlo en utilisant IPoint et la méthode de comparaison via une fonction. J'ai 2 boucles avec des curseurs. Le premier doit lire le premier point tandis que le deuxième boucle le deuxième point etc. Comment puis-je forcer le curseur de la deuxième boucle à aller au deuxième point ? J'ai ajouté un autre NextFeature mais cela n'a pas fonctionné. Le résultat est que tous les points sont les mêmes entre les 2 boucles. Merci Démétris

Définir pFeature = pFCursor.NextFeature faire jusqu'à ce que pFeature ne soit rien Définir pPointA = pFeature.Shape Définir pFeature2 = pFCursor2.NextFeature faire jusqu'à ce que pFeature2 ne soit rien CommonPoints = True Then MsgBox "Yes" End If Set pFeature2 = pFCursor2.NextFeature Loop Function ComparePoints(pointA As IPoint, pointB As IPoint) As Boolean If pointA.Compare(pointB) Then ComparePoints = True Sinon ComparePoints = False End If End Function

D'accord, sur la base des informations supplémentaires dans les commentaires, je propose une autre façon d'atteindre l'objectif réel qui est identification des points coïncidents dans une classe d'entités points. Je vais maintenant accomplir cet exploit sans aucune programmation (avec "The Final Countdown" d'Europe).

  1. Dans ArcMap, ajoutez la classe d'entités ponctuelles en question en tant que couche.
  2. Utilisez Rechercher l'identique (gestion des données) sur la couche d'entités contenant les points coïncidents. Sélectionnez leFAÇONNERdomaine puisque nous ne sommes intéressés que par la comparaison de la géométrie. Entrez les tolérances XY et Z appropriées ou acceptez les valeurs par défaut. Cela produira une table autonome contenant un enregistrement pour chaque entité dans la classe d'entités en entrée, avec des colonnes pour l'ObjectID d'origine de chaque entité (IN_FID), et une valeur séquentielle (FEAT_SEQ) qui sera le même pour toutes les caractéristiques qui ont été déterminées comme étant identiques.
  3. Utilisez la fréquence (analyse) sur la table de recherche d'identique résultante. Sélectionnez leFEAT_SEQchamp comme champ de fréquence. Cela créera une autre table autonome avec un champ contenant le nombre de fois où chaque valeur séquentielle s'est produite.
  4. Joignez la table Rechercher l'identique à la couche d'entités ponctuelles sur leOBJECTIDdans la couche de points etFIDchamp dans le tableau.
  5. Joignez la table de fréquence à la couche d'entités ponctuelles sur leFEAT_SEQdans la table de recherche d'identité jointe, et le champFEAT_SEQchamp dans le tableau Fréquence.
  6. Sélectionnez par attributs sur la couche d'entités ponctuelles tous les enregistrements oùLA FRÉQUENCE> 1. Félicitations, vous avez maintenant identifié tous les points coïncidents ! Maintenant, faites quelque chose avec eux.

Conseils: Vous pouvez utiliser l'espace de travail en mémoire ("in_memorysomeData") pour les deux tables autonomes, car elles ne sont nécessaires que temporairement et le nombre de fonctionnalités est faible. Vous pouvez également le scripter facilement avec Python !


Si vous utilisez des points, vous pouvez envisager d'implémenter IPointCollection au lieu d'un tableau. Vous pouvez utiliser les méthodes intégrées pour accomplir ce que vous demandez et cela devrait être un peu plus efficace car vous n'aurez pas besoin d'une méthode externe pour obtenir votre IPoint.

Vos étapes seraient :

1) Ajoutez chaque caractéristique (point) à la IPointCollection en utilisant ".Add".

2) Comparez votrePoint.X et/ou votrePoint.Y.