怎样了解开源GIS
2016-07-26 14:45
274 查看
如今开源GIS资源多如繁星,我根据自己学习GIS的历程,讲讲对开源GIS的理解吧。
与项目需求匹配:不要盲目选择大而全的GIS组件做项目开发,功能完善程度与项目需求匹配就好。比如使用GRASS做一个简单的地图展示系统,不是给自己找事么?
与自身技术匹配:JAVA薄弱,就不要选JAVA阵营的资源了,所以我从未深入使用过uDig,仅在geotools上做过一点实验。
2. 基础组件:
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([b]OpenGIS Simple Features Reference Implementation)[/b]:拥有超强的数据访问能力,几乎囊括所有公开的Raster、Vector空间数据格式。不过,从互操作性来说,有部分格式不提供写的功能,数据模型支持也不可能完整,例如:DWG的数据不可能保持原样做转换。
这里需要膜拜GIS开源界的大神:Frank Warmerdam。这个项目现在由他来维护。
http://www.gdal.org/ FDO(feature data objects): AutoDesk出品,也支持多数的Raster、Vector格式数据。但流行程度不及GDAL/OGR。就是看到他代码优雅、功能完备,选他做了一个小项目,差点把自己搞残。
要是自己开发GIS系统,数据引擎部分用GDAL/OGR就足够了。 不过,要想提升性能,就要自己改进了。
http://www.geotools.org/
QGIS(Quantum GIS): 基于Qt,使用C++开发的桌面版系统。支持python插件开发,现在也有很多第三方贡献的功能插件。
http://qgis.org/en/site/
uDig(User-friendly Desktop Internet GIS): JAVA阵营产品。 多年以前曾编译过,发现太费劲儿。
http://udig.refractions.net/
都支持插件性开发,可以自己做几个功能插件,定制化开发一个行业内应用的GIS软件。
KML, geoJSON...更好了
Cairo库。
http://mapnik.org/
[b]Tilecache: [/b]生成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
Geospatial Consortium ):http://www.opengeospatial.org/ 开放地理空间信息联盟,非盈利组织,致力于制定地理空间社区的各种开放性标准。
osgeo: http://www.osgeo.org/(开源地理空间基金会)是一个非盈利组织。 在此网站可以搜索到几乎所有当今流行的GIS开源项目,以及正在孵化的项目。
OSM: https://www.openstreetmap.org 由地图制作爱好者组成的社区。维护了世界各地的道路、POI。 可以自己上传点数据玩玩,也可以指正其中的数据错误。如果自己做地图服务,可以将数据源指定为OSM,就省去自己搭建基础地图服务的繁琐工作了。
这里还缺少当今很火的3D, H5方面开源项目。
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([b]OpenGIS Simple Features Reference Implementation)[/b]:拥有超强的数据访问能力,几乎囊括所有公开的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. 服务端:
[b]MapNik: [/b]优秀的Python/C++ 地图渲染引擎。 就有很强的地图渲染自定义能力,可渲染出非常漂亮的地图。 核心使用了AGG,Cairo库。
http://mapnik.org/
[b]Tilecache: [/b]生成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(OpenGeospatial Consortium ):http://www.opengeospatial.org/ 开放地理空间信息联盟,非盈利组织,致力于制定地理空间社区的各种开放性标准。
osgeo: http://www.osgeo.org/(开源地理空间基金会)是一个非盈利组织。 在此网站可以搜索到几乎所有当今流行的GIS开源项目,以及正在孵化的项目。
OSM: https://www.openstreetmap.org 由地图制作爱好者组成的社区。维护了世界各地的道路、POI。 可以自己上传点数据玩玩,也可以指正其中的数据错误。如果自己做地图服务,可以将数据源指定为OSM,就省去自己搭建基础地图服务的繁琐工作了。
后记:
大家可以注意观察一下,开源项目的贡献者中,极少有亚洲面孔。曾经发现新发布的GEOS有个内存泄露错误,当我兴冲冲的去commit后,发现已经有人先我一步了!。哎,努力成为开源社区的贡献者,也挺不容易的。这里还缺少当今很火的3D, H5方面开源项目。
相关文章推荐
- 介绍一款信息管理系统的开源框架---jeecg
- 源码被倒卖,大厂薅羊毛,开源真的只能被予取予求?
- 学习 Linux 是我们的爱情语言
- 专家解读:开源软件项目是否会被限制出口?
- 专家解读:开源软件项目是否会被限制出口?
- 基础命令学习总结
- fuse-dfs的设定手册
- Centos下***(pptpd)的部署
- Prototype 学习 工具函数学习($方法)
- PERL脚本 学习笔记
- 学习 WSH 的理由小结
- Prototype 学习 工具函数学习($A方法)
- jQuery 学习 几种常用方法
- 开源MySQL高效数据仓库解决方案:Infobright详细介绍
- awk简介与学习笔记收集第1/3页
- php学习 字符串课件
- 供参考的 php 学习提高路线分享
- PHP的FTP学习(二)
- PHP学习之PHP表达式