GIS 概述
GIS(Geographic Information System) 地理信息系统。它是一种特定的、十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
OGC 标准
OGC
——开放地理空间信息联盟(Open Geospatial Consortium), 是一个非盈利的、国际化的、自愿协商的标准化组织,它的主要目的就是制定与空间信息、基于位置服务相关的标准。
而这些所谓的标准其实就是一些接口或编码的技术文档,不同的厂商、各种 GIS 产品都可以对照这些文档来定义开放服务的接口、空间数据存储的编码、空间操作的方法。定义的常见标准有 WMS、WMTS、TMS、WFS 等
WMS
WMS(Web Map Service),Web
地图服务
它是利用具有地理空间位置信息的数据制作地图,其中将地图定义为地理数据的可视化表现,能够根据用户的请求,返回相应的地图,包括 PNG、GIF、JPEG 等栅格 形式,或者 SVG 或者 WEB CGM 等矢量形式。
WMS 提供如下操作:
- GetCapabitities:返回服务级元数据,它是对服务信息内容和要求参数的一种描述。
- GetMap:返回一个地图影像,其地理空间参考和大小参数是明确定义了的。
- GetFeatureInfo:返回显示在地图上的某些特殊要素的信息。
- GetLegendGraphic:返回地图的图例信息。
TMS
TMS(Tile Map Service),瓦片地图服务,将地图切割成多个级别的图片金字塔。瓦片是正方形,每张瓦片都可通过级别、行列号唯一标记。
在平移、缩放地图时,浏览器根据金字塔规则,计算出所需的瓦片,从服务器获取并拼接
WMTS
WMTS(Web Map Tile Service),Web
地图瓦片服务
WMTS(Web Map Tile Service) 提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案。WMTS
弥补了 WMS
不能提供分块地图的不足。
WMS 针对提供可定制地图的服务,是一个动态数据或用户定制地图(需结合 SLD 标准)的理想解决办法。
WMTS 牺牲了提供定制地图的灵活性,代之以通过提供静态数据(基础地图)来增强伸缩性,这些静态数据的范围框和比例尺被限定在各个图块内。
这些固定的图块集使得对 WMTS 服务的实现可以使用一个仅简单返回已有文件的 Web 服务器即可,同时使得可以利用一些标准的诸如分布式缓存的网络机制实现伸缩性
WFS 网络要素服务(WFS)
也叫要素地图服务.支持用户在分布式的环境下通过 HTTP 对地理要素进行插入,更新,删除,检索和发现服务。 该服务根据 HTTP 客户请求返回要素级的 GML(Geography Markup Language、地理标识语言)数据, 并提供对要素的增加、修改、删除等事务操作,是对 Web 地图服务的进一步深入。
WFS 提供如下操作:
- GetCapabitities:返回服务级元数据,它是对服务信息内容和要求参数的一种描述。
- DescribeFeatureType:生成一个 Schema 用于描述 WFS 实现所能提供服务的要素类型。Schema 描述定义了在输入时 WFS 实现如何对要素实例进行编码以及输出时如何生成一个要素实例。
- GetFeature:可根据查询要求返回一个符合 GML 规范的数据文档。
- LockFeature:用户通过 Transaction 请求时,为了保证要素信息的一致性,即当一个事务访问一个数据项时,其他的事务不能修改这个数据项,对要素数据加要素锁。
- Transaction: 与要素实例的交互操作。该操作不仅能提供要素读取,同时支持要素在线编辑和事务处理。Transaction 操作是可选的,服务器根据数据性质选择是否支持该操作。
WCS 服务
网络覆盖服务是面向空间影像数据,它将包含地理位置的地理空间数据作为"覆盖(Coverage)"在网上相互交换,如卫星影像、数字高程数据等栅格数据。
WCS 提供如下操作:
- GetCapabitities:返回服务级元数据,它是对服务信息内容和要求参数的一种描述
- DescribeCoverage:支持用户从特定 WCS 服务器获取一个或多个覆盖的详细的描述文档
- GetCoverage:可根据查询要求返回一个包含或者引用被请求的覆盖数据的响应文档
技术架构
webGIS
整体架构主要为渲染层、地图服务层、数据层
地图渲染引擎
- maptalks
主要定位是插件式的轻量级二维、三维地图渲染库,核心库包含最常用的核心功能,包括底图渲染,矢量渲染,内置的绘图交互工具,测距侧面工具等。出于兼容性考虑,核心库主要基于 canvas 技术开发的(底图在三维模式下采用 webgl 渲染),但设计初始,maptalks 就预留了大量可定制的插件接口,且不限插件渲染技术(svg, canvas, webgl 都支持),所以大量功能都是采用插件形式开发的。
既拥有leaflet/ol
强大的业务性功能(支持多种坐标投影,编辑,绘制,测量等一些业务性强的功能),也拥有 mapbox
级别的二三维能力(倾斜,旋转等)
- OpenLayers
是一个开源的项目,为客户端提供地图展示功能,包括地图数据显示与相关操作,并具有灵活的扩展机制。 支持瓦片图层和矢量图层
- MapV
是一款基于百度 地图的大数据可视化开源库,可以用来展示大量的点、线、面的数据。每种数据也有不同的展示类型,如直接打点、热力图、网格、聚合等方式展示数据。
- LeafLet
是一个为移动设备设计的交互式地图的开源库
- MapBox
是一个可交互的,响应式地图的渲染库,可以作为渲染矢量瓦片交互地图的工具,Mapbox.js 是 Leaflet 的一个插件
GeoServer
地图服务器通常也称作 地图引擎,包括接收地图请求、动态生成地图图片或者地理信息并返回给客户端等功能
现在主流的开源地图服务器 主要有 MapServer
和 GeoServer
- MapServer
诞生比较早,用户基数比较大,其内核使用 C++编写,基于 CGI 脚本实现,页面调用支持 PHP、JSP 等多种语言,并且对 OGC 的 WMS 和 WFS 规范提供支持。 Mapserver 的优势在于效率高、更适合高负荷的互联网地图应用
- GeoServer
基于 Java 和 Geotools 库开发的。Geoserver 功能全面且遵循 OGC 开放标准。GeoServer 的优势在于更多的地图处理支持,包括在线编辑等高级处理方式。为了后续更深入的研发提供了有效的支持
总的来说,
- 功能上:MapServer 效率优于 GeoServer
- 效率上:Geoserver 则更擅长于结合 WFS(Web Feature service)规范的属性查询
postgreSQL + postGIS
为什么使用数据库
自 GIS 软件被首次编写以来,Shapefile(和其他文件格式)一直是空间数据的存储和交互的标准方式。 但是,这些平面文件有以下缺点:
- 文件需要特殊的应用程序才能读写——SQL 是对随机数据访问和分析的抽象。如果没有这种抽象,你将需要自己编写所有的访问和分析数据的代码
- 并发操作可能导致损坏数据——虽然可以编写额外的代码以确保对同一文件的多次写入不会损坏数据,但当你解决了问题并同时解决了相关性能问题时,你已经编写了数据库系统的较好部分。
- 复杂的问题的快速解决——复杂而有趣的空间分析问题(空间连接、聚合等)可以在数据库中使用一行 SQL 代码来表达,但是在对文件进行编程时,需要数百行专门的代码来解决。
空间数据 与 空间数据库
普通数据库拥有字符串(string)、数值(number)和日期(date)这些数据类型, 空间数据库添加了额外的数据类型(空间数据类型)以用于表达地理特征(geographic features)。
这些空间数据类型抽象并封装了诸如边界(boundary)和维度(dimension)等空间结构。在许多方面,空间数据类型可以简单的理解为形状(shape)
空间数据与数据库关联起来的三个方面:数据类型、索引和函数
- 空间数据类型用于指定图形为点 (point)、线(line)和面(polygon)
- 多维度空间索引被用于进行空间操作的高效处理
- 空间函数构建于 SQL 语言中,用于空间属性和空间关系的查询
空间数据类型、空间索引和空间函数组合在一起,提供了灵活的结构用于优化性能和分析。 有了空间数据库之后,就不再需要专门的 GIS 数据引擎(GIS Data Engine)去处理和操纵空间数据了,应用程序只需要通过 SQL 语言就能轻松地操纵空间数据。
postGIS
PostGIS 通过向 PostgreSQL 添加对空间数据类型、空间索引和空间函数的支持,将 PostgreSQL 数据库管理系统转换为空间数据库。 PostGIS 通常都是被认为是最先进的地理数据库。PostGIS 增加了新的高级的地理空间数据类型、操作符,使得很多与位置有关的地图类或是路由类的操作变得很容易
postgreSQL
PostgreSQL 是一个强大的对象关系数据库管理系统(ORDBMS)
为什么选择 postgreSQL + postGIS
PostgreSQL 的特点:
- 被证明的默认情况下的强大的可靠性和事务完整性(ACID)
- 严谨地支持 SQL 标准(完整 SQL92)
- 可插、拔的类型扩展和功能扩展
- 面向社区的发展模式(开源)
- 不限制列大小(可用元组)以支持大型 GIS 对象
- 通用索引结构(Generic Index Structure - GIST)允许 R-Tree 索引
- 易于添加自定义功能
这些因素结合在一起,PostgreSQL 提供了一条非常简单的开发路径来添加新的空间类型。简而言之,PostgreSQL 最易于对空间数据的扩展支持
采用的技术方案
- maptalks 地图引擎
- GeoServer 地图服务器
- PostgreSQL 空间数据库,搭配
PostGIS
插件,存储地图数据
数据模型
矢量模型
矢量模型数据用点、线、面来描述地理实体,两点成线,三线可成面,线和面在计算机存储时记录的还是点的坐标。
矢量模型常用的数据格式有 Shapefile
、KML
、dwg
、dxf
等
栅格模型
栅格数据用二维矩阵的位图来表示空间地物,常见的格式有 TIFF
、JPEG
、BMP
、PCX
、GIF
等
矢量模型和栅格模型的优劣势:
- 矢量数据精确度高,但是结构复杂,现势性差
- 栅格数据数据结构简单,显示速度快,可以通过卫星拍摄快速获取,但是精确度低
现势性,地学术语。是地图所提供的地理空间信息要尽可能地反映当前最新的情况
三维模型
点云模型
数据格式
shapefile
shapefile
是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。是目前软件包中支持最广泛的格式
shapefile
格式至少使用 3 个文件(.shp
,.dbf
,.shx
)
.shp
和.dbf
单个文件的大小不能超过 2GB,所以在单个shapefile
中最多拥有 4GB 的存储空间
每个shapefile
只能存储支持的几何格式之一(点、线、多边形等),而且不能存储拓扑信息
geojson
坐标系
EPSG: 4326
EPSG:4326
是一个地理坐标系,也叫大地坐标系,用于描述WGS84
坐标系,是 GPS 中使用的全球地理坐标系统,即经纬度坐标
特征:大地坐标系,单位是度(角度单位),适合全球定位(GPS 卫星定位)
EPSG:4326 与 WGS84 的关系:
- WGS(World Geodetic System),世界大地测量系统
- EPSG(European Petroleum Survey Group), 欧洲石油调查组织
在国际上,每个坐标系统都会被分配一个 EPSG 代码,EPSG:4326 就是 WGS84 的代码
EPSG: 3857
EPSG:3857
是一个投影坐标系,在WGS84
坐标系基础上进行了伪墨卡托投影(Pseudo-Mercator)。球形墨卡托地图、谷歌地图、osm 地图、bing 地图、ArcGIS 会常用该坐标系。
投影坐标系是在大地坐标系的基础上,经过数学运算,把大地坐标系的曲面坐标映射到平面上产生的一种平面坐标系。
特征:平面坐标系,单位是长度(米),投影后角度不变形,适合导航和定位
墨卡托投影,又称正轴等角圆柱投影,由荷兰地图学家墨卡托(G.Mercator)于 1569 年创拟。假设地球被套在一个圆柱中,赤道与圆柱相切,然后在地球中心放一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,就形成以一幅墨卡托投影的世界地图(如下图)。因其等角特性,广泛应用与航空、航海中。
伪墨卡托投影是基于墨卡托投影的,把WGS84
坐标系投影到正方形上,也被称为球体墨卡托、web 墨卡托投影。
它以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负,形成一个正方形