cl991036
管理员
管理员
  • 注册日期2003-07-25
  • 发帖数5913
  • QQ14265545
  • 铜币29655枚
  • 威望213点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • GIS帝国铁杆
阅读:2998回复:2

C#用GDAL/OGR库创建与写Shape文件

楼主#
更多 发布于:2009-07-20 15:53
GDAL/OGR是非常著名的开源GIS库,GDAL是对栅格数据进行操作,而OGR是对矢量数据进行操作,它们相当于一个通用数据访问库。甚至ESRI的产品中都用了此库。<br><br>现在,GDAL/OGR也提供了对.NET的编译支持,具体的编译与使用过程大家GOOGLE一下,网上资料非常详尽。其官网上有一些 C,C++,Python的示例代码。但没有C#的示例代码,但程序之间大同小异,下面我试的一个C#创建Shape文件,并往其中添加Point的示例代码,希望对各位有用。<br><br> <br> 1            //注册Ogr库<br> 2            string pszDriverName = "ESRI Shapefile";<br> 3            OSGeo.OGR.Ogr.RegisterAll();<br> 4<br> 5            //调用对Shape文件读写的Driver接口<br> 6            OSGeo.OGR.Driver poDriver = OSGeo.OGR.Ogr.GetDriverByName(pszDriverName);<br> 7            if (poDriver == null)<br> 8                MessageBox.Show("Driver Error");<br> 9<br>10           //用此Driver创建Shape文件<br>11            OSGeo.OGR.DataSource poDS;<br>12            poDS = poDriver.CreateDataSource("point_out.shp", null);<br>13            if (poDS == null)<br>14                MessageBox.Show("DataSource Creation Error");<br>15<br>16            //创建层Layer<br>17            OSGeo.OGR.Layer poLayer;<br>18            poLayer = poDS.CreateLayer("point_out", null, OSGeo.OGR.wkbGeometryType.wkbPoint, null);<br>19            if (poLayer == null)<br>20                MessageBox.Show("Layer Creation Failed");<br>21            <br>22            //创建属性列两列<br>23            OSGeo.OGR.FieldDefn oField = new OSGeo.OGR.FieldDefn("名称", OSGeo.OGR.FieldType.OFTString);<br>24            oField.SetWidth(16);<br>25            OSGeo.OGR.FieldDefn oField2 = new OSGeo.OGR.FieldDefn("高度", OSGeo.OGR.FieldType.OFTInteger);            <br>26            poLayer.CreateField(oField, 1);<br>27            poLayer.CreateField(oField2, 0);<br>28<br>29            //创建一个Feature,一个Point<br>30            OSGeo.OGR.Feature poFeature = new Feature(poLayer.GetLayerDefn());<br>31            OSGeo.OGR.Geometry pt = new Geometry(OSGeo.OGR.wkbGeometryType.wkbPoint);<br>32            //往创建的Shape中写入二十个点,<br>33            for (int i = 100; i < 120; i++)<br>34            {<br>35                //属性一"名称"赋值<br>36                poFeature.SetField(0, "point"+i.ToString());<br>37                //属性二"高度"赋值<br>38                poFeature.SetField(1, i);<br>39                //添加坐标点<br>40                pt.AddPoint(i, i, 0);<br>41                poFeature.SetGeometry(pt);<br>42                //将带有坐标及属性的Feature要素点写入Layer中<br>43                poLayer.CreateFeature(poFeature);<br>44            }<br>45<br>46            //关闭文件读写<br>47            poFeature.Dispose();<br>48            poDS.Dispose();<br>
喜欢0 评分0
没钱又丑,农村户口。头可断,发型一定不能乱。 邮箱:gisempire@qq.com
ty0616
路人甲
路人甲
  • 注册日期2009-08-24
  • 发帖数2
  • QQ
  • 铜币111枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2010-01-08 09:32
<P>谢谢楼主分享~~</P>
<P>请问楼主能传一下已经编译好的gdal文件吗 我的总是装不上,生成不了dll文件……</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15946
  • QQ554730525
  • 铜币25338枚
  • 威望15363点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2010-01-11 11:58
回复:(ty0616)谢谢楼主分享~~请问楼主能传一下已...
<P>到这里下吧</P>
<P><a href="http://vbkto.dyndns.org/sdk/" target="_blank" >http://vbkto.dyndns.org/sdk/</A></P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部