2017-07-07 266 views
3

这感觉就像应该已经有一个功能可以轻松做到的事情,但我找不到一个。使用gdal/ogr获取功能范围

我最终试图做的是什么:我有一个带有3个特征的shapefile,它们显示边界框;我想使用这些功能之一来选择其他shapefile或polygons中的所有功能。我使用ogr2​​ogr运行,使用-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)?后者只是返回图层范围,前者不存在,但必须从特征几何解析它感觉笨重。

回答

3

原来有一个内置的功能,要做到这一点,我的4小时(原帖)之前,搜索只是没有把它带到光,直到我切换到别的东西的工作,并通过它绊倒小心。

extent = geom.GetEnvelope() 

希望这篇文章将节省别人试图找到此功能的头痛。

+0

由于它的工作!我想要得到我的图层中每个要素的几何图形的范围,所以我可以将它们剪辑到一个边框“.tif”。另一种做法是,在一行中是'feature.GetGeometryRef()。GetEnvelope()' – DarkCygnus