WMS反射镜¶
概述¶
标准的WMS请求可能非常长和冗长。例如,下面返回一个Openlayers应用程序,并将800x600图像设置为显示该功能 topp:states
,通过提供适当的边界框将边界设置为西北半球:
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像素宽的地图,但高度将调整为特征的纵横比。
使用WMS反射镜¶
要使用WMS反射镜,只需指定 wms/reflect?
而不是 wms?
在请求中。WMS reflector调用的唯一强制参数是 layers 参数。如上所述,反射器填充其余参数的合理默认值。下表列出了使用的所有默认值:
请求 |
获取地图 |
服务 |
大规模杀伤性武器 |
版本 |
1.1.1 |
格式 |
图片/png |
宽度 |
512 |
高度 |
512如果未指定宽度 |
SRS |
EPSG:4326 |
口技 |
层的边界 |
指定请求时,可以覆盖这些默认值中的任何一个。这个 styles 参数是通过使用GeoServer为每个 layer 在layers参数中指定。
从反射器请求数据时,随WMS请求一起发送的任何参数也是合法的。它的强度是它对您没有指定的参数所做的,这将在下一节中进行探讨。
层 :这是唯一的必需参数。它是一个逗号分隔的层列表,您希望包含在图像或OpenLayers应用程序中。
格式 :默认输出格式为image/png。可选方案包括image/jpeg(适用于栅格背景)、image/png8(8位颜色、较小的文件)和image/gif
宽度 :描述图像的宽度,或者是OpenLayers中地图的大小。默认为512像素,可以根据边界框的高度和纵横比进行计算。
高度 :描述图像的高度,或者是OpenLayers中的地图。它可以根据边界框的宽度和纵横比进行计算。
bbox :边界框由指定层边界的并集自动确定。本质上,它决定了地图的范围。默认情况下,如果不指定bbox,它将显示所有内容。如果你有洛杉矶的一层,还有纽约的另一层,它将向你展示美国的大部分地区。边界框(自动设置或指定)还确定地图的纵横比。如果只指定宽度或高度中的一个,则另一个将根据边界框的纵横比确定。
警告
如果指定高度、宽度和边界框,则自由度为零,如果纵横比与图像不匹配,则图像将被扭曲。
风格 :您可以通过提供一个逗号分隔的列表来覆盖默认样式,其中包含服务器必须知道的样式名称。
srs :空间参考系(SRS)参数有些困难。如果未指定,WMS反射器将使用爱普生:4326/WGS84。它还将支持层的本机SRS,前提是所有层共享同一个SRS。
例1¶
请求图层顶部:状态,它将以默认样式(人口统计)、宽度(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¶
在上面的例子中,限制层是很难看到的,因为它比美国小。为了让用户有机会获得更好的视图,如果他们选择,我们可以返回Openlayers应用程序。放大南达科他州(SD)以查看限制区域:
http://localhost:8080/geoserver/wms/reflect?format=application/openlayers&layers=topp:states,sf:restricted&width=640
例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
输出到网页¶
假设你有一个网页,你希望包含一个400像素宽的图片,显示图层 topp:states
,在本页。
<img src="http://localhost:8080/geoserver/wms/reflect?layers=topp:states&width=400" />
如果希望在地理服务器完成之前在浏览器中呈现页面,则应指定图片的高度和宽度。您可以选择任何近似值,但最好先查看生成的图像,然后使用这些值。对于上面的层,高度变为169像素,因此我们可以将其指定为<img>标记中的属性:
<img src="http://localhost:8080/geoserver/wms/reflect?layers=topp:states&width=400" height="169" width="400"/>
如果担心层的边界可能会更改,从而使高度相对于宽度发生更改,则还可能需要在反射器的URL中指定高度。这样可以确保图层始终居中并适合400x169画布。
反射器还可以创建 OpenLayers 显示您在请求中指定的层。一个可能的应用程序是将上面的图像转换成一个链接,该链接指向同一功能的OpenLayers实例,如果您认为少数用户希望更仔细地查看,那么这个链接特别方便。要链接到此JavaScript应用程序,需要指定反射程序的输出格式: format=application/OpenLayers
::
http://localhost:8080/geoserver/wms/reflect?format=application/openlayers&width=400
然后上面的图像变成
<a href="http://localhost:8080/geoserver/wms/reflect?format=application/openlayers&layers=topp:states">
<img src="http://localhost:8080/geoserver/wms/reflect?layers=topp:states&width=400" height="169" width="400" />
</a>
(为了清晰起见,A标签位于不同的行上,它们实际上会在图像前后产生一个空间)。
iframe中的openlayers¶
许多人不喜欢iframes,有充分的理由,但在这种情况下他们可能是合适的。下面的示例将在iframe中运行openlayers。
<iframe src ="http://localhost:8080/geoserver/wms/reflect?format=application/openlayers&layers=topp:states" width="100%">
</iframe>
或者,您可以在单独的网页中打开Openlayers,并在浏览器中选择“查看源代码”。通过复制HTML,您可以在不使用iframe的情况下在自己的页面中插入Openlayers客户机。