怎样了解开源GIS

如今开源GIS资源多如繁星,我根据自己学习GIS的历程,讲讲对开源GIS的理解吧。

1. 选择的几个标准:

开源社区活跃度:活跃度太低,慎选。表明使用者少,有了问题难找到答案。 我曾经使用 MapGuide 做一个Web GIS, 发现使用者不多,尤其国内的资源比较少。

与项目需求匹配:不要盲目选择大而全的GIS组件做项目开发,功能完善程度与项目需求匹配就好。比如使用GRASS做一个简单的地图展示系统,不是给自己找事么?

与自身技术匹配:JAVA薄弱,就不要选JAVA阵营的资源了,所以我从未深入使用过uDig,仅在geotools上做过一点实验。


2. 基础组件: 

2.1. 基础空间库:

包含GIS的基础概念:空间数据模型、空间关系、空间分析、坐标系与投影等。

JTS(Java Topology Suite):加拿大的 Vivid Solutions 开发的GIS基础组件库,JAVA版。   

                         http://www.vividsolutions.com/jts/jtshome.htm

GEOS(Geometry Engine Open Source):起源于JTS,可称为C++版的JTS。牛掰的PostGIS的底层就是使用GEOS,可见TA的江湖地位了。

                         https://trac.osgeo.org/geos/

PROJ4(Cartographic Projections Library): 提供投影变换、坐标系转换。这两件事,是做GIS项目绕不开的。   比如:不同坐标系统的数据,要同窗展示,必须做动态的坐标转换,就可以使用PROJ4。

                         https://trac.osgeo.org/proj/


要想深入研究GIS的基础部分,建议看看OGC, 了解一下九交模型,学习一下坐标系与投影变换的概念,再补补空间几何基础知识。如果只是做一个简单项目,不想深入GIS了解背后的知识,就当我啥也没说~~

2.2. 数据引擎:

GDAL(Geospatial Data Abstraction Library)/OGR(OpenGIS Simple Features Reference Implementation):拥有超强的数据访问能力,几乎囊括所有公开的Raster、Vector空间数据格式。不过,从互操作性来说,有部分格式不提供写的功能,数据模型支持也不可能完整,例如:DWG的数据不可能保持原样做转换。 

这里需要膜拜GIS开源界的大神:Frank Warmerdam。这个项目现在由他来维护。

               http://www.gdal.org/

FDO(feature data objects): AutoDesk出品,也支持多数的Raster、Vector格式数据。但流行程度不及GDAL/OGR。就是看到他代码优雅、功能完备,选他做了一个小项目,差点把自己搞残。


要是自己开发GIS系统,数据引擎部分用GDAL/OGR就足够了。 不过,要想提升性能,就要自己改进了。

2.3. 开发工具包:

geotools: 开源的Java GIS工具包, 包含了基本数据表达、处理等部分。

        http://www.geotools.org/

3. 完整GIS套件:

主要是完成数据管理、编辑、制图、数据发布等工作,数据编辑、地图排版。

QGIS(Quantum GIS):  基于Qt,使用C++开发的桌面版系统。支持python插件开发,现在也有很多第三方贡献的功能插件。

                                    http://qgis.org/en/site/

uDig(User-friendly Desktop Internet GIS):  JAVA阵营产品。 多年以前曾编译过,发现太费劲儿。

                                    http://udig.refractions.net/

都支持插件性开发,可以自己做几个功能插件,定制化开发一个行业内应用的GIS软件。

4. 网络地图服务:

做地图服务开发,首先应该了解三个术语WMS(Web Map Service), WFS(Web Feature Service), WCS(Web Coverage Service)。当然,再了解一下WFS-T, KML, geoJSON...更好了

4.1.  服务端:

MapNik: 优秀的Python/C++ 地图渲染引擎。 就有很强的地图渲染自定义能力,可渲染出非常漂亮的地图。  核心使用了AGG, Cairo库。

  http://mapnik.org/

Tilecache: 生成WMS缓存瓦片的利器。主要目的是降低WMS服务器资源消耗。

  http://tilecache.org/

GeoServer: JAVA阵营的地图服务器,遵照OGC标准,提供地图发布、数据共享服务。

   http://geoserver.org/

MapServer: C/C++阵营的地图服务器,遵照OGC标准,提供地图发布、数据互操作服务。

  http://mapserver.org


4.2. 客户端:

OpenLayers: 高效、面向对象的js库,在浏览器端展示地图服务。支持OGC标准服务、GOOGLE Map, 也可以增加自定义接口,对公司提供的地图服务进行支持。

   http://openlayers.org/

5. 总有一款适合你

做一套完整的GIS系统,主要包括数据生产工具(多使用桌面版),空间数据库,地图服务器,以及客户端展示 4 部分。在C/C++、JAVA两大阵营中,都可以找到一套完整的开源项目。

C/C++阵营:QGIS、PostGIS、Mapserver、OpenLayers

Java阵营:uDig、PostGIS、Geoserver、OpenLayers


6. 参考:

OGC(Open Geospatial Consortium ):http://www.opengeospatial.org/  开放地理空间信息联盟,非盈利组织,致力于制定地理空间社区的各种开放性标准。

osgeo: http://www.osgeo.org/(开源地理空间基金会)是一个非盈利组织。 在此网站可以搜索到几乎所有当今流行的GIS开源项目,以及正在孵化的项目。

OSM: https://www.openstreetmap.org 由地图制作爱好者组成的社区。维护了世界各地的道路、POI。 可以自己上传点数据玩玩,也可以指正其中的数据错误。如果自己做地图服务,可以将数据源指定为OSM,就省去自己搭建基础地图服务的繁琐工作了。


后记:

大家可以注意观察一下,开源项目的贡献者中,极少有亚洲面孔。曾经发现新发布的GEOS有个内存泄露错误,当我兴冲冲的去commit后,发现已经有人先我一步了!。哎,努力成为开源社区的贡献者,也挺不容易的。

这里还缺少当今很火的3D, H5方面开源项目。


你可能感兴趣的:(Map,Geo,随笔)