У меня есть часть программного обеспечения (не Arc), которая работает ночью на непроизводственной машине, которая обновляет функции шейп-файла из внешней базы данных. Периодически я хотел бы удалить все функции в шейп-файле (а не сам файл, который должен остаться) и позволить программному обеспечению "перестроить" шейп-файл с нуля. Я хотел бы автоматизировать этот процесс.
В данный момент на этом компьютере не установлено программное обеспечение ГИС. Я надеялся, что смогу написать скрипт на Python, который автоматически удалит объекты, как инструмент геообработки Arc Delete .
Есть ли модули Python, которые позволили бы мне сделать это? Предпочтительно с открытым исходным кодом? Я посмотрел на Shapely и PyShp, но не увидел ничего, что позволило бы мне массово удалять объекты или соответствовать предложению WHERE. Они могут писать функции и анализировать их, но нигде не видели функций DELETE FEATURES.
Наверняка мне не хватает чего-то простого ...
РЕДАКТИРОВАТЬ: у меня есть 35 папок (различные географические экстенты, все в их собственной проекции), с 35-65 шейп-файлами с делает около 1000 шейп-файлов для работы.
источник
ERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
Командная строка ogr2ogr с предложением where гарантирует создание пустых результатов - это один быстрый и простой метод:
Страница обзора для Python и OGR (и GDAL) является http://trac.osgeo.org/gdal/wiki/GdalOgrInPython
источник
for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*)
. Ответ Пабло более расширяемый, хотя.Вы можете сделать это в pyshp. Это просто, но не очевидно, потому что я никогда не предполагал этот вариант использования. Но это имеет смысл для приложений автоматического обновления. Я протестировал следующие 6 строк кода, и он отлично работал:
Теперь у вас есть шейп-файл, написанный поверх оригинала, с правильными заголовками и исходными полями dbf. Он будет безопасно открываться в программном обеспечении ГИС и библиотеках шейп-файлов, но не имеет функций или записей dbf.
Лямбда-функция передает исходную ограничивающую рамку в качестве заполнителя. Вы можете поместить любые значения с плавающей точкой в массив [xmin, ymin, xmax, ymax]. Пример:
Изменение полей dbf также просто и описано в документации по pyshp.
Надеюсь, это поможет.
источник
Почему бы не сохранить копию пустого шейп-файла и переписать интересующий вас шейп-файл.
источник