1

在过去的两天里,我一直在尝试获取一个 python 脚本来完成创建一个带有属性的 289995 点的 shapefile。可以创建点,但脚本不会完成属性。代码正确运行,直到循环:( for j, p in enumerate(wCoords):见下面的代码 - 2nd循环)一段时间后发生分段错误。我试图添加一个 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 的了解不够多,无法为您提供更多信息。请帮忙。雅克

4

1 回答 1

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
于 2012-07-04T04:24:40.723 回答