在python中使用OGR合并图层/ shapefile的方法

时间:2016-04-17 04:41:48

标签: python merge layer gdal ogr

我是python的新手,我正在尝试使用python自动化GIS任务。任何帮助表示赞赏

我有两个包含点的图层,我试图将它们合并到一个单独的图层中,在python中使用Ogr。下面是我在网站上找到的代码,但它给了我一个错误

  

AttributeError:'NoneType'对象没有属性'GetLayer'

我认为导致此错误的一行是:

  

ds = ogr.Open(目录+文件)

我想知道为什么在这一步没有生成任何内容,我也想知道是否有一种不同/更好的方法来使用gdal / ogr python合并图层

outputMergefn = 'Merge.shp'
directory = "C:/Users/Robin/Documents/Python Final Project/Final_Project/Output"
filestartswith = 'C'
FileEndsWith = '.shp'
drivername = 'ESRI Shapefile'
geometrytype = ogr.wkbMultiPoint
ptdriver = ogr.GetDriverByName('ESRI Shapefile')

if os.path.exists(outputMergefn):
    ptdriver.DeleteDataSource(outputMergefn)
out_ds = ptdriver.CreateDataSource(outputMergefn)
out_layer = out_ds.CreateLayer(outputMergefn, geom_type = geometrytype)

filelist = os.listdir(directory)
for file in filelist:
    if file.startswith(filestartswith) and file.endswith(FileEndsWith):
        print file
        ds = ogr.Open(directory + file)
        if ds is None:
            print "This is None"
        lyr = ds.GetLayer()
        for feat in lyr:
            out_feat = ogr.Feature(out_layer.GetLayerDefn())
            out_feat.SetGeometry(feat.GetGeometryRef().Clone())
            out_layer.CreateFeature(out_feat)
            out_layer.SyncToDisk()

1 个答案:

答案 0 :(得分:1)

目录有问题。在您指定的目录中,不存在shapefile。这就是GetLayer()函数给出错误的原因。因为根据目录,数据源应该是shapefile,但是由于目录错误,数据源不是shapefile(它可能是文件夹或其他文件)。而且,当数据源不是shapefile时,就无法使用函数GetLayer()