C#用GDAL/OGR库创建与写Shape文件(转载)

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

这里还没有涉及到定义投影坐标系的问题,后面将会继续完善起来。

转载自:http://www.cnblogs.com/webgis8/archive/2009/07/19/giswei.html

C#用GDAL/OGR库读取与写shape投影信息(转载)

 

 

今天花了一点点时间看了一下C#中OGR读取与写shape中的投影信息的方式.
读写矢量与属性信息见上一篇C#用GDAL/OGR库创建与写Shape文件,测试通过[原创]
具体过程为
//投影实验区
OSGeo.OSR.SpatialReference ss;
ss = orgLayer.GetSpatialRef();//orgLayer为OSGeo.OGR.layer类型实例
string ppss;
ss.ExportToWkt(out ppss);//将读取文件的shape投影信息输出到格式化字符串ppss
MessageBox.Show(ppss);
非常简单.
比如,输出的一个编码信息串为
GEOGCS["GCS_North_American_1927",DATUM["North_American_Datum_1927",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]]
这个串就是OGR里面标准的wkt串

然后往新生成的shape里写投影信息的过程也比较简单.
string strwkt = "GEOGCS[\"GCS_North_American_1927\",DATUM[\"North_American_Datum_1927\",SPHEROID[\"Clarke_1866\",6378206.4,294.9786982]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.0174532925199433]]";
注意字符串中双引号表示为\"
OSGeo.OSR.SpatialReference srs = new OSGeo.OSR.SpatialReference(strwkt);
//然后在创建Layer的函数中,第二个参数就是//OSGeo.OSR.SpatialReference
此时
poLayer = poDS.CreateLayer("layername1", srs, OSGeo.OGR.wkbGeometryType.wkbPoint, null);

 

 转载自:http://www.cnblogs.com/webgis8/archive/2009/08/05/1539305.html

 

 

OSGeo.OGR.Ogr.RegisterAll();为什么老执行不过去?报“OSGeo.OGR.Ogr”的类型初始值设定项引发异常这样的问题

 

这个问题是dll不全造成的,除了要引用的4个dll外,还有5个dll也要放到Debug目录下。
在编译C#下的gdal时,总共生成了9个dll,在编译的本机上,程序是通过环境变量path找到另外的几个dll的。
在没有编译过gdal的电脑上,反正就把这9个编译后的dll放到debug下面就一切Ok了

 

附GDAL的C#版类库下载GDAL类库C#版

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值