為什麼要用open source?
優點
1. 免費,適合個人與小型公司
2. 強大的發展工具,且尋找使用平台, 拉風!
缺點
1. 沒有內嵌式地理處理器
2. 使用的人少
向量
2. GDAL地理空間資料抽象化庫:
a) 讀寫柵格資料
b) python呼叫
相關模組
1. Numeric:高速的陣列處理,對柵格資料特別重要
2. NumPy:新一代的Numeric
3.
或:
from osgeo import ogr
萬能的方法是:
try:
from osgeo import ogr
資料驅動,也就是初始化一個對象,讓它「知道」某種資料結構。
import ogr
driver = ogr.GetDriverByName('ESRI Shapefile')
資料驅動driver的open()方法傳回一個資料來源物件
open(
, )其中為其中0update>是唯讀,為1是可寫例如:from osgeo import ogrdriver = ogr.GetDriverByName('ESRI Shapefile')filename = 'C:/Users/gongs/Bookage /GDAL python/test/ospy_data1/sites.shp'dataSource = driver.Open(filename,0)if dataSource is None: print 'c not sys'c1 % 'done!'注意filename一定要寫絕對路徑! 因為一定要用絕對路徑,為了簡化程式碼,常常會使用到os.chdir()讀取資料層layer = dataSource.GetLayer(0)一般ESRI的shapefile都是填0的,如果不填的話預設也是0.再看看這個資料層裡面有幾個點呢? n = layer.GetFeatureCount()print 'feature count:', n讀出上下左右邊界extent = layer.GetExtent():
printextent = layer.GetExtent()
:print
extent, extent'sed ', extent[0], extent[3]print 'lr:', extent[1], extent[2]讀取某一要素feature(總算切入正題了),這裡讀取的是一個點feat = layer.GetFeature(41)fid = feat.GetField('id')print fidfeat = layer.GetFeature(0)print fid
feat = layer.GetFeature(0)
; be a different idprint fid另外還有依序讀取feature,循環遍歷所有的featurefeat = layer.GetNextFeature() #讀下一個while feat:a. ()
later.ResetReading() #復位
提取feature的幾何形狀
geom = feat.GetGeometryRef()
geom.GetX()
ge
feature.Destroy()
關閉資料來源,相當於檔案系統操作中的關閉檔案
dataSource.Destroy()
讀完了再說怎麼寫
)但是這個檔案不能已經存在了,否則會出錯建立新的layerdataSource.CreateLayer(,CreateLayer(, geom_type=, [srs])🜎範例:ds2 = driver.CreateDataSource('test.shp')layer2 = ds2.CreateLayer('test', geom_type=ogr.wkbPoint)要刪除一個shtest) 檔案shp')要新增一個字段,只能在layer裡面加,而且還不能有資料新增的字段如果是字串,還要設定寬度fieldDefn = ogr.FieldDefn('id', ogr.OFTString)fieldDefn.SetWidth(4)layer.CreateField(fieldDefn)加入一個新的feature,首先得完成上一步,把欄位都加入齊了然後從layer中讀取的feature類型,並建立featurefeatureDefn = layer.GetLayerDefn()feature = ogr.Feature(featureDefn)設定幾何形狀feature.SetGeometry() feature.SetField('id', 23)將feature寫入layerlayer.CreateFeature(feature)
以上就是python gdal教學之:用ogr讀寫向量資料的內容,更多相關內容請關注PHP中文網(www.php.cn)!