在Python中使用OGR CreateField()时出现段错误(segfault)
在Ubuntu上运行这个非常简单的脚本时,出现了段错误。
from osgeo import ogr, osr
shpfile = 'Census_County_TIGER00_IN.shp'
def cust_field(field):
'''cust_field(shpfile, field) creates a field definition, which, by calling cust_field(), can be used to create a field using the CreateField() function.
cust_field() DOES NOT create a field -- it simply creates a "model" for a field, that can then be called later. It's weird, but that's GDAL/OGR, as far as I can tell.'''
fieldDefn = ogr.FieldDefn(field, ogr.OFTInteger)
fieldDefn.SetWidth(14)
fieldDefn.SetPrecision(6)
return fieldDefn
ds = ogr.Open(shpfile, 1)
lyr = ds.GetLayerByIndex(0)
field = cust_field("Test")
lyr.CreateField(field)
在最后一行之前,一切都运行得很顺利,但当我执行到最后一行时,iPython、普通的Python命令行和IDLE都出现了段错误。请问这是我这边的错误,还是底层的C语言有问题,我没有处理好?
1 个回答
5
这是我这边出错了,还是底层的C语言有问题,我没有处理好呢?
可能两者都有。GDAL/OGR的绑定确实有时候会出现崩溃,特别是当一些对象超出作用域被垃圾回收时。虽然这是一个已知的bug,但短时间内可能不会修复。
你可以尝试找个方法来绕过这个问题。我在Windows XP上用另一个形状文件测试时没有复现这个崩溃,使用的GDAL/OGR版本是:
>>> gdal.VersionInfo('')
'GDAL 1.6.0, released 2008/12/04'
你可以尝试暂时把cust_field
函数放到脚本的主体部分,像这样:
from osgeo import ogr, osr
shpfile = 'Census_County_TIGER00_IN.shp'
ds = ogr.Open(shpfile, 1)
lyr = ds.GetLayerByIndex(0)
fieldDefn = ogr.FieldDefn("Test", ogr.OFTInteger)
fieldDefn.SetWidth(14)
fieldDefn.SetPrecision(6)
lyr.CreateField(fieldDefn)
如果这样能解决你的问题,请告诉我。