Tengo un software (no Arc) que se ejecuta todas las noches en una máquina que no es de producción y que actualiza las características de los archivos de forma desde una base de datos externa. Periódicamente me gustaría eliminar todas las características en el archivo de forma (no el archivo en sí, que debe permanecer) y dejar que el software "reconstruya" el archivo de forma desde cero. Me gustaría automatizar este proceso.
No tengo ningún software SIG instalado actualmente en esa máquina. Tenía la esperanza de poder escribir una rutina en Python que eliminaría automáticamente las características, al igual que la herramienta de geoprocesamiento Eliminar características de Arc .
¿Hay algún módulo de Python que me permita hacer esto? ¿Preferiblemente de código abierto? Miré a Shapely y PyShp pero no vi nada que me permitiera eliminar las características en masa o que coincidieran con una cláusula WHERE. Pueden escribir características y analizarlas, pero no han visto las funciones ELIMINAR CARACTERÍSTICAS en ningún lado.
Ciertamente me estoy perdiendo algo simple ...
EDITAR: Tengo 35 carpetas (diferentes extensiones geográficas, todas en su propia proyección), con 35-65 shapefiles con alrededor de 1000 shapefiles para tratar.
fuente
ERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
La línea de comando ogr2ogr con una cláusula where garantizada para crear resultados vacíos es un método rápido y fácil:
La página de resumen para python y OGR (y GDAL) es http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
fuente
for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*)
. Sin embargo, la respuesta de Pablo es más extensible.Puedes hacer esto en pyshp. Es simple pero no obvio porque nunca imaginé este caso de uso. Pero tiene sentido para las aplicaciones de actualización automatizadas. Probé las siguientes 6 líneas de código y funcionó muy bien:
Ahora tiene un archivo de forma escrito sobre el original que tiene encabezados correctos y los campos dbf originales. Se abrirá de forma segura en el software SIG y en las bibliotecas de archivos de forma, pero no tiene características ni registros dbf.
La función lambda transfiere el cuadro delimitador original como marcador de posición. Puede poner los valores flotantes que desee en una matriz de [xmin, ymin, xmax, ymax]. Ejemplo:
Cambiar los campos dbf también es simple y está documentado en los documentos de pyshp.
Espero que ayude.
fuente
¿Por qué no guardar una copia del Shapefile en blanco y sobrescribir su Shapefile de interés?
fuente