GIS开发之地理空间应用程序生态链

啥也不说,先看一张用PPT画的图。

 

GIS开发之地理空间应用程序生态链_第1张图片

这张图脱胎于《Python地理空间分析指南》一书中的插图,用PPT重新画了一下,把里面没有的,但我觉得比较重要项目的补充了进来。

从这张图中,能看出,GIS应用程序生态由四大程序库构成:GDAL、OGR、PROJ.4、GEOS;基于四大程序库派生或关联出更多的程序库:CGAL、GRASS、JTS、GEOTOOL等;依托各种程序库,构建出几大软件:QGIS、ARCGIS、GOOGLE EARTH、GEOSERVER等。

以下,根据这三方面,阐述这张图。

一、四大程序库

大家应该都知道,GIS是伴随计算机技术一同发展的,上世纪六十年代起步,到八十年代,经典的原理、模型、算法都已经提出,并在实践中得到了验证。

GDAL、OGR、PROJ.4、GEOS,这四个程序库,在上世纪九十年代就已经成型,当时,它们都是被行业内的顶尖专家用C语言来实现的。

1.GDAL

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

 

2.OGR

OGR曾经是一个独立的矢量读写库,但现在是GDAL的一个分支,支持绝大部分千奇百怪的GIS矢量数据格式,用于对矢量数据进行读写,或对数据格式进行转换。

OGR单独存在的目的,是为了在底层将数据格式统一,栅格数据格式相对单一,矢量数据有几百种,很早的时候,因为GIS数据格式不统一,导致生态隔离,OGR的出现,解决了这种问题。

 

3. PROJ.4

PROJ.4是一个开源的地图投影库,支持全世界几千种坐标系统。

数据必须文件格式统一、坐标系统一,才能继续使用。

GDAL直接引用了PROJ.4:

https://gdal.org/tutorials/osr_api_tut.html

 

 

4. GEOS

Geos是一个开源的计算矢量数据拓扑关系的引擎。它基于DE-9IM模型,计算几何对象之间的空间谓词,例如相交、覆盖、包含、接触、穿过等等。

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

 

最开始,GDAL、OGR、PROJ.4、GEOS都是用C语言编写的,相对于其他语言,C语言编写的程序运行速度更快,性能更好。

GDAL、OGR、PROJ.4、GEOS能实现GIS数据的文件读写、文件转换、坐标转换、空间分析、建模分析等功能,构建了GIS应用程序生态的基石。

 

 

二、关联派生库

1. GEOTOOL

Geotool是开源JAVA库,支持地理空间数据的处理和计算,可以简单认为它是GDAL的Java版本。

Geotool实现了OGC(开放地理信息联盟)的规范,提供符合标准的方法来处理地理空间数据,支持数据的读写、转换、计算、地图发布等。

Geotool官网:https://www.geotools.org/

 

2. JTS

Jts可以认为是geos的Java版。

Jts的使用可参见:https://blog.csdn.net/sinat_41310868/article/details/106699511

Jts下载地址:https://sourceforge.net/projects/jts-topo-suite/

 

3. SHAPELY

Shapely可以认为是geos的Python版。

Shapely文档参见:https://www.osgeo.cn/shapely/

Shapely使用参见:https://blog.csdn.net/sinat_41310868/article/details/106699553

 

 

4.CGAL

CGAL是计算机几何算法库,被广泛应用于几何计算相关的领域,它是很基础的程序库,被JTS继承引用。

 

 

5.GEOSERVER

GeoServer是一个用于共享地理空间数据的开源服务器。它为互操作性而设计,使用开放标准发布来自任何主要空间数据源的数据。

Geoserver是一个已经集成好的包,可以直接部署在window或linux的主机上,使用web页面来发布web map service。

Geoserver官网:http://geoserver.org/

6.POSTGIS

Postgis是postgresql数据库的空间扩展,可以理解为数据库版的geos,有了postgis,用户可以在postgresql中用sql操作空间数据。

Postgis和postgresql的使用,详见:https://blog.csdn.net/sinat_41310868/article/details/106797368

 

这些关联和派生库,有一部分是非常基础的、通用的程序库,如CGAL,更多的是地理空间库对其他语言的扩展,例如geotool、shapely或postgis,分别支持Java、Python和SQL。

 

三、集成化软件

剩下的都是基于以上的程序,构建集成化软件,挑几个重要的说一下。

1.QGIS

一个免费开源的地理信息系统。

官网:https://qgis.org/en/site/

2.GOOGLE EARTH

大名鼎鼎的谷歌地球,能看三维地球,还能看宇宙,甚至也能看空间站。

 

3.GRASS

地理资源分析支持系统,现在安装qgis,会自动带上GRASS。

Grass官网:https://grass.osgeo.org/

 

4.OPENEV

OpenEV是一个软件库和应用程序,用于查看和分析栅格或矢量的地理空间数据。

openEV官网:http://openev.sourceforge.net/

 

5.FME

FME是一个用于转换地理空间数据格式的工具,它的功能,QGIS也可以实现。

FME中国:www.fme-china.com/

 

 

6. NASA WORLD WIND

NASA WORLD WIND是美国航天总署提供的一个类似Google earth的工具。

官网:https://worldwind.arc.nasa.gov/

与Google earth不同,NASA WORLD WIND是基于Java开发的,并且在git上贡献了源码,如果要构建三维地球的后台,可以借鉴。

https://github.com/NASAWorldWind

 

7.ARCGIS

行业标杆arcgis,不赘述。

 

8. TATUK GIS

TatukGIS是一个GIS二次开发控件,可以开发数字化制图系统。

官网:https://www.tatukgis.com/Home.aspx

 

 

9. ORFEO

Orfeo ToolBox是一个用于遥感的开源项目,能实现TB级的遥感数据的快速渲染、查询与计算,QGIS可以直接引用它的算法。Orfeo也支持Python、C++语言调用。

官网:https://www.orfeo-toolbox.org/

 

 

10. MAPSERVER

Mapserver跟geoserver类似,也是一个发布web map server的平台,不过它是用C语言实现的,性能要比geoserver好,要比geoserver快。

官网:https://mapserver.org/

 

11. MAPWINDOW

Mapwindow是开源免费的桌面GIS软件。

官网:https://www.mapwindow.org/

 

GIS行业还有好多好多其他软件,根本罗列不全,这么一看,真是小小的行业,大大的生态。层出不穷的概念,眼花缭乱的软件。掌握重点,有个全局概念就行,毕竟不可能每个软件都用过。

 

四、总结

GIS程序生态看着有点乱,各种库包、各种软件,这还没加上前端呢。

不过没有关系,不可能都会,掌握重点,把基础学好,用自己用得着的就行。

例如:

软件开源的可以用QGIS,商业的可以arcgis。

写Python的可以看GDAL和shapely,写JAVA的可以看geotool和jts。

发布地图可以用geoserver。

做三维后台可以看NASA WORLD WIND。

等等。

你可能感兴趣的:(GIS行业分析)