Python與開源GIS 獲取要素資訊

2021-06-10 02:12:40 字數 2637 閱讀 8018

獲取要素(feature)資訊

如果只從計算機角度來看,有人認為要素就是一些幾何形狀,這種觀點是欠妥的。

幾何形狀,具體包括點、線、多邊形、弧段、向量、控制點等等非常多種,

其實是要素的模型抽象。

在shapefile中,要素模型由點、線、面三種型別構成。

要素類都帶有屬性資訊,

乙個要素一般對應屬性表中的一行。

獲取圖層中的要素

下面看一下如何獲取圖層中的要素(feature)。

>>> from osgeo import ogr

>>> inshp = '/gdata/world_borders.shp'

>>> datasource = ogr.open(inshp)

>>> layer = datasource.getlayer(0)

>>> feature = layer.getfeature(0)

另外還有按順序讀取feature,迴圈遍歷所有的feature:

>>> feat = layer.getnextfeature()

>>> while feat:

>          feat = layer.getnextfeature()

>>> layer.resetreading()

getnextfeature()用來獲取下一下要素,

resetreading()則是進行重置,以便再次獲取。

獲取要素的屬性

下面是乙個簡單的例子:

>>> feat = layer.getfeature(0)

>>> feat.keys()

['cat', 'fips_cntry', 'cntry_name', 'area', 'pop_cntry']

>>> fid = feat.getfield('area')

>>> print(fid)

193.0

下面是對所有的屬性值進行遍歷:

>>> for i in range(feature.getfieldcount()):

>      print feature.getfield(i)

1.0aa

aruba

193.0

71218.0

這會列出這個要素的所有屬性值。

如果要看整個表的結構,各個欄位的名稱等等資訊,可以在layer的附加資訊裡看。

>>> layerdef = layer.getlayerdefn()

>>> for i in range(layerdef.getfieldcount()):

>          defn = layerdef.getfielddefn(i)

>      print(defn.getname(),defn.getwidth(),defn.gettype(),defn.getprecision())

('cat', 16, 2, 0)

('fips_cntry', 80, 4, 0)

('cntry_name', 80, 4, 0)

('area', 15, 2, 2)

('pop_cntry', 15, 2, 2)

要素的形狀(geometry)

>>> geom = feature.getgeometryref()

>>> geom.getgeometryname()

'polygon'

>>> geom.getgeometrycount()

1>>> geom.getpointcount()

0>>> geom.getx()

0.0>>> geom.gety()

0.0>>> print(geom) # 會列印出所有的點

polygon ((-69.882232999999999 12.41111,-69.946944999999999 12.436666,

...12.411664999999999,-69.882232999999999 12.41111))

>>> print(geom.exporttowkt())

polygon ((-69.882232999999999 12.41111,-69.946944999999999 12.436666,

...12.411664999999999,-69.882232999999999 12.41111))

>>> polygon = geom.getgeometryref(0)

>>> polygon.getgeometryname()

'linearring'

>>> polygon.getgeometrycount()

0>>> polygon.getpointcount()

19>>> polygon.getx(0)

-69.882232999999999

>>> polygon.gety(0)

12.411110000000001

>>> polygon.getz(0)

0.0>>> print(polygon.exporttowkt())

linearring (-69.882232999999999 12.41111,-69.946944999999999 12.436666,

...12.411664999999999,-69.882232999999999 12.41111)

三維gis 開源軟體有哪些 與GIS相關開源軟體

與gis相關開源軟體問題概述 因為各種原因,arcgis oracle等商業軟體無法使用,可以選用開源軟體,如udig與postgis geoserver tomcat openlayers組合實現webgis服務。1.gis桌面軟體 進行空間資料採集 處理 分析等的gis桌面軟體 udig qgi...

python爬蟲我要個性網,獲取頭像

python爬蟲學習 提前宣告 請勿他用,僅限個人學習 運用模組有 import requests import re import os 較為常規,適合網路小白。lxml和bs4也是基礎。長話短說。headers link 編寫請求頭資訊 編寫請求頭,和要獲取的 link,一般常用url,只是乙個...

破題 基於python的gis開發與應用

這是我的畢業設計題目。題目名稱是 基於python的gis開發與應用 本人的專業是資訊管理與資訊系統,我所學的課跟地理一點關係也沒有 學校裡有gis的選修課,但我沒有選,所以在寫畢設時我一直很後悔 因此我一開始寫就一籌莫展。我當時選擇這個題目完全是被python這個該死的迷人小壞蛋給迷了眼,忽視了後...