ogr 中的 SetField/SetFeature 上的分段错误(核心转储)
Posted
技术标签:
【中文标题】ogr 中的 SetField/SetFeature 上的分段错误(核心转储)【英文标题】:Segmentation fault (core dumped) on SetField/SetFeature in ogr 【发布时间】:2012-06-29 18:15:39 【问题描述】:过去 2 天我一直在尝试完成一个 python 脚本
创建一个带有属性的 289995 个点的 shapefile。积分可以
已创建,但脚本未完成属性。代码运行
正确直到循环:
for j, p in enumerate(wCoords):
(见下面的代码-第二个循环)
当一段时间后发生分段错误时。
我试图添加一个 if 语句,它在某些情况下停止进程
间隔看看我是否可以在循环循环中找到位置
发生。循环循环无故障,直到 1000 个循环,但直到
10,000 当它停止而没有反馈时,似乎是一个无限循环。
该程序是创建树点,然后附加树高
点的属性。代码如下:
def save_shp(wCoords):
print 'saving shapefile...'
driver = ogr.GetDriverByName('ESRI Shapefile')
if os.path.exists('tree_points.shp'):
driver.DeleteDataSource('tree_points.shp')
ds = driver.CreateDataSource('tree_points.shp')
layer = ds.CreateLayer('trees', geom_type=ogr.wkbPoint)
layerDefn = layer.GetLayerDefn()
point = ogr.Geometry(ogr.wkbPoint)
for i, p in enumerate(wCoords):
point.AddPoint(p[0],p[1])
featureIndex = i
feature = ogr.Feature(layerDefn)
feature.SetGeometry(point)
feature.SetFID(featureIndex)
layer.CreateFeature(feature)
fieldDefn = ogr.FieldDefn('tree_hts', ogr.OFTReal)
layer.CreateField(fieldDefn)
i = feature.GetFieldIndex('tree_hts')#???
for j, p in enumerate(wCoords):
feature_n = layer.GetFeature(j)
feature_n.SetField(i, p[2])#???
layer.SetFeature(feature_n)
try:
ds.Destroy()
except:
print 'still core dumping!'
我对 gdal/ogr 的了解还不够,无法为您提供更多信息。 请帮忙。 雅克
【问题讨论】:
【参考方案1】:一些快速提示:
使用与 shapefile 前缀相同的图层名称:ds.CreateLayer('tree_points', ogr.wkbPoint)
在添加任何数据之前请拨打layer.CreateField(fieldDefn)
循环遍历您的特征一次,同时创建几何和特征对象
在你的 for 循环中,你需要创建一个新的几何对象,并且点索引为 0:
point = ogr.Geometry(ogr.wkbPoint)
point.SetPoint_2D(0, p[0], p[1])
你不需要ds.Destroy()
;使用ds = None
保存/关闭
【讨论】:
以上是关于ogr 中的 SetField/SetFeature 上的分段错误(核心转储)的主要内容,如果未能解决你的问题,请参考以下文章
Ogre3D : 构建示例程序 (Samples/Tutorial/Bootstrap.cpp)