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 }
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 }

浙公网安备 33010602011771号