GDAL讀寫向量檔案 C

2021-06-13 20:12:55 字數 4044 閱讀 9512

在c#中使用ogr讀寫向量資料時,需要引用「using osgeo.ogr;」。同時為了處理中文路徑和中文字段,需要在開始設定下面兩個屬性,**如下:

//為了支援中文路徑,請新增下面這句**(大多數情況下不需要這句)

"gdal_filename_is_utf8","no");

//為了使屬性表字段支援中文,請新增下面這句

osgeo.gdal.gdal.setconfigoption("shape_encoding","");

1.讀取向量

讀取向量**如下,處理的結果如圖1所示。設定了按屬性過濾後處理結果如圖2所示。

static void readvectorfile()

】失敗!", strvectorfile );

return;

}console.writeline( "開啟檔案【】成功!", strvectorfile );

// 獲取該資料來源中的圖層個數,一般shp資料圖層只有乙個,如果是mdb、dxf等圖層就會有多個

int ilayercount = ds.getlayercount();

// 獲取第乙個圖層

layer olayer = ds.getlayerbyindex( 0 );

if( olayer == null )

個圖層失敗!\n", 0 );

return;

}// 對圖層進行初始化,如果對圖層進行了過濾操作,執行這句後,之前的過濾全部清空

olayer.resetreading();

// 通過屬性表的sql語句對圖層中的要素進行篩選,這部分詳細參考sql查詢章節內容

olayer.setattributefilter("\"name99\"like \"北京市市轄區\"");

// 通過指定的幾何物件對圖層中的要素進行篩選

// 通過指定的四至範圍對圖層中的要素進行篩選

// 獲取圖層中的屬性表表頭並輸出

console.writeline( "屬性表結構資訊:");

tu圖1 ogr庫使用c#讀取向量示例1

圖2 ogr庫使用c#讀取向量示例2

2.寫入向量

在使用c#建立向量圖形的時候,使用的wkt格式的字串來進行建立。也可以使用其他的方式進行建立。**如下,寫出來的向量圖形和屬性表如圖3所示。

static void writevectorfile()

// 建立資料來源

datasource ods =odriver.createdatasource(strvectorfile, null);

if (ods == null)

// 建立圖層,建立乙個多邊形圖層,這裡沒有指定空間參考,如果需要的話,需要在這裡進行指定

layer olayer =ods.createlayer("testpolygon", null, wkbgeometrytype.wkbpolygon,null);

if (olayer == null)

// 下面建立屬性表

// 先建立乙個叫fieldid的整型屬性

fielddefn ofieldid = newfielddefn("fieldid", fieldtype.oftinteger);

olayer.createfield(ofieldid, 1);

// 再建立乙個叫featurename的字元型屬性,字元長度為50

fielddefn ofieldname = newfielddefn("fieldname", fieldtype.oftstring);

ofieldname.setwidth(100);

olayer.createfield(ofieldname, 1);

featuredefn odefn =olayer.getlayerdefn();

// 建立三角形要素

feature ofeature******** = newfeature(odefn);

ofeature********.setfield(0, 0);

ofeature********.setfield(1, "三角形");

geometry geom******** =geometry.createfromwkt("polygon ((0 0,20 0,10 15,0 0))");

ofeature********.setgeometry(geom********);

olayer.createfeature(ofeature********);

// 建立矩形要素

feature ofeaturerectangle = newfeature(odefn);

ofeaturerectangle.setfield(0, 1);

ofeaturerectangle.setfield(1, "矩形");

geometry geomrectangle =geometry.createfromwkt("polygon ((30 0,60 0,60 30,30 30,30 0))");

ofeaturerectangle.setgeometry(geomrectangle);

olayer.createfeature(ofeaturerectangle);

// 建立五角形要素

feature ofeaturepentagon = newfeature(odefn);

ofeaturepentagon.setfield(0, 2);

ofeaturepentagon.setfield(1, "五角形");

geometry geompentagon =geometry.createfromwkt("polygon ((70 0,85 0,90 15,80 30,65 15,700))");

ofeaturepentagon.setgeometry(geompentagon);

olayer.createfeature(ofeaturepentagon);

console.writeline("\n資料集建立完成!\n");

圖3 寫入的向量圖形

3.向量資料管理

static void vectordelete(string strvectorfile)

odriver = ods.getdriver();

if (odriver == null)

}if(odriver.deletedatasource(strvectorfile) == ogr.ogrerr_none)

return;

else

file.delete(strvectorfile); ;}

staticvoid vectorrename(string stroldfile, string strnewfile)

odriver = ods.getdriver();

if (odriver == null)

datasource odds =odriver.copydatasource(ods, strnewfile, null);

if (odds == null)

}if (odriver.deletedatasource(stroldfile)== ogr.ogrerr_none)

return;

else

file.move(stroldfile,strnewfile);

}

GDAL向量轉柵格

gdal版本1.8.0.首先嘗試使用gdal rasterize小工具,但是不支援新生成輸出柵格檔案。官方說1.8版本後已經支援。但仍然無效。柵格的元資料賦值和仿射變換以後需要進一步研究。實現 include stdafx.h include include gdal priv.h include ...

GDAL對向量檔案刪除操作後的問題

個人筆記,僅供參考。gdal對shp檔案的操作後,比如刪除某條記錄,並增加一些新的記錄,儲存之後,再開啟shp,發現刪除的記錄還在,但是dbf檔案中卻已經找不到記錄了,這時候需要在關閉資料集前進行一項操作,ogrdatasource pods ogrdatasource pods polayer s...

Java 使用GDAL 讀寫 shapefile

import org.gdal.ogr.import org.gdal.ogr.driver import org.gdal.gdal.public class gdalshptest system.out.println 開啟檔案成功!driver dv ogr.getdriverbyname g...