在開發中使用GDAL讀取空間資料的使用心得一

2021-07-11 08:59:41 字數 1931 閱讀 7156

今天不知道怎麼的,有點不想寫**,可能是這幾天寫多,寫傷著了吧.既然這樣那就寫寫最近的一些心得吧 

最近在我做空間資料共享這方面的,所以要讀取一些空間資料,比如shapefile ,mif 之類的.這些空間資料的儲存格式不是很複雜,但是完全讀取還是有一點麻煩,特別是要

將幾何資料與屬性資料整合到一塊,更有點難.從網上了解到使用gdal類庫讀取空間資料很方便,所以就研究了一下,下面就與大家一起分享一下.

要用gdal類庫必須有這些相應的動態鏈結庫(如下圖),網上有一些資料,但是純文字的的,今天我得搞**形式,這樣才更生動

必須把這上面的十個.dll檔案放到專案檔案的debug 或者release 路徑下,另外還得將上面的畫了紅色圓圈的五個dll 通過"引用" 新增到工程檔案中

這些環境配好之後,開始進入**階段

首先要新增如下三個命名空間

using osgeo.ogr;

using osgeo.gdal;

using osgeo.osr;

初始化類庫gdal ,進行註冊

string pszdrivername = "esri shapefile";

osgeo.ogr.ogr.registerall();

//呼叫對shape檔案讀寫的driver介面

osgeo.ogr.driver podriver = osgeo.ogr.ogr.getdriverbyname(pszdrivername);

if (podriver == null)

messagebox.show("driver error");

esri shapefile 代表的是shapefile 的格式   而mapinfo file 則代表的是mif 格式的 

接下來,就正式開始讀取裡面的內容

osgeo.ogr.datasource pods;

pods = podriver.open(@"c:\documents and settings\administrator\桌面\mif檔案\bou1_4_line.mif", 0);

if (pods == null)

int layercount = pods.getlayercount(); //表示有多少個圖層  一般的只有乙個 (乙個圖層包括很多特徵物)

osgeo.ogr.layer layer = pods.getlayerbyindex(0);

string layername = layer.getname(); //得到圖層名稱

下面的就比較重要了,開始讀取圖層裡的每個特徵物的資訊了

osgeo.ogr.feature feature;

int ifield;

while ((feature = layer.getnextfeature()) != null)//不斷地迴圈遍歷每個特徵點

//提取出每個特徵點所對應的幾何資料

osgeo.ogr.geometry geometry = feature.getgeometryref();

osgeo.ogr.wkbgeometrytype goetype = geometry.getgeometrytype();

// messagebox.show(goetype.tostring());

if (geometry!= null &&goetype == wkbgeometrytype.wkbpoint)

///如果是線

if (goetype == osgeo.ogr.wkbgeometrytype.wkblinestring)

}//如果是面

if (goetype == osgeo.ogr.wkbgeometrytype.wkbpolygon)

}text = text + environment.newline;

}this.richtextbox1.text = text;

上面的每一樣都測試成功過,屬性資訊與幾何資訊都可以解析出來.

在iOS開發中使用FMDB

sqlite 是乙個輕量級的關聯式資料庫。ios sdk很早就支援了sqlite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔案即可。但是,原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,開源社群中就出現了一系列將sqlit...

在iOS開發中使用FMDB

sqlite 是乙個輕量級的關聯式資料庫。ios sdk很早就支援了sqlite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔案即可。但是,原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,開源社群中就出現了一系列將sqlit...

在iOS開發中使用FMDB

sqlite 是乙個輕量級的關聯式資料庫。ios sdk很早就支援了sqlite,在使用時,只需要加入 libsqlite3.dylib 依賴以及引入 sqlite3.h 標頭檔案即可。但是,原生的sqlite api在使用上相當不友好,在使用時,非常不便。於是,開源社群中就出現了一系列將sqlit...