站在巨人的肩上

Standing on Shoulders of Giants
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

使用GDAL中的OGR进行空间数据格式转换

Posted on 2010-04-12 21:32  姚箫  阅读(1413)  评论(0)    收藏  举报

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

    现在,GDAL/OGR也提供了对.NET的编译支持,具体的编译与使用过程大家GOOGLE一下,网上资料非常详尽。其官网上有一些C,C++,Python的示例代码。 但没有C#的示例代码,但程序之间大同小异。

代码
 1 public void Convert(string source, string dest)
 2 {
 3     Ogr.RegisterAll();
 4     DataSource sourceSource = Ogr.Open(source, 0);
 5     OSGeo.OGR.Driver shpDriver = Ogr.GetDriverByName("ESRI Shapefile"); //MapInfo File、ESRI Shapefile
 6     DataSource destSource = shpDriver.CreateDataSource(dest, new string[] { });
 7     int layerCount = sourceSource.GetLayerCount();
 8     for (int i = 0; i < layerCount; i++)
 9     {
10         Layer layer = sourceSource.GetLayerByIndex(i);
11         int featureCount = layer.GetFeatureCount(0);
12         Layer destLayer = null;
13         for (int j = 0; j < featureCount; j++)
14         {
15             Feature feature = layer.GetFeature(j);
16             if (feature != null)
17             {
18                 try
19                 {
20                     wkbGeometryType geoType = feature.GetGeometryRef().GetGeometryType();
21                     if (destLayer == null)
22                     {
23                         //创建图层
24                         destLayer = destSource.CreateLayer(
25                             layer.GetName(),
26                             layer.GetSpatialRef(),
27                             geoType,
28                             new string[] { });
29                         //创建字段
30                         FeatureDefn featureDefn = layer.GetLayerDefn();
31                         for (int k = 0; k < featureDefn.GetFieldCount(); k++)
32                         {
33                             destLayer.CreateField(featureDefn.GetFieldDefn(k), 0);
34                         }
35                     }
36                     //写入要素
37                     Feature cloneFeature = feature.Clone();
38                     destLayer.CreateFeature(cloneFeature);
39                     this.OnFeatureConvert(featureCount, EventArgs.Empty);
40                 }
41                 catch (Exception ex)
42                 {
43                     Debug.WriteLine(ex.Message);
44                     continue;
45                 }
46             }
47         }
48         destLayer.SyncToDisk();
49     }
50     sourceSource.Dispose();
51     destSource.Dispose();
52     shpDriver.Dispose();
53 }

 

 源码下载:http://download.csdn.net/source/1939027