跳到主要内容

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),瓦片地图服务,将地图切割成多个级别的图片金字塔。瓦片是正方形,每张瓦片都可通过级别、行列号唯一标记。

image

在平移、缩放地图时,浏览器根据金字塔规则,计算出所需的瓦片,从服务器获取并拼接

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 整体架构主要为渲染层、地图服务层、数据层

地图渲染引擎

  1. maptalks

主要定位是插件式的轻量级二维、三维地图渲染库,核心库包含最常用的核心功能,包括底图渲染,矢量渲染,内置的绘图交互工具,测距侧面工具等。出于兼容性考虑,核心库主要基于 canvas 技术开发的(底图在三维模式下采用 webgl 渲染),但设计初始,maptalks 就预留了大量可定制的插件接口,且不限插件渲染技术(svg, canvas, webgl 都支持),所以大量功能都是采用插件形式开发的。

既拥有leaflet/ol 强大的业务性功能(支持多种坐标投影,编辑,绘制,测量等一些业务性强的功能),也拥有 mapbox 级别的二三维能力(倾斜,旋转等)

  1. OpenLayers

是一个开源的项目,为客户端提供地图展示功能,包括地图数据显示与相关操作,并具有灵活的扩展机制。 支持瓦片图层和矢量图层

  1. MapV

是一款基于百度地图的大数据可视化开源库,可以用来展示大量的点、线、面的数据。每种数据也有不同的展示类型,如直接打点、热力图、网格、聚合等方式展示数据。

  1. LeafLet

是一个为移动设备设计的交互式地图的开源库

  1. MapBox

是一个可交互的,响应式地图的渲染库,可以作为渲染矢量瓦片交互地图的工具,Mapbox.js 是 Leaflet 的一个插件

GeoServer

地图服务器通常也称作 地图引擎,包括接收地图请求、动态生成地图图片或者地理信息并返回给客户端等功能

现在主流的开源地图服务器 主要有 MapServerGeoServer

  • 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插件,存储地图数据

数据模型

矢量模型

矢量模型数据用点、线、面来描述地理实体,两点成线,三线可成面,线和面在计算机存储时记录的还是点的坐标。 矢量模型常用的数据格式有 ShapefileKMLdwgdxf

栅格模型

栅格数据用二维矩阵的位图来表示空间地物,常见的格式有 TIFFJPEGBMPPCXGIF

提示

矢量模型和栅格模型的优劣势:

  • 矢量数据精确度高,但是结构复杂,现势性差
  • 栅格数据数据结构简单,显示速度快,可以通过卫星拍摄快速获取,但是精确度低

现势性,地学术语。是地图所提供的地理空间信息要尽可能地反映当前最新的情况

三维模型

点云模型

数据格式

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 年创拟。假设地球被套在一个圆柱中,赤道与圆柱相切,然后在地球中心放一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,就形成以一幅墨卡托投影的世界地图(如下图)。因其等角特性,广泛应用与航空、航海中。

image

伪墨卡托投影是基于墨卡托投影的,把WGS84坐标系投影到正方形上,也被称为球体墨卡托、web 墨卡托投影。 它以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负,形成一个正方形

GCJ02 经纬度投影(火星坐标系)

GCJ-02是由中国国家测绘局制订的地理信息系统的坐标系统,是国测局 2002 年发布的坐标体系,又称火星坐标

这里的GCJ02经纬度投影,是在WGS84经纬度的基础之上,进行GCJ-02加偏。加偏处理是按照特殊的算法,将真实的坐标加密成虚假的坐标。

特征:坐标值为经纬度格式,单位为度

提示

坐标系区分:

  • EPSG:4326,等同于 WGS84 坐标系
  • EPSG:3857,墨卡托投影坐标系
  • GCJ02,火星坐标系,将 GPS 坐标做偏移之后的数据
  • CGCS2000,中国国家 2000 地理坐标系统(China Geodetic Coordinate System 2000),北斗导航系统、天地图使用该坐标系
  • BD-09,百度地图使用的坐标系

图层管理

图层是指能够在视觉上覆盖一定地图范围,用来描述全部或者部分现实世界区域内的地图要素的抽象概念,一幅地图通常由一个或者多个图层组成

图层底图分类

  • 标准地图
  • 浅色地图
  • 极夜蓝地图
  • 卫星地图

矢量图形

矢量图形,一般覆盖于底图图层之上,通过矢量的方式(路径或者实际大小)来描述其形状,用几何的方式来展示真实的地图要素,如地图中的点、折线、圆,多边形,椭圆,矩形,弧线等

交互与事件

监听鼠标事件控制地图状态,如:

  • 设置地图中心点
  • 地图放大缩小、移动拖拽、旋转倾斜
  • 图层切换、添加、移除、显示、隐藏

地图控件

比例尺

地图比例尺反映了制图区域和地图的比例关系,决定了地图的显示精度,比例尺越大显示的地图内容越丰富

缩放刻度

鹰眼

测绘工具

绘制工具,点、线、弧线、面基础矢量要素的绘制,添加文字和信息窗、点标记动画、叠加图层、自定义叠加图层、点位连线(行动轨迹)、点位(按行政区划)色温图等

  • 测距工具
  • 测面积工具,根据提供的点面测出点与点之间构成的几何图形面积

信息窗口

地图上的弹出窗口