gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:2694回复:2

[转帖]利用开源软件提高自己的GIS编程能力

楼主#
更多 发布于:2012-10-19 10:22
<font size="4">    本文主要介绍一些开源的GIS开发库和工具,如果大家在生产研究中需要进行相应的处理,使用这些开发库和工具可以节省许多时间和经历。同时,在研究的过程中使用这些“底层”的工具,可以加深大家对基本原理和理论的认识。

</font><p><font size="4">      <strong><span class="Apple-converted-space"> </span>本文不是“死”的,我将会一直维护和更新本文。</strong> </font></p><font size="4">
</font><p><font size="4">       现在,就让我们开始吧。 </font></p><a name="t0"></a><font size="4"><strong>一、我的GIS经历</strong>
</font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>       首先,吐槽下我的GIS经历吧。</span>
</font></p><font size="4">
</font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>       本科阶段,还是测绘工程专业的。大部分课都是跟着地理信息系统专业的同学一起上。在老师朦胧的介绍中,我们当时粗浅的理解就是:测绘做外业,GIS做内业。</span>
</font></p><font size="4">
</font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>       考上研究生后,专业转成了地图学与地理信息系统。做了一些项目,如地名地址、还有最近的两权发证,都与要使用到ArcGIS。不光在生产中需要用到ArcGIS。另外在研究当中,也使用ArcGIS作为研究工具。比如前一阵子,来我校举行讲座的萧世伦(Shih-Lung Shaw)教授就是用ArcGIS作为其研究工具(这么说好像有点。。。哪个从事GIS研究的不用ArcGIS啊。)</span>
</font></p><font size="4">
</font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>       的确,谈到GIS就不能不说ESRI,ESRI的影响力之大,以致有人称呼ESRI为GIS界的微软。</span>
</font></p><font size="4">
</font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>       聚会时,有高中同学问GIS是做什么的。我反问了他们:在你们眼里GIS是做什么的?得到的答案有许多,其中最有喜感的是一个女同学的答案,<strong>她说GIS和PS差不多</strong>。。。因为在她眼里,我们也是对着电脑处理一些“照片”。</span>
</font></p><a name="t1"></a><font size="4">二、GIS编程实现
</font><p><font size="4">       在平时我们都是用专业的应用软件来处理相关数据,如ArcGIS等。同时有时候也会通过Arc Engine,使用C#等语言进行二次开发。以定制开发适合自身需要的工具。关于ArcGIS的使用,以及二次开发,网上的资料很多。而这篇文章的侧重点提高自身的GIS编程能力,所以这里介绍一些如何使用一些开源软件和工具来处理GIS数据。使用开源软件的好处之一就是您可以在使用的过程中,遇到不明白的地方,去查看源代码,观察这个软件包的对某个问题的处理方式和实现办法。
</font></p><font size="4">
</font><p><font size="4">      
下面将要介绍一些GIS开发中可以使用到的开源软件和工具,通过这些工具的使用,大家可以了解在GIS数据在“底层”处理的一些简单的认识。当然,这里的底层和计算机上常说的底层是不同的。希望通过介绍这些工具的使用,来达到抛砖引玉的作用。让大家能学习到更多的知识。
</font></p><font size="4">
</font><p><font size="4">       GIS数据的处理,概括来说,有读取/输出、处理、显示三大步骤。不过在下面将要介绍的工具和库中,每个库的作用并不是单一的。比如有的库可以读取/输出,也可以进行部分的处理工作;有些库可以进行显示和渲染,但也可以进行一部分处理工作。下面就通过对shapefile的处理来分别简要介绍这些库。
</font></p><font size="4">
</font><p><font size="4">       GIS相关的许多工作,其实都是对shapefile进行处理。除了使用专业的工具之外,我们还可以使用一些开源的工具和编程语言,从底层进行开发和使用。
</font></p><font size="4">
</font><p><font size="4">       如果想从底层开发一个GIS数据处理工具,并且能够自由分发的。可以尝试使用GDAL/ORG、GEOS等工具。 </font></p><a name="t2"></a><font size="4"><span style="'font-family:" "Microsoft YaHei";'>1、GIS开发的语言</span>
</font><p><font size="4">       编程语言数目繁多,有专攻科学计算的<span style="'font-family:" "Times New="New"  Roman";'>Matlab</span><span style="font-family: 宋体;">;有系统开发语言</span><span style="'font-family:" "Times New="New"  Roman";'>C/C++</span><span style="font-family: 宋体;">;还有人工智能方向的</span><span style="'font-family:" "Times New="New"  Roman";'>Prolog</span><span style="font-family: 宋体;">等。(这里只是说明下,并不是说这些语言只能做这方面的工作)</span> </font></p><font size="4">
</font><p><font size="4">       考虑到<span style="'font-family:" "Times New="New"  Roman";'>GIS</span><span style="font-family: 宋体;">专业,与计算机专业还是有一定区别的。那么从学习成本,以及开发效率上来说,对于</span><span style="'font-family:" "Times New="New"  Roman";'>GIS</span><span style="font-family: 宋体;">的开发人员,还是比较推荐</span><span style="'font-family:" "Times New="New"  Roman";'>Python</span><span style="font-family: 宋体;">的。</span><span style="'font-family:" "Times New="New"  Roman";'>Python</span><span style="font-family: 宋体;">是一本简洁易用的语言。</span><span style="'font-family:" "Times New="New"  Roman";'>ArcGIS</span><span style="font-family: 宋体;">也选用其作为内嵌语言之一。关于</span><span style="'font-family:" "Times New="New"  Roman";'>Python</span><span style="font-family: 宋体;">的优势,有许多许多,将其作为非企业级的</span><span style="'font-family:" "Times New="New"  Roman";'>GIS</span><span style="font-family: 宋体;">软件的开发语言,还是比较合适的。</span> </font></p><font size="4">
</font><p><font size="4">       您可以使用本文介绍的<span style="'font-family:" "Times New="New"  Roman";'>Python</span><span style="font-family: 宋体;">作为工具,其他开源库作为材料,搭建自己的研究</span><span style="'font-family:" "Times New="New"  Roman";'>/</span><span style="font-family: 宋体;">实验性的程序软件。</span> </font></p><font size="4">
</font><p><span style="font-family: 宋体;"><font size="4"><strong><span style="font-size: 18px;">更新,关于Python与GIS的使用,有一定英文基础的朋友可以去参考下犹他州立大学的教程和资料,见参考文献4</span></strong>。<br/></font></span></p><a name="t3"></a><font size="4">2、shapefile的读取
</font><p><font size="4">       可以通过GDAL/ORG<span style="font-family: 宋体;">库来进行</span><span style="'font-family:" "Times New="New"  Roman";'>GIS</span><span style="font-family: 宋体;">数据的读取和写入。</span> </font></p><font size="4">
</font><p><font size="4">       GDAL(Geospatial Data Abstraction Library)<span style="font-family: 宋体;">是</span>一个的开源栅格空间数据读取/转换库。其中还有一系列命令行工具来进行数据转换和处理。 (关于<span style="'font-family:" "Times New="New"  Roman";'>GDAL</span><span style="font-family: 宋体;">,李民录老师在</span><span style="'font-family:" "Times New="New"  Roman";'>CSDN</span><span style="font-family: 宋体;">的博客上有详细的介绍,大家可以去参考学习下,见</span>参考文献<span style="'font-family:" "Times New="New"  Roman";'>1</span>。) </font></p><font size="4">
</font><p><font size="4">       而ORG<span style="font-family: 宋体;">项目是</span><span style="'font-family:" "Times New="New"  Roman";'>GDAL</span><span style="font-family: 宋体;">的一个分支,</span>功能与<span style="'font-family:" "Times New="New"  Roman";'>GDAL</span><span style="font-family: 宋体;">类似,</span>但其提供对矢量数据的支持。 也就是说,可以用ORG<span style="font-family: 宋体;">的库来读取、处理</span><span style="'font-family:" "Times New="New"  Roman";'>shapefile</span><span style="font-family: 宋体;">等矢量数据(如果想显示</span><span style="'font-family:" "Times New="New"  Roman";'>shapefile</span><span style="font-family: 宋体;">,还需要用其他工具)。</span> </font></p>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2012-10-19 10:22
<p><font size="4"><strong>注:版权问题</strong> </font></p><font size="4"></font><p><font size="4"><span style="font-family: KaiTi_GB2312;">软件的使用,最重要的一点是版权。GDAL/OGR实在MIT许可证下发布的。如果您不太了解开源软件的各个许可证,这里也没关系。MIT许可证是最宽松的。如果您的软件修改自<span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">GDAL/ORG,或者在您的软件中包含调用了GDAL/ORG工具,</span>您都对您的<span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">软件进行任何处理,包括出售。只需</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">在</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">您的</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">软件</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">及其</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">所有副本中必须包含版权声明和许可声明</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">即可</span><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">。</span></span></font></p><font size="4"></font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>       关于OGR的安装配置,其与GDAL是同一个软件包,所以安装GDAL后,ORG也安装了。</span></font></p><font size="4"></font><p><span style="'font-family:" "Microsoft YaHei";'><font size="4"><span class="Apple-converted-space"> </span><span style="color: rgb(0, 0, 153);"><strong>更新</strong></span>,</font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://blog.csdn.net/sunny2038/article/details/8018965"><font size="4">GDAL/ORG之Python获取与安装</font></a><font size="4">。<br/></font></span></p><font size="4"></font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>       而关于OGR的详细的使用,由于最近的研究需要使用到,所以有机会我新开一篇或多篇文章来详细介绍。限于篇幅,这里就简要说明下,如果大家有兴趣,可以看下参考文献2和参考文献3。其中参考文献2中有介绍ORG在Python的使用,同时也介绍了一些常见的Python的GIS库。而参考文献3则是介绍OGR在C++下的使用。另外,以前见过一篇文章,其中介绍GDAL/OGR库的C/C++使用时,也介绍了Python的使用,只是现在没找到。有机会我写个系统的介绍吧。</span></font></p><font size="4"></font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>OGR可以读取并处理矢量数据,并且能够处理这些矢量数据的投影。关于OGR处理地图投影,其是通过PROJ4库实现的。</span></font></p><a name="t4"></a><font size="4">3、数据处理 </font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>GIS数据的处理,不可避免的要涉及到投影问题。关于投影,一般是用PROJ库来解决的。PROJ也有Python的接口,也就是pyproj软件包(MIT许可)。下载地址为:</span></font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="https://code.google.com/p/pyproj/downloads/list"><font size="4"><span>https://code.google.com/p/pyproj/downloads/list</span> </font></a><font size="4"></font></p><font size="4"></font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>除了数据的投影处理,还要对数据进行一般处理,前面介绍的OGR可以进行shapefile文件中的属性和数值处理。而有时候,我们需要进行相关数据的几何处理,如二维的拓扑处理。这时,就可以用到一个名为Sharply的Python软件包。Sharply可以处理和分析二维的几何图形。其是大名鼎鼎的GEOS软件包的Python接口(GEOS是C++写的,其又基于Java Technology Suite,说来话长了)。要使用Sharply,必须先安装GEOS(小心,GEOS是LGPL许可的,不能像MIT许可那样随心所欲)。</span></font></p><font size="4"></font><ul><font size="4"></font><li><font size="4">Sharply<span style="font-family: 宋体;">的下载地址为:</span></font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="https://github.com/sgillies/shapely"><span style="font-family: 宋体;"></span><font size="4"><span>https://github.com/sgillies/shapely</span> </font></a><font size="4"></font><li><font size="4">GEOS<span style="font-family: 宋体;">的下载地址:</span><span></span></font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://trac.osgeo.org/geos/"><font size="4"><span>http://trac.osgeo.org/geos/</span> </font></a><font size="4"></font></li></ul><a name="t5"></a><font size="4"><span style="'font-family:" "Microsoft YaHei";'>4、Shapefile的显示</span></font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>shapefile的数据处理,可以通过上面的OGR和Sharply库实现,但若要进行显示。就涉及到渲染等问题了。这里就要介绍另一个强大的库——Mapnik。</span></font></p><font size="4"></font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>Mapnik 是一个开源的 Python/C++ 地图渲染引擎,其功能是把包含地理对象的数字地图,如地图、层、数据源、特征和地理几何等,通过一个样式表的定义渲染成位图格式,用来提供 WMS 服务。其核心是一个C++的共享库提供空间数据访问和可视化的算法和模式。 (注意,其还是LGPL下发布的)</span></font></p><font size="4"></font><p><font size="4"><span style="'font-family:" "Microsoft YaHei";'>Mapnik的例子在净月潭社区有两个。更详细的,我会试图写几篇来介绍的。</span></font></p><font size="4"></font><ul><font size="4"></font><li><font size="4">Mapnik<span style="font-family: 宋体;">下载地址:</span></font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://mapnik.org/download/"><span style="font-family: 宋体;"></span><font size="4"><span>http://mapnik.org/download/</span> </font></a><font size="4"></font></li></ul><a name="t6"></a><font size="4">三、补充 </font><p><font size="4">       这里只是概括的介绍一些开源软件库的使用。上述介绍的库,不论是其<span style="'font-family:" "Times New="New"  Roman";'>Python</span><span style="font-family: 宋体;">的接口,还是其库本身,都是<strong>跨平台</strong>的,也就是说您可以在</span><span style="'font-family:" "Times New="New"  Roman";'>Windows</span><span style="font-family: 宋体;">、</span><span style="'font-family:" "Times New="New"  Roman";'>Linux</span><span style="font-family: 宋体;">和</span><span style="'font-family:" "Times New="New"  Roman";'>MacOS</span><span style="font-family: 宋体;">下使用这些库。</span> </font></p><font size="4"></font><p><font size="4">       由于我最近也在研究并使用这些库,而有些库的中文资料相对较少。<strong>有机会我会整理下,写一篇或多篇文章发布出来,和大家一起学习</strong>。同时,还有许多其他的<span style="'font-family:" "Times New="New"  Roman";'>Python/GIS</span><span style="font-family: 宋体;">库,如</span><span style="'font-family:" "Times New="New"  Roman";'>Fiona</span><span style="font-family: 宋体;">、</span><span style="'font-family:" "Times New="New"  Roman";'>GeoDjango</span><span style="font-family: 宋体;">、</span><span style="'font-family:" "Times New="New"  Roman";'>QGIS</span><span style="font-family: 宋体;">等,这里先不一一介绍了。大家可以去</span><span style="'font-family:" "Times New="New"  Roman";'>Google</span><span style="font-family: 宋体;">一下。有机会我也会介绍的。</span> </font></p><font size="4"></font><p><font size="4">       另外,<span style="'font-family:" "Times New="New"  Roman";'>GIS</span><span style="font-family: 宋体;">数据的处理,其本质上是数值处理,在</span><span style="'font-family:" "Times New="New"  Roman";'>Python</span><span style="font-family: 宋体;">中,可以使用</span><span style="'font-family:" "Times New="New"  Roman";'>numpy</span><span style="font-family: 宋体;">、</span><span style="'font-family:" "Times New="New"  Roman";'>Sympy</span><span style="font-family: 宋体;">等软件包。关于</span><span style="'font-family:" "Times New="New"  Roman";'>Python</span><span style="font-family: 宋体;">科学计算和数值处理的资料。建议参阅张若愚老师的《</span><strong><span style="'font-family:" "Times New="New"  Roman";'>Python</span></strong><span style="font-family: 宋体;"><strong>科学计算</strong>》,清华大学出版社出版。</span> </font></p><font size="4"></font><p><font size="4">       这篇文章我很早就想写了。虽然本文是参加<span style="'font-family:" "Times New="New"  Roman";'>ESRI</span><span style="font-family: 宋体;">的活动。但<strong>本文将在后面的时间一直保持更新,文本的不足之处将会得到连续的改进</strong>。同时,今后我写的相关的</span><span style="'font-family:" "Times New="New"  Roman";'>GIS</span><span style="font-family: 宋体;">类软件的使用教程,也会链接到本文中。也就是说,<strong>本文是“活的”,将会一直得到更新和完善</strong>。</span></font></p><font size="4"></font><p><font size="4">       希望大家在<span style="'font-family:" "Times New="New"  Roman";'>GIS</span><span style="font-family: 宋体;">的道路上一同进步。</span> </font></p><a name="t7"></a><font size="4">四、参考资料 </font><ol><font size="4"></font><li><font size="4"><span style="font-family: 宋体;">李民录老师关于</span><span style="'font-family:" "Times New="New"  Roman";'>GDAL</span><span style="font-family: 宋体;">的一系列文章:</span><span></span></font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://blog.csdn.net/column/details/gdal.html"><font size="4"><span>http://blog.csdn.net/column/details/gdal.html</span> </font></a><font size="4"></font><li><span style="font-family: 宋体;"><font size="4">啄木鸟社区李林老师的一系列文章:</font></span><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://wiki.woodpecker.org.cn/moin/lilin"><span><font size="4">http://wiki.woodpecker.org.cn/moin/lilin<span style="font-family: 宋体;">;</span></font></span></a><font size="4"></font><li><font size="4"><span style="font-family: 宋体;">柴树杉老师翻译的</span><span style="'font-family:" "Times New="New"  Roman";'>GDAL</span><span style="font-family: 宋体;">官方说明文档:</span></font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://osgeo.org.cn/l18n/gdal/ogr_apitut.html"><font size="4"><span>http://osgeo.org.cn/l18n/gdal/ogr_apitut.html</span><br/></font></a><font size="4"></font><li><font size="4">犹他州立大学关于Python和OGR的教程:</font><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://www.gis.usu.edu/~chrisg/python/2009/"><font size="4">http://www.gis.usu.edu/~chrisg/python/2009/</font></a><a style="color: rgb(51, 102, 153); text-decoration: none;" href="http://www.gis.usu.edu/~chrisg/python/2009/"></a><font size="4">。 </font></li></ol><p><font size="4">原文作者:</font></p><font size="4"><li style="width: 180px;">3Snews博客的arcgis2010</li></font>
举报 回复(0) 喜欢(0)     评分
459697990
路人甲
路人甲
  • 注册日期2012-12-21
  • 发帖数12
  • QQ
  • 铜币135枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2012-12-24 16:23
能独立开发GIS么,不用任何arcgis等控件,我是菜鸟,求帮助,公司要求。必须用VC++,从低层开始,求帮助
举报 回复(0) 喜欢(0)     评分
游客

返回顶部