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)

Depth Bias 以及 Ogre材质中的depth_bias

退出程序时抛出异常(Ogre3d)

ogr2ogr 不创建表

ogr2ogr使用

如何使用 OGR 库 (GDAL\OGR) 读取 GML 文件?