在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...