GeoServer WMS 服务反射参数

0 阅读8分钟

^ 关注我,带你一起学GIS ^

前言

GeoServer 是一个基于Java的GIS服务器,它使用户能够查看和编辑地理空间数据。GeoServer遵循开放地理空间联盟(OGC)制定的开放标准,在地图创建和数据共享方面提供了极大的灵活性。

文中以GeoServer2.28.2为例进行讲解。

  • GeoServer 简介[1]
  • GeoServer 下载安装(完整版)[2]
  • GeoServer 集群搭建[3]

如果你还没有看过,建议从以上内容开始。

1. 软件环境

本文使用如下软件环境,以供参考,因为GeoSever的运行依赖于JDK,所以还需在服务器安装JDK并配置环境变量。

时间:2026年

系统:Windows 11

openjdk: 17.0.14

GeoServer:2.28.2

cmd窗口输入java -version命令,检查是否输出JDK版本信息。

如果没有,请先安装JDK。

2. GeoServer 服务反射参数

标准的WMS请求可能相当冗长。例如,以下代码将返回一个OpenLayers应用程序,该应用程序设置了一个800x600的图像来显示topp:states特征,并通过提供适当的边界框将边界设置为西北半球:

启动GeoServer服务后,在浏览器访问。

http://localhost:8080/geoserver/wms?service=WMS&request=GetMap&version=1.1.1&format=application/openlayers&width=800&height=600&srs=EPSG:4326&layers=topp:states&styles=population&bbox=-180,0,0,90

地图显示效果如下。

在浏览器或HTML编辑器中输入文本可能相当繁琐且容易出错,WMS Reflector通过为未指定的选项设置良好的默认值,很好地解决了这个问题。

利用反射器,可以将上述请求简化为:

http://localhost:8080/geoserver/wms/reflect?format=application/openlayers&layers=topp:states&width=800

打开浏览器访问以上地址,此时地图显示效果如下。

此请求仅指定希望反射器(wms/reflect)返回一个OpenLayers应用程序(格式=application/openlayers),显示“topp:states”特性(layers=topp:states),并且宽度应为800像素(width=800)。

然而,这并不会返回与上述完全相同的值。相反,反射器将缩放到特征的边界,并返回一个宽度为800像素的地图,但其高度会根据特征的纵横比进行调整。

3. GeoServer 使用 WMS Reflector

要使用WMS反射器,只需在请求中指定wms/reflect?,而不是wms?

WMS反射器调用中唯一的必填参数是layers参数,如上所述,反射器为其余参数填充了合理的默认值,下表列出了所有使用的默认值。

requestgetmap
servicewms
version1.1.1
formatimage/png
width512
height512 if width is not specified
srsEPSG:4326
bboxbounds of layer(s)

在指定请求时,可以覆盖这些默认设置中的任何一个。styles参数是通过使用GeoServer为layers参数中指定的每个图层配置的默认样式派生出来的。

在向反射器请求数据时,通过WMS请求发送的任何参数都是合法的。其优势在于它能处理未指定的参数,下一节将对此进行探讨。

  • layers:这是唯一的必填参数。它是一个以逗号分隔的列表,包含您在图像或OpenLayers应用程序中包含的层。
  • format:默认输出格式为image/png。其他可选格式包括image/jpeg(适用于光栅背景)、image/png8(8位颜色,文件更小)和image/gif
  • width:描述图像的宽度,或者说是OpenLayers中地图的大小。其默认值为512像素,可根据边界框的高度和纵横比进行计算。
  • height:描述图像的高度,或者OpenLayers中的地图的高度。它可以根据边界框的宽度和纵横比计算得出。
  • bbox(边界框):边界框是通过合并指定图层的边界来自动确定的。本质上,它决定了地图的范围。默认情况下,如果不指定边界框,它将显示所有内容。如果你有一个洛杉矶的图层和一个纽约的图层,它将显示美国的大部分地区。自动设置或指定的边界框还决定了地图的宽高比。如果你只指定了宽度或高度中的一个,另一个将根据边界框的宽高比来确定。
  • styles:可以通过提供一个以逗号分隔的样式名称列表来覆盖默认样式,这些样式名称必须为服务器所识别。
  • srs: 空间参考系统(SRS)参数有些复杂。如果未指定,WMS Reflector将使用EPSG:4326 / WGS84。如果所有图层共享同一空间参考系统,它也将支持这些图层的原生空间参考系统。

💡注意:

如果你指定了高度、宽度和边界框,那么自由度就为零,如果宽高比与你的图像不匹配,图像就会被扭曲。

4. WMS Reflector 示例

示例1

请求图层topp:states,它将返回默认样式(人口统计)、宽度(512像素)和高度(根据宽高比调整):

http://localhost:8080/geoserver/wms/reflect?layers=topp:states

就直接返回一张图片。

示例2

请求图层topp:states和sf:restricted,它将返回默认样式,并且指定的宽度(640像素)和高度将自动调整以适应宽高比:

http://localhost:8080/geoserver/wms/reflect?layers=topp:states,sf:restricted&width=640

示例3

在上面的示例中,由于“sf:restricted”图层与美国地图相比非常小,因此很难被看到。为了让用户有机会获得更好的视图(如果他们选择这样做),我们可以返回一个OpenLayers应用程序。放大南达科他州(SD)以查看限制区域:

http://localhost:8080/geoserver/wms/reflect?format=application/openlayers&layers=topp:states,sf:restricted&width=640

sf:restricted图层数据显示如下,但是和topp:state数据叠加在一起的话根本就看不到。

示例4

现在,如果你主要想展示受限层,但同时也要提供上下文,你可以为请求设置边界框。获取坐标最简单的方法是使用示例三中的应用程序,以及地图右下角的坐标。OpenLayers中显示的坐标为x,y,而反射器服务期望给出的坐标格式为bbox=minx,miny,maxx,maxy。确保其中不包含空格,并且使用句点(“.”)作为小数分隔符。在我们的情况下,坐标将为bbox=-103.929,44.375,-103.633,44.500

http://localhost:8080/geoserver/wms/reflect?format=application/openlayers&layers=topp:states,sf:restricted&width=640&bbox=-103.929,44.375,-103.633,44.500

设置了bbox边界框参数之后,能够顺利看到这个小图层。

5. 输出为网页

假设你有一个网页,并且希望在该页面上插入一张宽度为400像素的图片,该图片展示了“topp:states”图层。

新建一个html页面,将<img src="http://localhost:8080/geoserver/wms/reflect?layers=topp:states&width=400"/>添加到body标签中。页面内容显示如下。

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <img src="http://localhost:8080/geoserver/wms/reflect?layers=topp:states&width=400" />
</body>
</html>

在浏览器中打开,这是显示效果图。

如果你希望在GeoServer 完成之前在浏览器中渲染页面,则应指定图片的高度和宽度。你可以选择任何近似值,但最好先查看生成的图像,然后再使用这些值。对于上述图层,高度变为 169 像素,因此我们可以在  标签中将其指定为属性:

如果你担心图层的边界可能会发生变化,从而导致高度相对于宽度的变化,你可能还需要在指向反射器的URL中指定高度。这样可确保图层始终居中并适配400x169的画布。

6. GeoServer 账户信息

GeoServer默认账号信息

访问地址:http://localhost:8080/geoserver

端口:8080

账户: admin

密码:geoserver

7. 参考资料

https://docs.geoserver.org/latest/en/user/tutorials/wmsreflector.html

GIS之路 开发示例数据下载,请在公众号后台回复:vector

全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试


GIS之路 公众号已经接入了智能助手**,** 可以在对话框进行提问,也可以直接搜索历史文章进行查看。

都看到这了,不要忘记点赞、收藏 + 关注

本号不定时更新有关 GIS开发 相关内容,欢迎关注 !