### 基于GDAL/OGR的Shape文件创建 #### GDAL/OGR简介 GDAL/OGR是一个非常著名的开源地理信息系统(GIS)库,广泛应用于地理空间数据处理领域。GDAL主要针对栅格数据(如遥感图像、地图等)进行读写、转换等操作;而OGR则专注于矢量数据(如点、线、面等几何对象)的操作。二者共同构成了一个强大的地理数据访问库,被广泛应用于各类GIS软件中,包括ESRI的产品线。 #### .NET支持 近年来,为了更好地适应不同开发环境的需求,GDAL/OGR也开始支持.NET平台。这意味着开发者可以利用C#等.NET语言来操作地理空间数据,这无疑极大地扩展了该库的应用范围。虽然官方文档中并未提供C#的示例代码,但由于GDAL/OGR在多种编程语言中有着一致的核心API设计,因此其他语言的示例代码往往也可以作为很好的参考。 #### C#示例代码详解 以下是对给定C#代码片段的详细解释: 1. **引入命名空间**: ```csharp // 注:这里省略了必要的命名空间引入 ``` 代码示例中未显示必要的命名空间引入语句,实际使用时需添加`using OSGeo.OGR;`等导入语句。 2. **注册所有驱动器**: ```csharp OSGeo.OGR.Ogr.RegisterAll(); ``` 这一行代码用于注册GDAL/OGR支持的所有数据格式驱动器,确保后续能够识别并操作特定的数据格式。 3. **获取Shapefile驱动器**: ```csharp string pszDriverName = "ESRIShapefile"; OSGeo.OGR.Driver poDriver = OSGeo.OGR.Ogr.GetDriverByName(pszDriverName); ``` 此处通过指定的名称获取到用于操作Shapefile格式文件的驱动器实例。 4. **创建数据源**: ```csharp OSGeo.OGR.DataSource poDS = poDriver.CreateDataSource("point_out.shp", null); ``` 使用获取到的驱动器实例创建一个新的数据源,这里的`"point_out.shp"`是指定的输出文件名。 5. **创建图层**: ```csharp OSGeo.OGR.Layer poLayer = poDS.CreateLayer("point_out", null, OSGeo.OGR.wkbGeometryType.wkbPoint, null); ``` 在数据源中创建一个新图层,图层名为`"point_out"`,并指定了图层中的几何类型为点(`wkbPoint`)。 6. **定义字段**: ```csharp 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); ``` 定义两个字段,一个是字符串类型,宽度为16个字符,另一个是整型,用于存储高度信息。然后将这两个字段添加到图层中。 7. **创建特征并添加点数据**: ```csharp for (int i = 100; i < 120; i++) { OSGeo.OGR.Feature poFeature = new Feature(poLayer.GetLayerDefn()); OSGeo.OGR.Geometry pt = new Geometry(OSGeo.OGR.wkbGeometryType.wkbPoint); poFeature.SetField(0, "point" + i.ToString()); poFeature.SetField(1, i); pt.AddPoint(i, i, 0); poFeature.SetGeometry(pt); poLayer.CreateFeature(poFeature); } ``` 循环创建多个特征(Feature),每个特征包含一个点几何对象,并设置相应的字段值。每个点的位置由坐标`(i, i, 0)`确定,特征数据被添加到图层中。 8. **释放资源**: ```csharp poFeature.Dispose(); poDS.Dispose(); ``` 处理完数据后,记得释放创建的特征和数据源对象,以避免内存泄漏。 #### 总结 以上代码展示了如何使用C#结合GDAL/OGR库创建一个包含点数据的Shapefile文件的基本流程。通过这种方式,开发者可以轻松地将地理空间数据整合到.NET应用程序中,实现更复杂的空间分析功能。对于初学者来说,掌握这些基本操作是理解和应用GDAL/OGR的重要第一步。
现在,GDAL/OGR也提供了对.NET的编译支持,具体的编译与使用过程大家GOOGLE一下,网上资料非常详尽。其官网上有一些C,C++,Python的示例代码。 但没有C#的示例代码,但程序之间大同小异,下面我试的一个C#创建Shape文件,并往其中添加Point的示例代码,希望对各位有用。
1 //注册Ogr库
2 string pszDriverName = "ESRI Shapefile";
3 OSGeo.OGR.Ogr.RegisterAll();
4
5 //调用对Shape文件读写的Driver接口
6 OSGeo.OGR.Driver poDriver = OSGeo.OGR.Ogr.GetDriverByName(pszDriverName);
7 if (poDriver == null)
8 MessageBox.Show("Driver Error");
9
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
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 //创建属性列两列
- xiqiusha2013-01-19不错,适合初学者
- sunshine3202011-10-14真差劲,以为是源代码呢,其它就是从网页上搞的
- piqi88562011-09-25可惜了是C#的,不知道E00和tab格式的数据可以读取不~~~~~~~~
- chy19792012-03-25一个TXT文件,如何用C#创建Shape文件,并往其中添加Point的示例代码,代码只有48行,可参考。
- BG1QQC2014-05-26非常感谢,好不容易找到了
- 粉丝: 2
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助