首頁 > 後端開發 > Python教學 > python gdal教程之:過濾器,簡單的空間分析,函數和模組

python gdal教程之:過濾器,簡單的空間分析,函數和模組

黄舟
發布: 2016-12-24 17:05:28
原創
2568 人瀏覽過

Layer物件有一個方法叫做SetAttributeFilter()可以將Layer中符合某一條件的Feature過濾出來。設定了Filter之後就可以用GetNextFeature()方法依序取出符合條件的Feature了。 SetAttributeFilter(None)可以清楚一個Filter。例如

   >>> layer.GetFeatureCount()

   42

   >>> layer.SetAttributeFilter("cover = 'shruot'")

.🠎

   >>> layer .SetAttributeFilter(None)

   >>> layer.GetFeatureCount()

   42

空間過濾器Spatial filters

有兩種。一種是SetSpatialFilter(),過濾某一類型的Feature,例如參數填入Polygon,就是選出Layer中的所有Polygon

另外還有SetSpatialFilterRect(, , , ),參數輸入四個座標,可以選取方框內的Feature

SetSpatialFilter(None)一樣是清空空間屬性過濾器。

例如下面這段程式碼,layerAreas 是polygon,layerSites是point

   >>> featAreas = layerAreas.GetNextFeature()

(  > poly = featAreas.Get.

   42

   >>> layerSites.SetSpatialFilter(poly)

   >>> layerSites.GetFeatureCount()>>> layerSites.GetFeatureCount( FilterRect(460000, 4590000, 490000, 4600000 )

   >>> layerSites.GetFeatureCount()

   4

   >>> layerSites.SetSpatialFilter(None)

🜎還有更複雜的Filter,例如執行SQL查詢語句ExecuteSQL(),憑藉SQL的強大功能,可以執行更複雜的任務,例如下面這段程式碼,就是選擇cover類型為grass的Feature,並且按id號降序排列。

   result = dsSites.ExecuteSQL("select * from sites where cover = 'grass' order by id desc")

   resultFeat = ¢ print resultFeat.GetField('id') print resultFeat.GetField('id')

      resultFeat = result.GetNextFeature()

   dsSites.ReleaseResultSet(result)

   dsSites.ReleaseResultSet(result)

   :

   4

最後一句話ReleaseResultSet()是將查詢結果釋放,在執行下一條SQL語句之前一定要先釋放。

下面的例子,統計了cover為grass的所有Feature的數目

   >>> result = dsSites.ExecuteSQL("select count(*) from sites where cover = 'grass'")

. GetFeatureCount()

   11

   >>> result.GetFeature(0).GetField(0)

   11

     result = ds .ExecuteSQL("select distinct cover from sites")

   resultFeat = result.GetNextFeature()

   while resultFeat: resultFeat = result.GetNextFeature()

   ds.ReleaseResultSet(result )

   shrubs

   trees

   rocks

   grass

   bare

有幾種統計ecuteSQL('select distinct cover from sites')

coverFeat = coverLayer.GetNextFeature()

while coverFeat:

cntLayer = ds.ExecuteSQL("select count(*) from sites where cover = ' “ + coverFeat.GetField(0) + “ceat (0) + ' ' +print coverFeat.GetField(0) + ' ' + cntLayer.GetFeature(0).GetFieldAsString(0)

    ds.ReleaseResultSet(cntLayer)

. ReleaseResultSet(coverLayer)

   shrubs 6

   trees 11

   rocks 6

   1111🜎 sect判斷兩個要素是否相交

poly2.Intersect(poly1)

返回0表示不相交,返回1表示相交

Disjoint判斷兩個要素是否不相交
poly2.Disjoint(poly1)

返回1表示不相交,返回0poly2.Disjoint(poly1)

返回1表示不相交,返回00表示,跟Intersect正好相反

Touch表示相鄰(擦邊)

poly2.Touches(poly1)

返回0表示不擦邊,回1表示擦邊

Crosses穿越,一般是一條線穿過一個多邊形

Crosses穿越,一般是一條線穿過一個多邊形

poly2.Crosses(line)

返回0表示不穿過,返回1表示穿過

Within包含,一個要素完全被另一個要素圈起來了

ptB.Within(poly1)

返回0表示點在多邊形外,返回1表示點在多邊形內

Contains包含,跟Within正好相反

poly1.Contains(ptB)

就是把主調對象和參數換一下啦

Overlaps重疊,好像只有兩個邊形之好像只有兩個邊形之間才能overlap

poly2.Overlaps(poly3)

回傳0表示不重疊,回傳1表示重疊

下面看簡單的地理資料處理geoprocessing

多邊形的:

交交交切

並:poly3.Union(poly2)

差:poly3.Difference(poly2)

補:poly3.SymmetricDifference(poly2)

geometry的:

uffer(

.Equal()   兩個geometry相等嗎?

.Distance()   返回兩個geometry之間的最短距離

.GetEnvelope()  信封,有意思,其實就是用一個方框框住這個幾何形狀,返回四個角的座標(minx, maxx, miny, maxy)

python的函數function,異常exception和模組module可以從任何一本python教材上找到,在此不多贅述


 以上就是python gdal教程之:過濾器,簡單的空間分析,函數和模組的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!

🎜🎜🎜🎜

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板