0

【森城市】GIS数据漫谈(二)

 1 year ago
source link: https://blog.51cto.com/u_15159105/5448016
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在上篇“GIS数据漫谈(一)”中简单介绍了GIS数据中矢量数据和栅格数据的概念,以及常见的GIS数据文件类型。这篇漫谈中我们继续讲讲地图服务。

空间数据库

GIS的发展史是跟随IT技术的发展史进展的,比如前面提到的各种矢量数据、栅格数据的文件都属于空间数据。由于地理数据本身的大数据属性,一个城市地理信息系统的数据量可能达几十GB,如果考虑影像数据的存储,可能达几百个GB。地理信息系统的海量数据,带来了系统运转、数据组织与储存、网络传输等一系列技术困难,自然也给数据管理增加了难度。

为了更好的管理GIS数据便发展出了空间数据库,随着技术的发展很多主流数据库基本上都支持空间数据扩展,比如MySQL、Oracle、PostGIS等。

有了空间数据库管理GIS数据,怎么去对接这些数据呢?总不能一个个去导GeoJSON吧。OGC【开放地理空间信息联盟 (Open Geospatial Consortium-OGC)】为上面讲过的数据源设计了一些服务比如WMS、WMTS、WFS 等等。

在GIS的Web应用中,无论原始数据存在文件里也好,还是存在数据库里也好,都可以利用这些标准的地图服务在网络中通过http(s)协议进行访问共享。一般GIS大厂的Server产品或开源的GIS Server(比如 GeoServer)都支持发布这些地图服务。

WMS(Web Map Service)

该服务的最主要能力就是将GIS数据(无论原始数据是矢量数据还是栅格数据)发布成“图片”。即根据客户端请求参数(主要是bbox范围),服务器端返回相应的“图片”。

WMS常用的三种操作:

• GetMap:根据请求参数,返回一个图片

• GetFeatureinfo:根据请求参数里的坐标,返回查询到的对象属性信息

• GetCapabilities:返回服务的元数据

将“站点”、“铁路”、“湖泊”数据发布成WMS服务,则可以通过WMS服务根据bbox范围请求相应数据渲染后的地图图片。绝大部分的地图应用前端库对WMS服务都有相应图层支持。

【森城市】GIS数据漫谈(二)_图层

WMS 有时又被称为“动态”地图服务,服务器会从客户端发出请求的参数(比如图层名称、BBox范围内)去数据库或文件中检索查询相应范围的数据,然后再根据配置的样式渲染成图片,最终返回给客户端。

如果客户端请求频发或并发请求高,地图图层包含的数据量又非常庞大、配置的样式复杂时,服务端承担的负载就会增大。因此,后来又发展出了地图瓦片缓存机制。简单说就是按一定的规则把“渲染”后的地图图片存放在服务器上,当客户端再次调用时服务端就直接返回“缓存”的图片,不用再次“动态”渲染,所以就有了地图瓦片服务。

地图瓦片服务

地图瓦片指将一定范围内的地图按照一定的尺寸和格式,按缩放级别或者比例尺,切成若干行和列的正方形栅格图片,对切片后的正方形栅格图片被形象的称为瓦片(tile)。

瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变。

【森城市】GIS数据漫谈(二)_图层_02

Google 地图采用的 Web Mecator 投影和瓦片分级切割方案,也成为目前互联网地图事实上的标准。

WMTS(Web Map Tile Service)

WMTS是一种OGC定义的地图瓦片服务标准,WMTS 是 OGC 提出的缓存技术标准,即在服务器端缓存被切割成一定大小瓦片的地图,对客户端只提供这些预先定义好的单个瓦片的服务,将更多的数据处理操作如图层叠加等放在客户端,从而缓解 GIS 服务器端数据处理的压力。

与之对应的还有Google Tile、 OSGeo 的 TMS(Tile Map Service)等等,虽然各个规范有所不同,但基本上都可以在uearth API中尝试使用 TileLayer 加载这些地图瓦片服务。

如何在低代码加载使用这些数据?可以将湖泊、铁路等数据利用GeoServer分别发布成为WMTS和TMS地图服务,在低代码ThingJS在线开发利用 uearth API 的 TileLayer 进行加载。

【森城市】GIS数据漫谈(二)_客户端_03

无论是WMS服务还是地图瓦片(切片)服务,最终调用的都是“图片”而不是数据本身。虽然浏览器几乎没有渲染的压力,但是样式不够灵活,只能在低代码ThingJS中调整整体图片的效果,不方便效果调整(如果调整了服务端的地图样式配置又需要重新切片)。所以又有了WFS服务来直接的提供对矢量数据的操作。

WFS(Web Feature Service)

WFS为客户端提供了操作矢量数据的能力,除了返回查询数据外,还提供了新增、修改、删除数据的标准接口。意思是所看到的是要素是矢量图形,而不是一张图片。

矢量图形和图片要素的区别是不会随着放大程度的改变而失真,矢量要素方便交互和编辑、修改形状等。

如何在低代码加载使用这些数据?

利用 GeoServer 将数据(如铁路)发布成WFS服务直接在前端进行查询,返回结果后(一般为geojson格式),用 ThingJS/uearth 相关 API 进行绘制。

【森城市】GIS数据漫谈(二)_数据_04

森城市:一键生成3D城市,内置多种模板,自由编辑

• 森城市目前提供全国范围内110多个城市的标准三维场景的构建服务,使城市三维场景的构建速度提升至分钟级。

• 森城市支持不同类型城市数据的插入和自动融合,并提供友好而强大的场景编辑能力和性能处理能力,无需具备GIS、建模等专业技能,就可以轻松DIY自己的酷炫城市三维场景。

• 森城市具备开放的城市场景输出能力,无需担心场景后续使用的兼容问题。

低代码ThingJS:低代码灵活开发数字孪生可视化应用

• 低代码ThingJS提供了丰富的3D开发API、完善的开发文档和视频教程,熟悉基础的JavaScript前端知识即可上手数字孪生可视化应用开发。

• 低代码ThingJS是纯H5的WebGL架构,可在各类主流网页浏览器中自如运行,包括可在移动端直接访问运行。

• 低代码ThingJS提供全生命周期的开发组件,大大提升数字孪生可视化项目开发效率。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK