10 votos

Leer sólo una parte de un shapefile de ESRI en R

Tengo un archivo shapefile de ESRI muy grande (>8000 polígonos, el archivo .shp es >32MB), que quiero leer en R en Windows 7.

Estoy familiarizado con rgdal y readOGR(). Sin embargo, con este tamaño de shapefile, la lectura de todo el shapefile en la memoria es un proceso muy lento. Además, sólo me interesan unos pocos polígonos agrupados (<100) de los 8.000 que contiene el shapefile. El proceso para el que necesito hacer esto es altamente repetitivo, es decir, el shapefile necesita ser cargado muchas veces, por lo que actualmente es muy lento.

Por ello, me pregunto si es posible leer sólo una parte del shapefile para acelerar el proceso. No parece práctico cargar una cantidad tan grande de datos y luego descartar la mayor parte.

0 votos

¿Qué plataforma estás utilizando? Si tienes acceso a ArcGIS, supongo que podrías script algo en ArcPy que haga la selección del subconjunto y luego ejecute un proceso en R desde el script de python. Esto es definitivamente posible... Haz una búsqueda en Google para ejecutar código R desde python.

3 votos

Tal vez intente exportar a un nuevo shapefile aquella parte de sus datos que le resulte importante, y luego trabajar con ella en R.

0 votos

Probablemente funcione con sf. Pero guárdalo en formato de espacio de trabajo de R con saveRDS. Hay formas de almacenar genéricamente en SQLite o similar, pero dudo que sea necesario

8voto

Dan Puntos 16

Lo único que se me ocurre es aprovechar la nueva biblioteca "sfr" y su clase de característica simple asociada para el subconjunto. El biblioteca sfr está actualmente disponible en GitHub y aquí hay un tutorial para empezar.

No creo que se puedan transmitir datos basados en una consulta de subconjunto, sin embargo, esto al menos aceleraría los tiempos de lectura considerablemente y es supuestamente el futuro de las clases espaciales de R .

Otra opción sería almacenar los datos espaciales en una base de datos (por ejemplo, PostGIS) y consultarlos desde la base de datos. Esta puede ser una forma extremadamente eficiente de tratar con datos de gran tamaño.

2 votos

El sf está disponible en CRAN desde la versión 0.2 (2016-10-26): cran.r-project.org/web/packages/sf/index.html

1voto

OrenM Puntos 51

Creo que utilizar un SIG como QGIS y seleccionar las características que necesitas sería un buen enfoque.
Si necesita fusionar los resultados, podría crear un archivo con los 7900 polígonos que no quiere procesar, luego procesar los 100 polígonos, y volver a unirlos después del procesamiento.

0voto

Jay Bazuzi Puntos 194

Se puede hacer un subconjunto de un shapefile utilizando la función org2ogr como se ejemplifica aquí:

ogr2ogr selección de características por atributos

Sin embargo, tendrás que establecer una condición para seleccionar las características que desees.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X