在C#中调用开源GIS类库GDAL/OGR库创建与写Shapefile

在C#中调用开源GIS类库GDAL/OGR库创建与写Shapefile


发布日期: 2015-04-07 更新日期: 2016-12-08 编辑:xuzhiping 浏览次数: 9496

标签:

摘要: GDAL/OGR是非常著名的开源GIS库,GDAL是对栅格数据进行操作,而OGR是对矢量数据进行操作,它们相当于一个通用数据访问库。有好多成熟的GIS系统都用了此库,这其中也包括ESRI、FME。 GDAL/OGR也提供了对.NET的编译支持,具体的编译与使用...

GDAL/OGR是非常著名的开源GIS库,GDAL是对栅格数据进行操作,而OGR是对矢量数据进行操作,它们相当于一个通用数据访问库。有好多成熟的GIS系统都用了此库,这其中也包括ESRI、FME。

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();  

关注公众号
获取免费资源

随机推荐
  • 压力单位换算方法
  • 地理目标数据的分层
  • 三角形的性质
  • putty中文乱码解决方法
  • 空间分析的概念剖析


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org