Je continue de penser que je dois manquer quelque chose, mais il ne semble pas y avoir d'outil dans ArcGIS 10 pour sélectionner des entités (en particulier des polygones) à partir d'une couche à un endroit (X, Y) via ArcPy. Les paramètres d'un tel outil seraient simplement un nom de couche et un emplacement XY.
Pour le moment, je contourne cela en créant une classe de points contenant le point et en effectuant un SelectLayerByLocation dessus. Cependant, lorsque la classe d'entités surfaciques est dans Oracle (accessible via ArcSDE 9.x) et contient 3,5 millions de polygones, le temps nécessaire pour effectuer la sélection peut être supérieur à 5 minutes quand je pense qu'une seconde ou deux (avec moins de code) seraient plus approprié. La classe d'entités a un index spatial et j'ai essayé d'utiliser arcpy.env.extent (que SelectLayerByLocation semble ignorer) pour restreindre la zone géographique accessible mais les performances restent très médiocres.
Existe-t-il un moyen plus rapide de le faire à l'aide d'ArcGIS Desktop 10 et d'ArcPy?
Réponses:
Une autre approche consiste à utiliser l'outil de jointure spatiale. Utilisez le point comme couche d'entités en entrée comme ci-dessus et la couche de polygones comme entités d'identité.
Contrairement à SelectLayerByLocation, SpatialJoin fait honneur à l'environnement de mesure.
JOIN_ONE_TO_MANY peut sembler contre-intuitif, mais comme vous n'avez qu'une seule fonction de jointure, la fonction principale de cette option est de désactiver les règles d'agrégation et de fusion. KEEP_COMMON s'assurera que votre sortie est limitée uniquement au polygone qui coupe votre point. Les Fieldmappings limiteront les attributs de sortie à la forme et aux attributs de la couche de polygones uniquement; la valeur par défaut inclurait également les attributs de la couche de points.
Le reste des valeurs par défaut fonctionnera correctement, vous pouvez donc laisser de côté les arguments restants.
la source
Je viens de réaliser quelque chose ...
Si vous l'utilisez pour implémenter un service de géotraitement, vous pouvez également implémenter un service d'entités avec votre couche de polygones à la place et utiliser l'opération de requête sur le service d'entités.
Vous pouvez utiliser un emplacement XY simple avec l'opération de requête du service d'entités, ainsi que contrôler les attributs de sortie, y compris la forme.
Vous pouvez avoir des restrictions sur la quantité d'expositions de la classe d'entités surfaciques, mais si vous la rendez déjà accessible au service de géotraitement, vous devriez également pouvoir créer un service d'entités.
la source
Cette réponse provient des anciens forums de discussion ArcGIS .
Merci Jason Scheirer pour un code plus concis:
Et surtout à Chris Snyder pour un conseil de performance:
la source