删除SHP功能的Python模块(未安装Desktop GIS)


16

我有一个在非生产计算机上每晚运行的软件(非Arc),该计算机从外部数据库更新shapefile功能。我想定期删除shapefile中的所有功能(而不是文件本身,必须保留),然后让软件从头开始“重建” shapefile。我想使这个过程自动化。

该机器上目前没有安装任何GIS软件。我希望我可以用Python编写一个例程来自动删除要素,就像Arc的Delete Features地理处理工具一样。

有没有允许我执行此操作的Python模块?最好是开源的?我查看了ShapelyPyShp,但没有发现任何可让我删除大量功能或与WHERE子句匹配的功能。他们可以编写功能并对其进行分析,但是在任何地方都没有看到DELETE FEATURES功能。

我肯定一定会错过一些简单的东西...

编辑:我有35个文件夹(不同的地理范围,全部在各自的投影中),带有35-65个shapefile,可处理约1000个shapefile。

Answers:


16

您可以使用GDAL / OGR python API,代码如下所示:

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)2011年

4
您必须打开它进行书写。这样做:ogr.Open('shapefile.shp',1)
capooti 2011年

12

带有保证可以创建空结果的where子句的命令行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.*)。Pablo的答案更可扩展。
马特·威尔基

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")

现在,您在原始文件上覆盖了一个shapefile,该文件具有正确的标题和原始dbf字段。它将在GIS软件和shapefile库中安全打开,但没有功能或dbf记录。

lambda函数将原始边界框作为占位符转移过来。您可以将所需的任何浮点值放在[xmin,ymin,xmax,ymax]数组中。例:

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

更改dbf字段也很简单,并记录在pyshp文档中。

希望能有所帮助。


8

为什么不保存空白Shapefile的副本并覆盖您感兴趣的Shapefile。


具有讽刺意味的是,恕我直言,这将是最有效的解决方案,只要架构不会发生太大变化...
Ragi Yaser Burhum 2011年

1
如果是1或2个文件,我会同意。效率不高的主要原因是因为我有35个文件夹(不同的地理范围,都在其自己的投影中),并带有35-65个shapefile。数学上说要管理1000多个空白shapefile,这也不可行。我最终希望最终编写脚本来发现shapefile和删除特征。
RyanKDalton 2011年

@Q中的@RyanDalton,您说的是“ shapefile”,这使我们,无论如何对我来说,都是想出并设计出一个奇异的解决方案。我并不是在抱怨,只是指出有关使用案例的更多信息可能导致更迅速,更迅速地应用答案。
马特·威尔基,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.