¿Recorta conjuntos de datos de polígonos muy grandes en ArcGIS?

8

Estoy tratando de recortar un conjunto de datos poligonales grandes (~ 5 gb, miles de características) por un conjunto de datos poligonales mucho más pequeño (~ 40 características). ¿Existe una mejor práctica o la ruta más eficiente para realizar esta tarea?

El clip de geoprocesador estándar se ejecuta indefinidamente en un conjunto de datos de este tamaño. ¿Sería más eficiente alguna forma de selección y exportación espacial?

EDITAR : Algunas excelentes respuestas a continuación. Seleccioné lo que considero que es la respuesta más completa, pero cada respuesta proporciona una visión única del problema. ¡Gracias!

Radar
fuente
44
¿Cómo se compara la extensión del conjunto de datos más pequeño con el del conjunto de datos más grande? Si las extensiones son muy diferentes, ¿ha considerado primero recortar (o simplemente seleccionar por intersección) el conjunto de datos grande con la extensión del más pequeño para reducir el tamaño del problema?
whuber
2
¿Recorta conjuntos de datos de polígonos muy grandes en ArcGIS? No lo hagas Después de muchos años de intentar esto, terminamos usando una base de datos y hacemos que SQL funcione, el tiempo es dinero.
Mapperz
@whuber - +1 Las extensiones son bastante similares, aunque he usado tu método sugerido en el pasado.
Radar
Lástima ... Estoy totalmente de acuerdo con Mapperz. También veo que @dmahr ha publicado una respuesta muy agradable que debería ayudarlo a acercarse sigilosamente a una solución o solución, si es posible. Proporciona una buena estrategia para tratar cualquier conjunto de datos grande utilizando cualquier software.
whuber
Desde este blog parece ser bastante problemático en ArcGIS. donmeltz.com/blog/index.php/2011/06/11/…
Nicklas Avén

Respuestas:

13

Como siempre cuando se trata con problemas de escalabilidad, es mejor comenzar de manera pequeña y simple y progresar de manera constante hasta llegar a ser grande y complejo.

En el caso de clip, debería ser lo suficientemente inteligente como para manejar grandes conjuntos de datos porque los enlosa internamente . Pero como no funciona, intente ejecutar Clip con el conjunto de datos de entrada (los datos que se van a recortar) y el conjunto de datos de clip (los datos con los que se realiza el clip) con muchas, muchas menos funciones . Al igual que una función de clip, con solo el área a su alrededor en el conjunto de datos de entrada (use consultas de definición para reducirlas). Asegúrese de que funciona correctamente y luego aumente constantemente el alcance de la operación de geoprocesamiento hasta que el rendimiento disminuya.

Un par de ideas específicas:

  • Disuelva las entidades de clip en una única clase de entidad de varias partes.

  • Reduzca el tamaño del archivo de las características de entrada usando Simplificar polígono . Un conjunto de datos vectoriales de 5 GB es enorme: incluso un archivo de forma de todos los 250,000 grupos de bloque del Censo de los EE. UU. Es de solo 1 GB.

  • Divide las características de entrada en partes. Teóricamente, las rutinas internas de mosaico dentro de la herramienta de geoprocesamiento ya deberían estar haciendo esto, pero nunca se sabe. Puede haber algún problema de limitación de tamaño de archivo de 32 bits en el que no puede tener un archivo de forma superior a 2 32 bytes = 4,29 GB.

Algunos otros consejos de rendimiento de geoprocesamiento más generales:

  • Asegúrese de que ambos conjuntos de datos tengan el mismo sistema de coordenadas. Si es posible, es más rápido tener ambos en un sistema de coordenadas geográficas sin proyección.

  • Asegúrese de no estar ejecutando una unidad de red. Use el disco duro local más rápido o, si es posible, un SSD.

  • Cargue el conjunto de datos de clip en la memoria .

  • Elimine los campos de atributos innecesarios (y vuelva a unirlos más tarde si es necesario).

  • Otros consejos de rendimiento de geoprocesamiento .

dmahr
fuente
55
+1 Muy bien. ¿Puedo sugerir abordar el problema un poco más cuantitativamente? En lugar de solo esperar el inicio de la degradación del rendimiento, aproveche la oportunidad para cronometrar las operaciones. Incluso algo tan burdo como mirar el reloj del sistema puede ser útil. Trazar el tiempo en función del tamaño del problema puede indicar cómo se escala, brindarle una forma de extrapolar el esfuerzo al problema completo e incluso revelar los lugares donde cambia la escala (golpea un muro de recursos o el algoritmo interno cambia, por ejemplo) . Es fácil obtener información y puede ser muy útil.
whuber
Estoy totalmente de acuerdo con Whuber en esto. Siempre llevo un registro del tiempo de rendimiento del geoprocesamiento, especialmente con los objetos timedelta en Python (cuando estoy escribiendo scripts con ArcPy). Otro consejo es usar un monitor de sistema con más funciones, como Process Explorer . Esto puede brindarle mucha más información sobre el rendimiento y ayudarlo a identificar cuellos de botella.
dmahr 01 de
7

Algunas funciones de ArcGIS como Union e Intersect utilizan el procesamiento de subdivisión adaptativa como se describe en el procesamiento en mosaico de grandes conjuntos de datos . Desafortunadamente, parece que Clip no tiene una herramienta de geoprocesamiento grande.

Parece que podría replicar este concepto a través de un script ModelBuilder o Python que utiliza la herramienta Split (ArcInfo) para ayudar a procesar conjuntos de datos de gran tamaño.

RyanKDalton
fuente
7

O bien, puede renunciar a ArcGIS e intentar hacer el clip en OGR. Vea una explicación aquí . ¡He encontrado que esto funciona cuando nada más lo hace!

Darren Cope
fuente
1
ogr2ogr -clipsrc clipping_polygon.shp output.shp input.shp Maldición, eso es hermoso.
RK
3

Creo que incluso seleccionar por ubicación funcionará para usted, primero selecciona todos los polígonos que se cruzan con su archivo de forma más pequeño y luego los elimina. Esperemos que esto sea más rápido. déjame saber si te funciona. Gracias.

Ramakrishna Billakanti
fuente
No es una mala idea en general, pero ¿leíste los comentarios a la pregunta original? La consulta preliminar no va a reducir mucho el tamaño del problema.
whuber
2
Esto realmente funciona para mí. Y, por cierto, esto es bastante diferente al recorte en la medida. Tengo dos archivos vectoriales (uno con más de 7 millones de características y otro con ~ 5000) con la misma extensión, pero con menos del 1% de esos 7 millones de características que se cruzan con las características del clip. Esperé más de 8 horas para que el clip funcionara en el conjunto de datos completo ... nunca terminó antes de que me diera por vencido. En su lugar, seleccioné por ubicación las entidades que se cruzan, exporté la selección a su propia clase de entidad y luego ejecuté el clip. Tiempo total para esto (incluida la selección): aproximadamente 1,5 minutos.
Tom
Es una buena opción para recortar puntos por polígonos como en mi caso. Traté de recortar alrededor de 1 millón de puntos por 1 millón de polígonos, lo dejé correr durante dos días y nunca terminó. Seleccione por ubicación y la exportación se realizó en menos de 5 minutos. No sé por qué no pensé en esta opción en primer lugar :-)
Janina