在python中使用OGR合并层/形状文件的方法

在python中使用OGR合并层/形状文件的方法,python,merge,layer,gdal,ogr,Python,Merge,Layer,Gdal,Ogr,我是python新手,正在尝试使用python更轻松地自动化GIS任务。谢谢你的帮助 我有两个层,其中包含我正试图使用python中的Ogr将其合并到一个层中的点。下面是我在一个网站上找到的代码,但它给了我一个错误 AttributeError:“非类型”对象没有属性“GetLayer” 我认为导致此错误的原因是: ds=ogr.Open(目录+文件) 我想知道为什么在这一步没有生成任何内容,我还想知道是否有一种不同/更好的方法来使用gdal/ogr-python合并层 outputMergef

我是python新手,正在尝试使用python更轻松地自动化GIS任务。谢谢你的帮助

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

AttributeError:“非类型”对象没有属性“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()

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

None
在出现错误时返回。将
ogr.UseExceptions()
放在顶部附近,查看错误是什么。很可能它找不到数据集。此外,使用OGR,您可以作为单个数据集打开一个shapefile目录,每个shapefile有许多层。谢谢Mike,您说得对,我没有在上面定义的目录中的输出后添加“/”。它现在运行良好。你能发布最终代码并关闭问题吗?我还想使用OGR合并shapefile,查看解决方案会很有用。