C#用GDAL/OGR库创建与写Shape文件,测试通过[原创]
2009年7月19日 周日11:24
GDAL/OGR是非常著名的开源GIS库,GDAL是对栅格数据进行操作,而OGR是对矢量数据进行操作,它们相当于一个通用数据访问库。甚至ESRI的产品中都用了此库。
现在,GDAL/OGR也提供了对.NET的编译支持,具体的编译与使用过程大家GOOGLE一下,网上资料非常详尽。其官网上有一些C,C++,Python的示例代码。 但没有C#的示例代码,但程序之间大同小异,下面我试的一个C#创建Shape文件,并往其中添加Point的示例代码,希望对各位有用。
1
//注册Ogr库
2
string pszDriverName = "ESRI Shapefile";
3
OSGeo.OGR.Ogr.RegisterAll();
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
//调用对Shape文件读写的Driver接口
6
OSGeo.OGR.Driver poDriver = OSGeo.OGR.Ogr.GetDriverByName(pszDriverName);
7
if (poDriver == null)
8
MessageBox.Show("Driver Error");
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
//用此Driver创建Shape文件
11
OSGeo.OGR.DataSource poDS;
12
poDS = poDriver.CreateDataSource("point_out.shp", null);
13
if (poDS == null)
14
MessageBox.Show("DataSource Creation Error");
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
//创建层Layer
17
OSGeo.OGR.Layer poLayer;
18
poLayer = poDS.CreateLayer("point_out", null, OSGeo.OGR.wkbGeometryType.wkbPoint, null);
19
if (poLayer == null)
20
MessageBox.Show("Layer Creation Failed");
21
22
//创建属性列两列
23
OSGeo.OGR.FieldDefn oField = new OSGeo.OGR.FieldDefn("名称", OSGeo.OGR.FieldType.OFTString);
24
oField.SetWidth(16);
25
OSGeo.OGR.FieldDefn oField2 = new OSGeo.OGR.FieldDefn("高度", OSGeo.OGR.FieldType.OFTInteger);
26
poLayer.CreateField(oField, 1);
27
poLayer.CreateField(oField2, 0);
28![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
//创建一个Feature,一个Point
30
OSGeo.OGR.Feature poFeature = new Feature(poLayer.GetLayerDefn());
31
OSGeo.OGR.Geometry pt = new Geometry(OSGeo.OGR.wkbGeometryType.wkbPoint);
32
//往创建的Shape中写入二十个点,
33
for (int i = 100; i < 120; i++)
34
{
35
//属性一"名称"赋值
36
poFeature.SetField(0, "point"+i.ToString());
37
//属性二"高度"赋值
38
poFeature.SetField(1, i);
39
//添加坐标点
40
pt.AddPoint(i, i, 0);
41
poFeature.SetGeometry(pt);
42
//将带有坐标及属性的Feature要素点写入Layer中
43
poLayer.CreateFeature(poFeature);
44
}
45![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
//关闭文件读写
47
poFeature.Dispose();
48
poDS.Dispose();
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
这里还没有涉及到定义投影坐标系的问题,后面将会继续完善起来。
此文链接:http://www.cnblogs.com/webgis8/archive/2009/07/19/1526425.html
From:giswei之修道院