2017-07-07 57 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