1

我在 Ubuntu 17.10 上运行 Python 2.7,并通过 apt 安装了 osgeo v2.2.1。

我的代码加载 osgeo 并且 1) 尝试创建一个具有 1 个图层和 1 个字段的 shapefile,2) 创建一个多边形(4 点几何图形),然后 3) 将多边形添加到 shapefile 的图层。在我使用 layer.CreateFeature(feature) 的第三个函数之前,一切都运行顺利:

driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.Open(shapefile_name,-1)
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
layer = ds.GetLayer()
print "layer",layer,", number of features :",layer.GetFeatureCount()

这打印:

layer <osgeo.ogr.Layer; proxy of <Swig Object of type 'OGRLayerShadow *' at 0x7f79aa499c90> > , number of features : 0

然后我从我已经创建的多边形创建一个几何图形并预先传递给函数:

defn = layer.GetLayerDefn()

geom = ogr.CreateGeometryFromWkb(poly)
print "geom",geom

这打印:

geom POLYGON ((-106 24 0,-100 26 0,-103 20 0,-106 20 0))

然后代码继续创建功能:

feat = ogr.Feature(defn)
feat.SetField('polygon_id', polygon_name)
feat.SetGeometry(geom)
print feat
print "Created feature",feat.GetField('polygon_id')

创建此功能:

<osgeo.ogr.Feature; proxy of <Swig Object of type 'OGRFeatureShadow *' at 0x7f35cd988d50> >
Created feature polygon_1

但是当我将它添加到图层时,什么也没有发生:

layer.CreateFeature(feat)
print "number of features : ",layer.GetFeatureCount()

印刷 :

number of features :  0

我错过了什么 ?

4

1 回答 1

0

gdal 文档中的矢量教程为编写 wkbPoint 特征提供了一个很好的示例,但是编写 wkbPolygon 特征有点棘手。下面是(c++)代码对我有用。(注意:TMultline 只是一个外部定义的顶点链表。)

bool TTdhOGR_target::WriteLinePts (OGRFeature *poFeature, TMultiLine *lineParam) {
  OGRLinearRing lineString;
  OGRPolygon currPoly;
  TVertex *currPt = lineParam->get_firstPt();
  while (currPt) {
    lineString.addPoint(currPt->getX(), currPt->getY());
    currPt = (TVertex*)currPt->next();
    }
  currPoly.addRing(&lineString);
  return (poFeature->SetGeometry(&currPoly) == OGRERR_NONE);
  }
于 2022-01-23T02:10:44.107 回答