啥也不说,先看一张用PPT画的图。
这张图脱胎于《Python地理空间分析指南》一书中的插图,用PPT重新画了一下,把里面没有的,但我觉得比较重要项目的补充了进来。
从这张图中,能看出,GIS应用程序生态由四大程序库构成:GDAL、OGR、PROJ.4、GEOS;基于四大程序库派生或关联出更多的程序库:CGAL、GRASS、JTS、GEOTOOL等;依托各种程序库,构建出几大软件:QGIS、ARCGIS、GOOGLE EARTH、GEOSERVER等。
以下,根据这三方面,阐述这张图。
大家应该都知道,GIS是伴随计算机技术一同发展的,上世纪六十年代起步,到八十年代,经典的原理、模型、算法都已经提出,并在实践中得到了验证。
GDAL、OGR、PROJ.4、GEOS,这四个程序库,在上世纪九十年代就已经成型,当时,它们都是被行业内的顶尖专家用C语言来实现的。
GDAL是应用范围最广的,全名Geospatial Data Abstraction Library,是一个开源的地理数据格式操作库,使用它可以读写各种地理信息数据格式,包括矢量数据和栅格数据,包括单独的文件和地理信息数据库,也可以使用内置的一些函数,对数据进行分析建模。
更多的内容,可以参见GDAL官网:https://gdal.org/
随着Python语言和Java语言的发展,GDAL现在也能支持Python和Java的调用。
GDAL PYTHON API:https://gdal.org/python/index.html
GDAL JAVA API:https://gdal.org/java/overview-summary.html
OGR曾经是一个独立的矢量读写库,但现在是GDAL的一个分支,支持绝大部分千奇百怪的GIS矢量数据格式,用于对矢量数据进行读写,或对数据格式进行转换。
OGR单独存在的目的,是为了在底层将数据格式统一,栅格数据格式相对单一,矢量数据有几百种,很早的时候,因为GIS数据格式不统一,导致生态隔离,OGR的出现,解决了这种问题。
PROJ.4是一个开源的地图投影库,支持全世界几千种坐标系统。
数据必须文件格式统一、坐标系统一,才能继续使用。
GDAL直接引用了PROJ.4:
https://gdal.org/tutorials/osr_api_tut.html
Geos是一个开源的计算矢量数据拓扑关系的引擎。它基于DE-9IM模型,计算几何对象之间的空间谓词,例如相交、覆盖、包含、接触、穿过等等。
https://trac.osgeo.org/geos/timeline
最开始,GDAL、OGR、PROJ.4、GEOS都是用C语言编写的,相对于其他语言,C语言编写的程序运行速度更快,性能更好。
GDAL、OGR、PROJ.4、GEOS能实现GIS数据的文件读写、文件转换、坐标转换、空间分析、建模分析等功能,构建了GIS应用程序生态的基石。
Geotool是开源JAVA库,支持地理空间数据的处理和计算,可以简单认为它是GDAL的Java版本。
Geotool实现了OGC(开放地理信息联盟)的规范,提供符合标准的方法来处理地理空间数据,支持数据的读写、转换、计算、地图发布等。
Geotool官网:https://www.geotools.org/
Jts可以认为是geos的Java版。
Jts的使用可参见:https://blog.csdn.net/sinat_41310868/article/details/106699511
Jts下载地址:https://sourceforge.net/projects/jts-topo-suite/
Shapely可以认为是geos的Python版。
Shapely文档参见:https://www.osgeo.cn/shapely/
Shapely使用参见:https://blog.csdn.net/sinat_41310868/article/details/106699553
CGAL是计算机几何算法库,被广泛应用于几何计算相关的领域,它是很基础的程序库,被JTS继承引用。
GeoServer是一个用于共享地理空间数据的开源服务器。它为互操作性而设计,使用开放标准发布来自任何主要空间数据源的数据。
Geoserver是一个已经集成好的包,可以直接部署在window或linux的主机上,使用web页面来发布web map service。
Geoserver官网:http://geoserver.org/
Postgis是postgresql数据库的空间扩展,可以理解为数据库版的geos,有了postgis,用户可以在postgresql中用sql操作空间数据。
Postgis和postgresql的使用,详见:https://blog.csdn.net/sinat_41310868/article/details/106797368
这些关联和派生库,有一部分是非常基础的、通用的程序库,如CGAL,更多的是地理空间库对其他语言的扩展,例如geotool、shapely或postgis,分别支持Java、Python和SQL。
剩下的都是基于以上的程序,构建集成化软件,挑几个重要的说一下。
一个免费开源的地理信息系统。
官网:https://qgis.org/en/site/
大名鼎鼎的谷歌地球,能看三维地球,还能看宇宙,甚至也能看空间站。
地理资源分析支持系统,现在安装qgis,会自动带上GRASS。
Grass官网:https://grass.osgeo.org/
OpenEV是一个软件库和应用程序,用于查看和分析栅格或矢量的地理空间数据。
openEV官网:http://openev.sourceforge.net/
FME是一个用于转换地理空间数据格式的工具,它的功能,QGIS也可以实现。
FME中国:www.fme-china.com/
NASA WORLD WIND是美国航天总署提供的一个类似Google earth的工具。
官网:https://worldwind.arc.nasa.gov/
与Google earth不同,NASA WORLD WIND是基于Java开发的,并且在git上贡献了源码,如果要构建三维地球的后台,可以借鉴。
https://github.com/NASAWorldWind
行业标杆arcgis,不赘述。
TatukGIS是一个GIS二次开发控件,可以开发数字化制图系统。
官网:https://www.tatukgis.com/Home.aspx
Orfeo ToolBox是一个用于遥感的开源项目,能实现TB级的遥感数据的快速渲染、查询与计算,QGIS可以直接引用它的算法。Orfeo也支持Python、C++语言调用。
官网:https://www.orfeo-toolbox.org/
Mapserver跟geoserver类似,也是一个发布web map server的平台,不过它是用C语言实现的,性能要比geoserver好,要比geoserver快。
官网:https://mapserver.org/
Mapwindow是开源免费的桌面GIS软件。
官网:https://www.mapwindow.org/
GIS行业还有好多好多其他软件,根本罗列不全,这么一看,真是小小的行业,大大的生态。层出不穷的概念,眼花缭乱的软件。掌握重点,有个全局概念就行,毕竟不可能每个软件都用过。
GIS程序生态看着有点乱,各种库包、各种软件,这还没加上前端呢。
不过没有关系,不可能都会,掌握重点,把基础学好,用自己用得着的就行。
例如:
软件开源的可以用QGIS,商业的可以arcgis。
写Python的可以看GDAL和shapely,写JAVA的可以看geotool和jts。
发布地图可以用geoserver。
做三维后台可以看NASA WORLD WIND。
等等。