Sigo pensando que me falta algo, pero no parece haber una herramienta en ArcGIS 10 para seleccionar entidades (en particular polígonos) de una capa en una ubicación de punto (X, Y) a través de ArcPy. Los parámetros para tal herramienta serían solo un nombre de capa y una ubicación XY.
En este momento, soluciono esto creando una clase de entidad de punto que contiene el punto y realizando una SelectLayerByLocation en él. Sin embargo, cuando la clase de entidad poligonal está en Oracle (se accede a través de ArcSDE 9.x) y contiene 3,5 millones de polígonos, el tiempo necesario para realizar la selección puede ser de más de 5 minutos cuando creo que un segundo o dos (con menos código) serían más apropiado. La clase de entidad tiene un índice espacial y he intentado usar arcpy.env.extent (que SelectLayerByLocation parece ignorar) para restringir el área geográfica a la que se accede pero el rendimiento sigue siendo muy pobre.
¿Hay una manera más rápida de hacer esto usando ArcGIS Desktop 10 y ArcPy?
Respuestas:
Otro enfoque para esto sería usar la herramienta Unión espacial. Use el punto como capa de entidades de entrada como se muestra arriba y la capa de polígono como entidades de identidad.
A diferencia de SelectLayerByLocation, SpatialJoin hace honor al entorno de medida.
JOIN_ONE_TO_MANY puede parecer contrario a la intuición, pero dado que solo tiene una función de combinación, la función principal de esta opción es desactivar las reglas de agregación y fusión. KEEP_COMMON se asegurará de que su salida esté restringida solo al polígono que interseca su punto. Fieldmappings restringirá los atributos de salida a la forma y los atributos de la capa de polígono solamente; el valor predeterminado también incluiría los atributos de la capa de puntos.
El resto de los valores predeterminados funcionarán bien, por lo que puede omitir los argumentos restantes.
fuente
Me acabo de dar cuenta de algo ...
Si está utilizando esto para implementar un Servicio de geoprocesamiento, también podría implementar un Servicio de entidades con su capa de polígono y utilizar la operación Consulta en el servicio de entidades.
Usted puede utilizar una ubicación XY sencillo con Uso de las funciones del servicio de consulta, así como controlar los atributos de salida que incluye la forma.
Es posible que tenga restricciones sobre cuánto puede exponer la clase de entidad poligonal, pero si ya la está haciendo accesible para el servicio de geoprocesamiento, entonces también debería ser capaz de construir un servicio de entidades.
fuente
Esta respuesta provino de los antiguos foros de discusión de ArcGIS .
Gracias Jason Scheirer por un código más conciso:
Y especialmente a Chris Snyder por un consejo de rendimiento:
fuente