Модуль Python для видалення функцій SHP (без встановленого GIS на робочому столі)


16

У мене є програмне забезпечення (не Arc), яке працює щоночі на невиробничій машині, яка оновлює функції форм-файлів із зовнішньої бази даних. Періодично я хотів би видалити всі функції з формфайлу (а не сам файл, який повинен залишитися) і дозволити програмному забезпеченню "перебудувати" файл форми з нуля. Я хотів би автоматизувати цей процес.

На даний момент у мене не встановлено програмного забезпечення GIS. Я сподівався, що зможу скриптувати рутинну програму в Python, яка автоматично видалить функції, як інструмент геообробки Arc's Delete Features .

Чи є модулі Python, які б мені дозволили це зробити? Переважно з відкритим кодом? Я переглянув Shapely і PyShp, але не побачив нічого, що дозволило б мені масово видалити функції або що збігається з пунктом WHERE. Вони можуть записувати функції та аналізувати їх, але ніде не бачили ВИДАЛИТИ ОСОБЛИВОСТІ.

Я, звичайно, повинен пропустити щось просте ...

EDIT: У мене є 35 папок (різні географічні розширення, всі за власним проекцією), з 35-65 фігурними файлами і робить близько 1000 форм-файлів для вирішення.

Відповіді:


16

Ви можете використовувати API Gtal / OGR python , код буде таким:

from osgeo import ogr

shapefile = ogr.Open( "shapfile.shp",1 )
layer=shapefile.GetLayerByIndex(0)
count=layer.GetFeatureCount()
for feature in range(count):
    layer.DeleteFeature(feature)

Я отримуюERROR 1: The DeleteFeature() operation is not permitted on a read-only shapefile
matt wilkie

4
ви повинні відкрити його для написання. Зробіть це за допомогою: ogr.Open ('shapefile.shp', 1)
capooti

12

Командний рядок ogr2ogr з пунктом де гарантовано створити порожні результати - це один швидкий і простий метод:

ogr2ogr output.shp input.shp -where "FID < 0"

Сторінка огляду python та OGR (та GDAL) - http://trac.osgeo.org/gdal/wiki/GdalOgrInPython


Мені подобається ідея. Мені доведеться зробити деякі сценарії навколо видалення вхідного файлу та перейменувати вихідний файл на ім'я вводу, але я міг би змусити його працювати, якщо ніяких інших рішень не буде представлено.
RyanKDalton

1
ось одна лінія пакетний файл для цього: for %%a in (sample.shp) do (ogr2ogr %temp%\xxx.shp %%a -where "FID < 0" && copy %temp%\xxx.* %%~na.*). Однак відповідь Пабло є більш розширеною.
matt wilkie

11

Це можна зробити в pyshp. Це просто, але не очевидно, тому що я ніколи не замислювався над цим випадком використання. Але це має сенс для автоматизованих програм оновлення. Я перевірив наступні 6 рядків коду, і він чудово працював:

import shapefile
r = shapefile.Reader("myshape")
w = shapefile.Writer(r.shapeType)
# This line will give us the same dbf schema
w.fields = r.fields
# Use the original bounding box as a place holder in the header
w.bbox = lambda: r.bbox
w.save("myshape")

Тепер у вас написано форм-файл над оригіналом, який має правильні заголовки та початкові поля dbf. Він безпечно відкриється в бібліотеках програмного забезпечення GIS та форм-файлів, але не має функцій або dbf-записів.

Функція лямбда передає початкове обмежувальне поле як заповнювач. Ви можете помістити всі необхідні плаваючі значення у масив [xmin, ymin, xmax, ymax]. Приклад:

w.bbox = lambda: [0.0, 0.0, 0.0, 0.0]

Зміна полів dbf теж проста і задокументована в документах pyshp.

Сподіваюся, що це допомагає.


8

Чому б не зберегти копію порожнього Shapefile і перезаписати ваш Shapefile, що цікавить.


За іронією долі, IMHO це було б найефективнішим рішенням, поки схема не сильно зміниться ...
Ragi Yaser Burhum

1
Якби було для 1 або 2 файлів, я погодився б. Основна причина цього не була б такою ефективною, тому що у мене є 35 папок (різні географічні розширення, всі за власним проектом), з 35-65 формами файлів. Математика говорить, що для управління було б 1000+ пустих файлів, що теж не практично. Сценарій процесу виявлення форм і видалення функцій - це те, на що я сподіваюся в кінцевому підсумку.
RyanKDalton

@RyanDalton у Q ви сказали "форму файлів", що змусило нас, як не можна, думати і розробити єдине рішення. Я не нарікаю, просто вказую, що більше інформації про випадок використання наперед може призвести до того, що відповіді швидше застосовуються швидше.
matt wilkie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.