如今开源GIS资源多如繁星,我根据自己学习GIS的历程,讲讲对开源GIS的理解吧。
与项目需求匹配:不要盲目选择大而全的GIS组件做项目开发,功能完善程度与项目需求匹配就好。比如使用GRASS做一个简单的地图展示系统,不是给自己找事么?
与自身技术匹配:JAVA薄弱,就不要选JAVA阵营的资源了,所以我从未深入使用过uDig,仅在geotools上做过一点实验。
包含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了解背后的知识,就当我啥也没说~~
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就足够了。 不过,要想提升性能,就要自己改进了。
geotools: 开源的Java GIS工具包, 包含了基本数据表达、处理等部分。
主要是完成数据管理、编辑、制图、数据发布等工作,数据编辑、地图排版。
QGIS(Quantum GIS): 基于Qt,使用C++开发的桌面版系统。支持python插件开发,现在也有很多第三方贡献的功能插件。
http://qgis.org/en/site/
uDig(User-friendly Desktop Internet GIS): JAVA阵营产品。 多年以前曾编译过,发现太费劲儿。
http://udig.refractions.net/都支持插件性开发,可以自己做几个功能插件,定制化开发一个行业内应用的GIS软件。
做地图服务开发,首先应该了解三个术语WMS(Web Map Service), WFS(Web Feature Service), WCS(Web Coverage Service)。当然,再了解一下WFS-T, KML, geoJSON...更好了
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
OpenLayers: 高效、面向对象的js库,在浏览器端展示地图服务。支持OGC标准服务、GOOGLE Map, 也可以增加自定义接口,对公司提供的地图服务进行支持。
http://openlayers.org/
做一套完整的GIS系统,主要包括数据生产工具(多使用桌面版),空间数据库,地图服务器,以及客户端展示 4 部分。在C/C++、JAVA两大阵营中,都可以找到一套完整的开源项目。
C/C++阵营:QGIS、PostGIS、Mapserver、OpenLayers
Java阵营:uDig、PostGIS、Geoserver、OpenLayers
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方面开源项目。