J'ai un logiciel (pas Arc) qui fonctionne tous les soirs sur une machine hors production qui met à jour les fonctionnalités du fichier de formes à partir d'une base de données externe. Je voudrais périodiquement supprimer toutes les fonctionnalités du fichier de formes (pas le fichier lui-même, qui doit rester) et laisser le logiciel "reconstruire" le fichier de formes à partir de zéro. Je voudrais automatiser ce processus.
Je n'ai pas de logiciel SIG actuellement installé sur cette machine. J'espérais pouvoir écrire une routine en Python qui supprimerait automatiquement les entités, un peu comme l' outil de géotraitement Supprimer les entités d'Arc .
Existe-t-il des modules Python qui me permettraient de le faire? De préférence open-source? J'ai regardé Shapely et PyShp mais je n'ai rien vu qui me permettrait de supprimer les fonctionnalités en masse ou qui correspondait à une clause WHERE. Ils peuvent écrire des fonctionnalités et les analyser, mais n'ont vu aucune fonction DELETE FEATURES nulle part.
Je dois certainement manquer quelque chose de simple ...
EDIT: J'ai 35 dossiers (différentes étendues géographiques, tous dans leur propre projection), avec 35-65 fichiers de formes avec environ 1000 fichiers de formes à traiter.
la source
ERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
La ligne de commande ogr2ogr avec une clause where garantie de créer des résultats vides est une méthode simple et rapide:
La page de présentation de python et OGR (et GDAL) est http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
la source
for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*)
. La réponse de Pablo est cependant plus extensible.Vous pouvez le faire dans pyshp. C'est simple mais pas évident car je n'ai jamais envisagé ce cas d'utilisation. Mais cela a du sens pour les applications de mise à jour automatisée. J'ai testé les 6 lignes de code suivantes et cela a très bien fonctionné:
Vous avez maintenant un fichier de formes écrit sur l'original qui a des en-têtes corrects et les champs dbf d'origine. Il s'ouvrira en toute sécurité dans le logiciel SIG et les bibliothèques de fichiers de formes mais n'a aucune fonctionnalité ni enregistrement dbf.
La fonction lambda transfère la boîte englobante d'origine en tant qu'espace réservé. Vous pouvez mettre les valeurs flottantes que vous souhaitez dans un tableau de [xmin, ymin, xmax, ymax]. Exemple:
La modification des champs dbf est également simple et documentée dans les documents pyshp.
J'espère que cela pourra aider.
la source
Pourquoi ne pas enregistrer une copie du Shapefile vierge et écraser votre Shapefile d'intérêt.
la source