GeoServer:地图服务与GeoWebCache缓存优化

2023-12-27 03:58

本文主要是介绍GeoServer:地图服务与GeoWebCache缓存优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

空间数据服务规范

    1. WMS(Web Map Service)

    WMS利用具有地理空间位置信息的数据制作地图,能够根据用户的请求返回相应的地图(包括PNG,GIF,JPEG等栅格形式或者是SVG和WEB CGM等矢量形式)。这个规范有三个常用操作:GetCapabitities 返回服务级元数据,它是对服务信息内容和要求参数的一种XML描述; GetMap 返回一个地图影像,其地理空间参考和大小参数是明确定义了的;GetFeatureInfo 返回显示在地图上的某些特殊要素的信息。除此之外,还有一些可选操作:DescribeLayerGetLegendGraphicGetStyles等,如我们可以设计一个样式文件(.sld)并提交到geoserver,将其作为图层的默认样式,当我们请求WMS服务时,将用该样式对图层进行渲染 [教程] (创建样式文件通常可以使用QGIS、udig等) [ udig创建样式文件 ] [使用qgis生成SLD样式]

    通过构建不同的URL,我们可以请求不同的操作。

// GetCapabilities(返回服务级元数据):返回一个 XML 文件
http://localhost:8081/geoserver/wms?service=WMS&version=1.1.1&request=GetCapabilities// GetMap(获取影像):返回文件格式有PNG、PNG8、JPEG、GIF、TIFF 和 TIFF8 等
http://localhost:8081/geoserver/urbanlayer/wms?LAYERS=urbanlayer:DIJI&STYLES=&FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:3857&BBOX=10008053.503544,5274522.8578226,10039584.01305,5292493.614536&WIDTH=579&HEIGHT=330// GetFeatureInfo(返回要素信息):返回文件格式有TEXT、GML2、GML3、HTML、JSON 和 JSONP 等
http://localhost:8081/geoserver/urbanlayer/wms?REQUEST=GetFeatureInfo&EXCEPTIONS=application/vnd.ogc.se_xml&BBOX=10008053.503544,5274522.857823,10039584.01305,5292493.614536&SERVICE=WMS&INFO_FORMAT=text/plain&QUERY_LAYERS=urbanlayer:DIJI&FEATURE_COUNT=50&Layers=urbanlayer:DIJI&WIDTH=579&HEIGHT=330&format=image/png&styles=&srs=EPSG:3857&version=1.1.1&x=315&y=147

    操作需要的URL参数说明参阅大佬的博客:李晓晖 - 博客园   [GeoServer中WMS、WFS的请求规范]

  ## GetCapabitities 参数

  ## GetMap 参数

  ## GetFeatureInfo 参数

    2. WFS(Web Feature Service)

    WFS 支持用户在分布式的环境下通过HTTP对地理要素进行插入,更新,删除,检索和发现服务。该服务根据HTTP客户请求返回要素级的GML(Geography Markup Language、地理标识语言)数据,并提供对要素的增加、修改、删除等事务操作,是对Web地图服务的进一步深入。这个规范有三个常用操作:GetCapabilites 返回Web要素服务性能描述文档(用XML描述);DescribeFeatureType 返回描述可以提供服务的任何要素结构的XML文档;GetFeature 为一个获取要素实例的请求提供服务。除此之外,还有一些操作如:Transaction 为事务请求提供服务;LockFeature 处理在一个事务期间对一个或多个要素类型实例上锁的请求等。

// GetCapabilities(返回服务描述文档):返回一个 XML 文件
http://localhost:8081/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities// DescribeFeatureType(返回图层描述信息)
http://localhost:8081/geoserver/urbanlayer/ows?service=wfs&version=1.0.0&request=DescribeFeatureType&typeName=DIJI// GetFeature(获取图层要素)
http://192.168.101.14/geoserver/urbanlayer/wfs?request=GetFeature&version=1.1.0&typename=jianfudanhistory&Filter=<Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><Intersects> <PropertyName>the_geom</PropertyName> <gml:Envelope srsName="EPSG:4326">	 <gml:lowerCorner>120.1762573834964 30.280899047851562</gml:lowerCorner> 	 <gml:upperCorner>120.18999029365265 30.294631958007812</gml:upperCorner> </gml:Envelope></Intersects></Filter>&outputformat=json

    操作需要的URL参数说明同样参阅大佬的博客:李晓晖 - 博客园  [GeoServer中WMS、WFS的请求规范]

    其他:GeoServer通过WFS对feature实现增删改查

    3. WCS(Web Coverage Service)

    网络覆盖服务是面向空间影像数据,它将包含地理位置的地理空间数据作为 “栅格Coverage” 在网上相互交换,如卫星影像、数字高程数据等栅格数据。

    WCS提供如下操作:

  • GetCapabitities:返回服务级元数据,它是对服务信息内容和要求参数的一种描述。
  • DescribeCoverage:支持用户从特定WCS服务器获取一个或多个覆盖的详细的描述文档。
  • GetCoverage:可根据查询要求返回一个包含或者引用被请求的覆盖数据的响应文档。



    4. TMS(Tile Map Service)

    切片地图服务(TMS)定义了一些操作,这些操作允许用户访问切片地图。

    5. WMTS(Web Map Tile Service)

    WMTS,即Web地图瓦片服务(Web Map Tile Service),由OGC(开放地理信息联盟)制定。根据WMTS标准,可以使我们轻松的访问瓦片数据。WMTS提供了一种采用预定义图块方法发布数字地图服务的标准化解决方案,它最重要的特征是采用瓦片缓存技术缓解WebGIS服务器端数据处理的压力,提高前后端交互响应速度。

    WMTS支持RESTful访问,其操作包括:

  • GetCapabilities :获取服务元数据,元数据描述该服务的功能和包含的信息
  • GetTile:获取地图瓦片
  • GetFeatureInfo:通过在WMTS图层上指定一定的条件,返回指定的地图瓦片内容对应的要素信息

    操作需要的URL参数说明参阅大佬的博客:OpenLayers教程:多源数据加载之WMTS_不睡觉的怪叔叔的博客-CSDN博客

文档解析
图源: WMTS服务初步理解与读取_SuperMap技术控-CSDN博客_wmts地图服务

区分服务

  # WMS 与 WFS

    WMS是由服务器将地图图像发送给客户端,而WFS是服务器将矢量数据发送给客户端。也就是在使用WMS时地图由服务器绘制,在使用WFS时地图由客户端绘制。另外最最重要的,使用WFS可以对WebGIS服务器中的地理数据(存储在空间数据库中)直接进行增、删、改、查。[来源]

  # WMS 与 WMTS

    👉 摘录自 五分钟学GIS | WMTS服务初步理解与读取

    WMTS服务和WMS服务对客户端请求服务的响应不同,比如在接受客户端请求WMTS服务时,返回给客户端是固定大小的瓦片,客户端根据索引号来获取每一张瓦片,而后拼接成地图进行展示,如图1所示;由于瓦片的规则是固定的,服务端可以预先缓存对应的瓦片,客户端需要时直接返回即可,因而WMTS是可缓存的。
    而当客户端请求WMS服务时,返回给客户端是一张完整的图片,客户端取到直接展示,如图2所示;客户端可以请求任意区域,正由于这个任意性和服务端只能返回一张指定范围的图片,复用的概率低之又低,当并发增大,服务端性能就随之大大下降,故WMS仅是重在灵活性。
   互联网时代重在效率,对比于灵活性,大家更喜欢选用可缓存的性能更优的WMTS服务。

参考资源

    WMS 与 WFS:[ 链接1 ]  [ 链接2 ]   

    WMS WFS WCS TMS:[ 链接1 ]     

    WMTS:[ 链接1 ]

QGIS连接地图服务

# GeoServer

   当我们在GeoServer发布地图服务后,可以用QGIS连接geoserver服务(无需填写用户名、密码,在连接前确保GeoServer能连接的上

# ESRI / OSM / 天地图 / 高德

天地图矢量图层 https://t6.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=密钥
天地图矢量注记 https://t6.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=密钥
高德影像 https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}
高德矢量 http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}
高德路网 https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=2&style=8&ltype=11
Esri Dark Gray   http://server.arcgisonline.com/arcgis/rest/services/Canvas/World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}
OpenStreetMap  https://tile.openstreetmap.org/{z}/{x}/{y}.png

ArcGIS连接地图服务

  注:直接使用天地图服务地址是不行的,需要改动一下,加上esri,如 http://t0.tianditu.gov.cn/img_c/esri/wmts?tk=服务端密钥

GeoWebCache

    GeoWebCache(GWC)是一个采用Java实现用于缓存WMS(Web Map Service)Tile的开源项目。当地图客户端请求一张新地图和Tile时,GeoWebCache将拦截这些调用然后返回缓存过的Tiles。如果找不到缓存再调用服务器上的Tiles,从而提高地图展示的速度。实现更好的用户体验。

    GWC支持多种请求,比如WMS、WMS-C、WMTS、TMS,以及Googl Maps KML 和 Virtual Earth等。

    GeoServer创建缓存的方式有两种,1️⃣ 当用户查看地图时创建浏览的地图范围及相应等级下的部分缓存,主要优点是,它不需要预处理,并且仅缓存已请求的数据,因此也可节省磁盘空间。该方法的缺点是地图查看只会间歇性地加速,从而降低了用户体验的质量; 2️⃣ 通过Seed创建,缺点是Seed可能是非常耗时和磁盘消耗的过程。

   生成瓦片缓存(一)

    以之前发布的天河路网为例 [ 点击此处跳转 ] ,选择了以application/vnd.mapbox-vector-tile(即矢量瓦片)发布。发布成功后,我们可以看到【geoserver安装目录下 / data_dir / gwc /】目录下新建了一个名为 cite_tianhe 的空文件夹

    当我们使用 leaflet 成功调用该 TMS 服务时 [代码], 我们可以看见目录下有了新文件

     注:pbf文件信息解析

    若是基于Tomcat部署的GeoServer配置GeoWebCache,在浏览器里进入http://localhost:8080/geoserver/gwc ,拉到下面可以看到该路径 

   可以进入./tomcat8/webapps/geoserver/WEB-INF/下的web.xml,添加如下代码对配置进行修改:

<context-param><param-name>GEOWEBCACHE_CACHE_DIR</param-name><param-value>/home/用户名/tomcat8/webapps/geoserver/data/gwc/</param-value>
</context-param>

   生成瓦片缓存(二)

    启动 geoserver 后,进入 http://localhost:8081/geoserver/gwc/ (端口根据自己情况修改

    点击 list 选项,可以看到能够切图的图层:   

    还是用发布的天河路网为例,点击 Seed this layer 

     填写表单进行预切片,即事先进行切片(在点击 Submit 前,为了展示这两种操作的作用,我把 cite_tianhe 文件夹清空了

    切片完成后,我们再来看看 cite_tianhe 文件夹

    可以看出,两种最终效果是一样的(格式不同是因为切片时选择了 image/png

     当我们的数据很大,加载要费很多时间时,我们就该事先进行瓦片切图,这样当客户端用户调用时,就能加快数据加载速度,提高用户体验感,而如果我们只是较小的数据,就可以通过构建URL来自动开启瓦片缓存服务。为什么这样能实现瓦片缓存呢?原因就在于URL中加上 gwc / service。

其它

    👉 摘录自 GeoWebCache参数之pixelSize(像素大小)

    在 WMS 图层参数中有 bbox、height 和 width 这三个参数可唯一确定所请求的地理视图范围与缩放级别。bbox 指可视的地理范围,由4个边界值可确定中心点,而 bbox 的宽度(实地距离)除以 width(图片距离)即是 Resolution(分辨率)。但是没有 PPI,是不能确定 Scale (比例尺)的。换句话说,由 Resolution、Center、Width、Height 可唯一确定可视范围,但 Sclae无法确定。

    所以如果之前在定义Gridset中你采用的是分辨率(resolutions),那么这个参数没有什么影响,如果你用的是比例尺(scaleDenominators),那么就要认真对待pixelSize这个参数了,从官方问当中可以看出,可选参数pixe size所对应的默认DPI为90.71428571428572,但现在的电脑默认的DPI为96,这就使得从GWC传入客户端的图片被缩小了,这样字体也与之变小。所以在Gridset中将pixeSize改为0.26458mm/pixel ,问题解决。

    👉 geoserver矢量瓦片发服务前端展示偏移问题解决

    👉 切图效果失真问题

    👉 独立部署GeoWebCache

结语

    特别鸣谢大佬李晓晖,通过对他的博文(利用GeoWebCache实现WebGIS地形图展示的缓存优化 - 李晓晖 - 博客园)学习后对WebGIS有了更进一步的认识。

这篇关于GeoServer:地图服务与GeoWebCache缓存优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/541827

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案