C#用GDAL/OGR库创建与写Shape文件

来源:互联网 发布:nodejs读取json文件 编辑:程序博客网 时间:2024/05/21 19:46

GDAL/OGR是非常著名的开源GIS库,GDAL是对栅格数据进行操作,而OGR是对矢量数据进行操作,它们相当于一个通用数据访问库。甚至ESRI的产品中都用了此库。

现在,GDAL/OGR也提供了对.NET的编译支持,具体的编译与使用过程大家GOOGLE一下,网上资料非常详尽。其官网上有一些C,C++,Python的示例代码。 但没有C#的示例代码,但程序之间大同小异,下面我试的一个C#创建Shape文件,并往其中添加Point的示例代码,希望对各位有用。

//注册Ogr库           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");         //用此Driver创建Shape文件           OSGeo.OGR.DataSource poDS;           poDS = poDriver.CreateDataSource("point_out.shp", null);           if (poDS == null)               MessageBox.Show("DataSource Creation Error");           //创建层Layer           OSGeo.OGR.Layer poLayer;           poLayer = poDS.CreateLayer("point_out", null, OSGeo.OGR.wkbGeometryType.wkbPoint, null);           if (poLayer == null)               MessageBox.Show("Layer Creation Failed");                      //创建属性列两列           OSGeo.OGR.FieldDefn oField = new OSGeo.OGR.FieldDefn("名称", OSGeo.OGR.FieldType.OFTString);           oField.SetWidth(16);           OSGeo.OGR.FieldDefn oField2 = new OSGeo.OGR.FieldDefn("高度", OSGeo.OGR.FieldType.OFTInteger);                       poLayer.CreateField(oField, 1);           poLayer.CreateField(oField2, 0);          //创建一个Feature,一个Point           OSGeo.OGR.Feature poFeature = new Feature(poLayer.GetLayerDefn());           OSGeo.OGR.Geometry pt = new Geometry(OSGeo.OGR.wkbGeometryType.wkbPoint);           //往创建的Shape中写入二十个点,           for (int i = 100; i < 120; i++)           {               //属性一"名称"赋值               poFeature.SetField(0, "point"+i.ToString());               //属性二"高度"赋值               poFeature.SetField(1, i);               //添加坐标点               pt.AddPoint(i, i, 0);               poFeature.SetGeometry(pt);               //将带有坐标及属性的Feature要素点写入Layer中               poLayer.CreateFeature(poFeature);           }           //关闭文件读写           poFeature.Dispose();           poDS.Dispose();


原创粉丝点击