^ 关注我,带你一起学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参数,如上所述,反射器为其余参数填充了合理的默认值,下表列出了所有使用的默认值。
| request | getmap |
|---|---|
| service | wms |
| version | 1.1.1 |
| format | image/png |
| width | 512 |
| height | 512 if width is not specified |
| srs | EPSG:4326 |
| bbox | bounds 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开发 相关内容,欢迎关注 !
- GeoTools 开发合集(全)
- OpenLayers 开发合集(全)
- GDAL 开发合集(全)
- ArcPy 开发合集(全)
- ArcPy,一个基于 Python 的 GIS 开发库简介
- GeoTools,一个基于 Java 的 GIS 开发库简介
- Turf,一个基于 JS 的 GIS 开发库简介
- GDAL,一个基于 Python 的 GIS 开发库简介
- GeoJSON 数据源简介
- GIS 影像数据源简介
- GIS 名词解释大全
- GIS 服务器,GeoServer 简介
- 从微信指数看当前 GIS 框架的发展趋势
- Landsat 卫星数据简介
- OGC,开放地理空间联盟简介
- 中国地图 GeoJSON 数据集网站简介
- 高校停招 GIS 专业,背后隐藏着怎样的逻辑?
- 实用小工具推荐合集
- ArcGIS Pro 添加底图的方式
- GIS 坐标转换:Shp 数据重投影