使用gdal/ogr获取要素范围

13

感觉应该已经有一个函数可以轻松完成此操作,但我找不到。

我最终想要做的是:我有一个带有3个边界框的shapefile;我想使用其中一个边界框来选择另一个shapefile或多边形中的所有要素。 我使用ogr2ogr运行它,使用-clipsrc和-clipsrcwhere标志从我的边界框shapefile中选择我的边界框。这很有效,但我不能包括或排除沿着边框的多边形,并且我不想截断它们。所以,我想用-spat标志代替,只导入边界框多边形范围。

我知道我可以通过以下方式获得多边形的范围:

polygon = 'mouth'
inDriver = ogr.GetDriverByName("ESRI Shapefile")
inDataSource = inDriver.Open(extent_shpfile, 1)
inLayer = inDataSource.GetLayer()
select = "name = '" + polygon + "'"
inLayer.SetAttributeFilter(select)
for feature in inLayer: #inLayer is always of size one because polygon is a unique value
    geom=feature.GetGeometryRef()
从这里我可以解析出geom的值,以获取最小和最大的x和y值。是否没有一个ogr调用来完成这个任务(例如inLayer.GetFeatureExtent()或inLayer.GetExtent(feature_fid))?后者仅返回图层范围,前者不存在,但是需要从要素几何中解析它感觉很笨拙。
1个回答

22

原来有一个内置函数可以做到这一点,我在原帖发布前花了4个小时搜索,但是没有找到它,直到我转而处理其他事情并意外地发现它。

extent = geom.GetEnvelope()

希望这篇文章能让其他人免去寻找此函数的烦恼。


1
谢谢,它起作用了!我想获取图层中每个要素的几何范围,以便将它们剪切到一个边界框.tif。另一种方法是在一行中完成,即feature.GetGeometryRef().GetEnvelope() - DarkCygnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接