WMS服务器¶
- 作者
杰夫麦克纳
- 联系
jmckenna在gatewaygeomatics.com
- 最后更新
2022-01-25
目录
介绍¶
WMS(或Web地图服务器)允许使用来自多个不同服务器的数据,并允许创建一个地图服务器网络,客户机可以从该网络构建自定义地图。以下文件基于开放地理空间联盟(OGC) Web Map Server Interfaces Implementation Specification v1.1.1 .
要实现WMS功能,需要MapServer v3.5或更高版本。在编写本文档时,MapServer支持以下WMS版本:1.0.0、1.0.7、1.1.0(亦称1.0.8)、1.1.1和1.3.0。
本文档假定您已经熟悉MapServer的某些方面:
MapServer应用程序开发和设置.map文件。
熟悉WMS规范将是一种优势。下面的“WMS相关信息”部分包含了指向WMS规范文档的链接。
大规模杀伤性武器是如何工作的¶
WMS服务器通过HTTP协议与客户机交互。在大多数情况下,WMS服务器是一个CGI程序。MapServer也是如此。
WMS规范定义了许多请求类型,并且为每个请求类型定义了一组查询参数和关联的行为。符合WMS的服务器必须至少能够处理以下两种类型的WMS请求:
对以下类型的支持是可选的:
**GetFeatureInfo:**返回查询(鼠标单击)位置的功能信息。MapServer支持3种对此请求的响应类型:
**DescribeLayer:**返回一个或多个映射层的XML描述。要执行此操作:
对于矢量图层:要获得有效的返回,用户需要在地图级别或图层级别(如果定义了图层级别的元数据,则使用图层级别的元数据)设置WFS OnlineResource(或OWS OnlineResource)元数据-对于栅格图层:元数据是与上述逻辑相同的WCS OnlineResource。
**GetLegendgraphic:**返回请求层的带有标签的图例图像(图标)。有关此请求的更多信息,请参阅本文档后面的GetLegendgraphic部分。
具体来说,对于mapserver,知道如何处理WMS请求的是“mapserv”CGI程序。因此,使用mapserver设置WMS服务器需要安装 MAPSERV公司 CGI程序和设置一个包含适当元数据的映射文件。这在本文档的其余部分中介绍。
使用mapserver设置WMS服务器¶
安装所需软件¶
WMS请求由 MAPSERV公司 CGI 程序。并非所有版本的mapserv程序都包含WMS支持(在与proj库一起编译时,默认情况下会包含它),因此第一步是检查mapserv可执行文件是否包含WMS支持。验证这一点的一种方法是使用“-v”命令行开关并查找“supports=wms_server”。
(Unix用户应参考 在Unix上编译 任何编译说明的文档,Windows用户可能希望使用 MS4W ,随WMS/WFS支持一起提供)
例1。在UNIX上:
$ ./mapserv -v
MapServer version 7.7-dev OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ
SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS
SUPPORTS=RSVG SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER
SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT
SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=GEOS SUPPORTS=PBF
INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
例2。在Windows上:
C:\ms4w> mapserv -v
MapServer version 7.7.0-dev (MS4W 4.0.5) OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML
SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO
SUPPORTS=SVG_SYMBOLS SUPPORTS=SVGCAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI
SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER
SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER
SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS SUPPORTS=POINT_Z_M
SUPPORTS=PBF INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
为WMS设置映射文件¶
安装的WMS服务器的每个实例都需要有自己的映射文件。它只是一个常规的mapserver映射文件,其中一些参数和一些元数据条目是必需的。为了生成有效的getCapabilities输出,大多数元数据都是必需的。
以下是参数和元数据项的列表,这些参数和元数据项通常是MapServer的可选项,但对于WMS配置是**必需的(或强烈推荐的):。**
在地图级别:
地图名称
地图投影
映射元数据(在Web对象中):
wms_title
wms_onlineresource
wms_srs(除非使用“init=epsg:…”定义投影对象)
wms_enable_request
每层:
层名称
层投影
层元数据
wms_title
WMS U SRS(可选,因为层继承地图的SRS值)
层状态
设置为状态默认值的层将始终发送到客户端。
客户机可以请求设置为status on或status off的层。
层模板(GetFeatureInfo请求需要-请参阅 模板法 )
让我们更详细地介绍一下这些参数:
地图名称和WMS标题:
WMS功能要求每个层都有一个名称和标题标签。映射的名称和wms-title元数据将用于在getcapabilities xml输出中设置根层的名称和标题。WMS上下文中的根层对应于整个映射文件。通过设置
wms_rootlayer_name
到""
.层名称和wms_标题元数据:
每一层都需要它自己独特的名称和标题。图层名称也用于getmap和getfeatureinfo请求,以引用应包含在地图输出和查询中的图层。设置WMS服务器时,层名称必须以字母开头(层名称不应以数字开头或包含空格)。
地图投影和WMS的SRS元数据:
WMS服务器必须通告能够使用EPSG投影代码提供数据的投影(请参见 The EPSG web page for more background on EPSG codes). The PROJ 库附带EPSG初始化代码表,并允许用户定义如下投影:
PROJECTION "init=epsg:4269" END
(注意,在PROJ'init'指令中使用时,“epsg”必须小写。)
如果 MAP PROJECTION 块的格式为“init=epsg:xxxx”,那么MapServer还将使用此信息为WMS功能文档中的顶层生成一个<boundingbox>标记。boundingbox是WMS 1.3.0的WMS功能的强制元素(对于WMS 1.1.0,它是可选的,但在可能的情况下允许mapserver包含它是很好的做法)。
以上内容足以让MapServer识别EPSG代码并将其包含在功能输出中的SRS标记中(在这种情况下不需要wms_SRS元数据)。但是,通常不可能找到与数据投影匹配的EPSG代码。在这些情况下,“wms_srs”元数据用于列出一个或多个EPSG代码,数据可以在其中提供服务,并且投影对象包含数据投影的实际PROJ定义。
以下是其数据位于Lambert保角圆锥投影(3978)中的服务器的示例。其功能输出将通告EPSG:3857(Web墨卡托)、EPSG:4269和EPSG:4326投影(经度/纬度),但投影对象设置为数据所在的实际投影:
NAME "DEMO" ... WEB ... METADATA "wms_title" "WMS Demo Server" "wms_onlineresource" "http://my.host.com/cgi-bin/mapserv?map=/path/to/your-mapfile.map" #must change mapfile path "wms_srs" "EPSG:3857 EPSG:4269 EPSG:4326" END END PROJECTION "init=epsg:3978" END ... END
除了EPSG:xxxx投影之外,WMS服务器还可以在AUTO:xxxx命名空间中公布投影。MapServer在内部支持自动投影42001到42005。但是,自动投影仅对智能WMS客户端有用,因为客户端需要在对服务器的WMS请求中定义投影参数。有关更多信息,请参见 WMS 1.1.1 specification 以及同一文件的第6.5.5.2节。另请参见本文档末尾的自动投影常见问题解答。
层投影和wms-srs元数据:
默认情况下,层继承其父层的SRS(在MapServer情况下映射的投影)。因此,没有必要(但仍然强烈建议)为每个层提供投影和wms-srs。如果未提供图层投影,则假定为顶层地图投影。
图层投影和WMS的SRS元数据的定义方式与地图的投影和WMS的SRS元数据完全相同。
对于矢量层,如果以“init=epsg:XXXX”格式提供投影块,那么MapServer还将使用此信息在WMS功能文档中为该层生成一个<boundingbox>标记。boundingbox是WMS 1.3.0的WMS功能的强制元素(对于WMS 1.1.0,它是可选的,但在可能的情况下允许mapserver包含它是很好的做法)。
“wms-onlineresource”元数据:
wms-onlineresource元数据在映射的Web对象元数据中设置,并指定访问服务器时应使用的URL。这对于getCapabilities输出是必需的。如果没有提供wms-onlineresource,那么mapserver将尝试使用脚本名和主机名提供一个默认的资源,但是您不应该过于依赖它。强烈建议您提供WMS联机资源元数据。
见第6.2.2节 WMS 1.1.1 specification 关于在线资源URL的整个故事。基本上,您需要的是一个完整的HTTP URL,包括HTTP://prefix、hostname、script name,可能是一个“map=”参数,并以“?”结尾或“&”。
以下是有效的联机资源URL:
http://my.host.com/cgi-bin/mapserv?map=/path/to/your-mapfile.map" #must change mapfile path
通过在服务器上创建包装脚本,可以从URL中隐藏“map=”参数,然后服务器的联机资源URL可以类似于:
http://my.host.com/cgi-bin/mywms?
这在下面的“更多关于在线资源URL”一节中有更详细的介绍。
“WMS U ENABLE U REQUEST”元数据:
指定要启用的请求。如果未指定,则不会启用任何请求!请参阅下面的解释。
正在为GetFeatureInfo请求配置:
必须将层模板参数设置为可由GetFeatureInfo请求查询的层(请参见 模板法 )对于“text/html”类型的请求,还应设置层的页眉和页脚参数。
从MapServer 4.6开始,您必须为要服务的层属性设置*gml_**元数据(请参阅本文档后面的参考部分中的层对象元数据)。要包含几何图形,必须指定gml_几何图形和gml_uu[geometry name]_类型。
以下是GetFeatureInfo请求的工作示例: text/plain / text/html / gml (对于GML,您的浏览器可能会要求您保存该文件,如果是这样,请将其本地保存为.gml文件并在文本编辑器中查看)
测试WMS服务器¶
验证功能元数据¶
好了,现在我们有了一个映射文件,我们必须检查服务器返回的XML功能,以确保没有遗漏。
使用Web浏览器,访问服务器的联机资源URL,在其末尾添加参数“service=wms&version=1.1.1&request=getcapabilities”,例如。
http://my.host.com/cgi-bin/mapserv?map=/path/to/your-mapfile.map&SERVICE=WMS&VERSION=1.1.1
&REQUEST=GetCapabilities
以下是一个正在运行的getcapabilities请求(请注意,所有getcapabilities请求都需要服务参数):
https://demo.mapserver.org/cgi-bin/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities
这将返回一个mime类型application/vnd.ogc.wms_xml的文档,因此您的浏览器可能会提示您保存该文件。保存并在文本编辑器(emacs、记事本等)中打开它,您将看到从WMS服务器返回的XML。
如果在XML输出中收到错误消息,请采取必要的操作。常见问题和解决方案列在本文档末尾的常见问题解答中。
如果一切顺利,您应该有一个完整的XML功能文档。搜索“警告”一词…MapServer插入以“<!”开头的XML注释。--警告:“在XML输出中,如果检测到丢失的mapfile参数或元数据项。如果在XML输出中注意到任何警告,那么在向WMS客户机注册服务器之前,必须修复所有这些警告,否则事情可能不会发生。
注意,当一个请求发生时,它将通过mapserver中的wms、wfs和wcs(按该顺序)传递,直到其中一个服务响应它为止。
使用getmap请求进行测试¶
好了,既然我们知道我们的服务器可以生成有效的XML getCapabilities响应,那么我们应该测试getmap请求。mapserver只检查一些必需的getmap参数,因此下面将解释最小mapserver参数和有效的getmap请求。
以下是根据WMS规范所需的getmap参数列表:
备注
WMS服务器只公布作为gd/gdal库一部分的支持格式。
因此,一个有效的例子是:
http://my.host.com/cgi-bin/mapserv?
map=/path/to/your-mapfile.map
&SERVICE=WMS&VERSION=1.1.1
&REQUEST=GetMap&LAYERS=prov_bound&STYLES=&SRS=EPSG:4326
&BBOX=-173.537,35.8775,-11.9603,83.8009&WIDTH=400&HEIGHT=300
&FORMAT=image/png
这是一个工作 valid request .
小技巧
从MapServer8.0开始, tile_map_edge_buffer 通过添加供应商特定的参数,还可以在WMS GetMap请求中使用元数据 TILED=TRUE 您的GetMap请求。
参见
用真正的客户进行测试¶
如果您有权访问WMS客户机,那么就用它注册新服务器的在线资源,您应该关闭并运行它。
如果您还没有安装自己的WMS客户机,以下是一些提示:
mapserver本身可以用作wms客户机,请参见 MapServer WMS Client Howto .
QGIS 是一个完整的地理信息系统包,包括WMS客户端支持。(推荐)
OpenJUMP 是一个包含WMS客户端支持的桌面GIS包。
uDig 是允许用户添加WMS层的桌面包。
Deegree 提供WMS客户端。
这个列表并不详尽,有几个开源或专有的包提供了WMS支持,可以用于与新的MapServer WMS服务器实例交互。
获取图例图形请求¶
此请求返回指定层的图例图像(图标)。请求将为层上定义的所有类绘制一个图标和标签。如果请求的图层名是组名,则所有包含的图层都将返回到图例图标中。
要求¶
要启用此GetLegendgraphic请求,WMS服务器映射文件中需要以下内容:
图例对象。
每个层的类对象。
类对象中的名称。
必须将每个层的状态设置为“开”。
参数¶
以下是此GetLegendGraphic请求的有效参数:
LAYER -(必需)要返回的图例图像的WMS层的名称。请注意,这是getCapabilities中层的<name>参数。
FORMAT -(必需)图例图像的格式(例如“image/png”)。
WIDTH -(可选)图例图像的宽度。请注意,只有当请求中也使用了rule参数时,才使用width参数。
HEIGHT -(可选)图例图像的高度。请注意,只有当请求中也使用了规则参数时,才使用height参数。
SLD -(可选)SLD的URL。在图层上应用SLD,并在应用SLD后绘制图例(使用SLD指定的类)。请注意,您需要在rule元素中放置一个<name>class1<name>以便从sld创建类名,从而创建正确的图例图像。
SLD_BODY -(可选)SLD的主体(代码),而不是指定URL(如“sld”参数)。
SLD_VERSION -(可选)SLD版本。
SCALE -(可选)指定比例,以便只有属于该比例的层才会有图例。
STYLE -(可选)样式。
RULE -(可选)指定要为其生成图例图像的类的名称(而不是为层的所有类生成图标和标签)。
备注
在正常CGI模式下用于绘制图例的所有规则都适用于此处。见 CGI Reference doc 如有必要。
这个 CLASS 对象的keyImage参数也可用于指定类的图例图像。见 MapFile Reference doc 如有必要。实例请求
示例请求可能如下所示:
http://127.0.0.1/cgi-bin/mapserv.exe?map=/path/to/your-mapfile.map&SERVICE=WMS&VERSION=1.1.1&layer=park&
REQUEST=getlegendgraphic&FORMAT=image/png
与内容相关的图例¶
MapServer 6.4 MS RFC 101:添加对与内容相关的图例响应的支持 .
更改联机资源URL¶
如上文“设置mapfile/wms-online resource元数据”一节所述,根据第6.2.2节或WMS 1.1.1规范,以下联机资源URL对于mapserver wms完全有效:
http://my.host.com/cgi-bin/mapserv?map=/path/to/your-mapfile.map
但是,有些人会认为上面的URL包含强制的特定于供应商的参数,这是非法的。首先,我们要指出“map=…”在本例中不被视为特定于供应商的参数,因为它是在线资源URL的一部分,该URL定义为以“?”结尾的不透明字符串。或“&” WMS 1.1.1 section 6.2.2 )
备注
强烈建议您查看 MAP= 通过设置来调用MapServer可执行文件 MS_MAP_PATTERN 或 MS_MAP_NO_PATH 或者隐藏 MAP= 参数,如本文档中所建议的 限制 Mapfile 访问 。中列出了保护服务器安全的所有可能环境变量 环境变量 。
但是不管怎样,即使它是有效的,上面的URL仍然很难看。您可能需要为您的WMS在线资源URL使用更好的URL。以下是一些建议:
apache重写规则(使用apache mod_rewrite)¶
您可以使用apache的mod_rewrite来避免指定映射,或者mapserver url中的任何其他默认参数。此任务包括三个步骤,指定要加载的mod重写模块,为所选目录启用mod重写模块,最后写入.htaccess文件进行重写。
在httpd.conf文件中,mod_rewrite模块在默认情况下处于禁用状态。要启用它,请删除行中的开口
#LoadModule rewrite_module modules/mod_rewrite.so
要使用该模块,必须使用allowoverride指令启用它。这可以在每个服务器或每个目录上完成。如果您只有一台服务器,请在httpd.conf文件中添加一行“allowoverride all”(请参阅Apache文档以确保这一点的安全性)。每个目录是使其在虚拟主机上工作的最简单方法。在httpd.conf insert的<virtualhost>部分中:
<Directory myhtdocsdir>
AllowOverride All
</Directory>
其中myhtdocsdir是为实际虚拟服务器定义为documentroot的目录。
当指令设置为加载并启用mod_rewrite模块时,必须重新启动apache。
在可访问Web的目录中,生成.htaccess文件,如下所示:
RewriteEngine on
RewriteRule wmsmap?(.*) /cgi-bin/mapserv?map=/home/www/mapserverstuff/mymapfile.map&$1
重写器说:给定一个以wmsmap开头的网页,选择查询参数,从/cgi-bin/mapserv开始发出新的页面请求?地图=(…)?并添加原始页面请求中的查询参数。
例如,网址wmsmap?模式=地图将改写为
- ::
/CGI箱/MAPSERV?map=/home/www/mapserverstuff/mymapfile.map&mode=map
如果只提供了URL wmsmap(没有任何参数),则会显示“找不到页面”错误,因为它与wmsmap不匹配?表达式。
Apache环境变量-ms_mapfile¶
可以使用ms_mapfile环境变量指定默认映射文件:
Alias /mywms /usr/lib/cgi-bin/mapserver
<Location /mywms>
SetHandler cgi-script
Options ExecCGI
SetEnv MS_MAPFILE /path/to/mymapfile.map
</Location>
阿帕切塞特维夫¶
另一种选择是使用Apache的“setenvif”特性:使用所有指向同一个mapserv二进制文件的符号链接,然后对每个符号链接测试URL,并相应地设置映射环境。
对于Windows和Apache用户,步骤如下(这需要Apache 1.3或更高版本):
将mapserv.exe复制到WMS的新名称,例如“mywms.exe”。
在httpd.conf中,添加:
SetEnvIf Request_URI "/cgi-bin/mywms" MS_MAPFILE=/path/to/mymap.map
ASP脚本(IIS-Microsoft Windows)¶
在IIS服务器(Windows)上,可以使用以下ASP脚本:
备注
下面的脚本虽然功能正常,但仅用作使用ASP筛选MapServer请求的示例。在生产WMS服务器中使用ASP可能需要额外的ASP,特别是在错误处理和设置超时方面。*
<%
Server.ScriptTimeout = 360
Select Case Request.ServerVariables("REQUEST_METHOD")
Case "GET" strRequest = Request.QueryString
Case "POST" strRequest = Request.Form
End Select
strURL = "http://myserver/cgi-bin/mapserv.exe?
map=C:\Inetpub\wwwroot\workshop\itasca.map&" & strRequest
Dim objHTTP
Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.open "GET", strURL, false
objHTTP.send ""
Response.ContentType = objHTTP.getResponseHeader("content-type")
Response.BinaryWrite objHTTP.responseBody
Set objHTTP = Nothing
%>
mapscript包装¶
一些OGC服务(WFS、SOS)支持GET和POST请求。在这里,您可以使用最小的mapscript wxs包装器。下面是一个python示例:
#!/usr/bin/python
import mapscript
req = mapscript.OWSRequest()
req.loadParams()
map = mapscript.mapObj('/path/to/config.map')
map.OWSDispatch(req)
包装脚本(Unix)¶
在Unix服务器上,您可以设置一个包装外壳脚本,该脚本设置ms_mapfile环境变量,然后将控制权传递给mapserv可执行文件…这导致了一个cleaner-onlineresource URL:
#! /bin/sh
MS_MAPFILE=/path/to/demo.map
export MS_MAPFILE
/path/to/mapserv
备注
使用/bin/sh包装脚本会导致系统资源的开销,因为必须生成两个进程而不是一个进程,因此不建议这样做。
WMS 1.3.0支持¶
MapServer 5.4增加了对WMS 1.3.0的支持。尽管支持这个新规范的MapServer中的一般机制是相同的,但是有一些值得注意的升级。
坐标系和轴方向¶
WMS 1.3.0中引入的最显著变化是:
坐标轴改变
引入新的坐标参考系
使用CRS参数(而不是SRS)
在先前版本的WMS规范中,轴的顺序是始终使用东距(x或lon)和北距(y或lat)。WMS 1.3.0规定,根据特定的CRS,X轴可以或不可以从西到东,Y轴可以或不可以从南到北。WMS描绘的操作应考虑轴顺序。这会影响一些常用的EPSG代码,如ESPG:4326。mapserver 5.x确保传递给服务器的坐标(作为getmap bbox参数的一部分)以及功能文档中公布的坐标反映了EPSG代码在4000和5000之间的反向轴顺序。
MapServer 6.0和更高版本保存具有倒置轴顺序的EPSG代码列表。它目前基于EPSG数据库版本7.6。还可以在构建时为特定的ESPG代码定义轴顺序(请参见 issue #3582 )。例如,这允许对介于4000和5000之间的一些EPSG代码使用“正常”轴顺序。
此外,WMS 1.3.0定义了一系列新的坐标系。以下是MapServer当前支持的:
CRS:84(WGS 84经度纬度)
CRS:83(最低经度83纬度)
CRS:27(NAD27经度纬度)
自动2:42001(WGS 84/自动UTM)
自动2:42002(WGS 84/Auto Tr.Mercator)
Auto2:42003(wgs 84/自动正交)
Auto2:42004(WGS 84/自动等矩形)
Auto2:42005(WGS 84/自动软体动物)
请求示例¶
用户可以使用CRS:84坐标系,并将bbox坐标定为长/lat:
…&crs=crs:84&bbox=-180.0,-90.0180.0,90.0&… (example request)
用户还可以使用ESPG:4326坐标和lat/long的轴顺序:
…&epsg:4326&bbox=-90.0,-180.0,90180.0&… (example request)
其他显著变化¶
getmap请求中exceptions参数的有效值为xml、inimage和blank。
GetFeatureInfo请求中异常参数的有效值为XML
引入了layerLimit,允许服务器公布并限制允许客户机在getmap请求中包含的层数。
一些缺少的功能¶
WMS 1.3.0 Post请求应该是包含不同操作和参数的XML文档。
包含功能编码1.1规范中的元素的SLD文档可能会将ESPG投影与某些过滤器一起使用。在这些特定的情况下,是否应该考虑轴的排序,目前还不清楚也没有实现。
OCG符合性测试¶
从5.4版开始,mapserver通过了wms 1.3.0的ogc cite测试套件的所有基本测试和查询测试。
参考截面¶
以下元数据在映射文件的设置中可用:
(请注意,下面的每个元数据也可以称为“OWS”,而不是“WMS”。mapserver首先尝试“wms_u*”元数据,如果找不到,则尝试相应的“ows u*”名称。使用它可以减少支持多个OGC接口的映射文件中的重复量,因为“OWS u *”元数据几乎可以在任何地方用于多个OGC接口共享的公共元数据项。)
Web对象元数据¶
ows_allowed_ip_list (或wms-allowed-ip-u列表)
ows_denied_ip_list (或wms_拒绝的_ip_列表)
ows_http_max_age
描述: 一个整数(以秒为单位),用于指定在多长时间内应将给定映射响应视为新响应。设置此指令允许Aware WMS客户端使用此生成的HTTP标头值作为优化(和最小化)对WMS服务器的请求的方法。欲了解更多信息,请访问https://www.mnot.net/cache_docs/#CACHE-CONTROL。
ows_schemas_location
*描述:*(可选)(注意名称OWS模式位置而不是WMS…这是因为所有的OGC Web服务(OWS)都使用相同的元数据)根目录树,其中包含OGC WMS XMLSchema文件系列。如果希望在验证XML分析器中验证WMS输出,则此URL必须是实际.xsd文件所在的有效URL。默认是 http://schemas.opengis.net .
ows_sld_enabled
ows_updatesequence
wms_abstract
wms_accessconstraints
wms_地址类型,wms_地址,wms_城市,wms_州或省,wms_邮政编码,wms_国家/地区
wms_attribution_logourl_format
Description: (Optional) The MIME type of the logo image. (e.g. "image/png"). Note that the other wms_attribution_logourl_* 还必须指定元数据。
参见WMS 1.1.1规范第7.1.4.5.11节。
wms_attribution_logourl_height
wms_attribution_logourl_href
wms_attribution_logourl_width
wms_attribution_onlineresource
wms_attribution_title
wms_bbox_扩展名:
wms_contactelectronicmailaddress
wms_contactfacsimiletelephone
WMS联系人、WMS联系人组织、WMS联系人位置
wms_contactvoicetelephone
wms_enable_request (或) ows_enable_request)
*说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetMap, GetFeatureInfo 和 GetLegendGraphic.
实例:
GetMap 和 GetFeatureInfo:
"wms_enable_request" "GetMap GetFeatureInfo"
启用除'getFeatureInfo'以外的所有请求`
"wms_enable_request" "* !GetFeatureInfo"
wms_encoding
wms_feature_info_mime_type
描述:
用于指定在响应GetFeature请求时可以使用的其他MIME类型。
例如,如果要使用层的HTML模板作为其响应的基础,则需要添加“WMS-FEATURE-INFO-MIME-TYPE”“text/HTML”。设置此项将产生广告文本/html作为GetFeature请求支持的MIME类型之一的效果。您还需要确保层指向有效的html模板(请参见 模板法 )。然后,客户机可以使用info_format=text/html调用服务器。
如果未指定,则默认情况下mapserver将实现text/plain和gml。
wms_fees
wms_getcapabilities_version
wms_getlegendgraphic_formatlist
wms_getmap_formatlist
wms_keywordlist
wms_keywordlist_vocabulary
wms_关键字列表[词汇名称]_项
wms_languages
*描述:*(可选)支持语言的逗号分隔列表。有关详细信息,请参阅本节。 对某些功能字段的多语言支持 在Inspire View服务文档中。
wms_layerlimit
wms_onlineresource
*描述:*(推荐)将用于访问此WMS服务器的URL。此值用于getCapabilities响应。
参见
上面的“设置mapfile/wms-online resource元数据”和“关于联机资源URL的更多信息”部分。
wms_remote_sld_max_bytes
wms资源,wms资源
wms_rootlayer_abstract
wms_rootlayer_keywordlist
wms_rootlayer_name
wms_rootlayer_title
wms_service_onlineresource
*描述:*(可选)顶级OnlineResource URL。MapServer使用OnlineResource元数据(如果提供)的顺序如下:
wms_service_onlineresource
ows_service_onlineresource
三。wms-onlineresource(或自动生成的url,请参阅本文档的onlineresource部分)
wms_srs
描述: (推荐)包含EPSG投影代码的列表,这些代码应通告为可用于此服务器中的所有层。该值可以包含一个或多个以空格分隔的EPSG:<code>对(例如“EPSG:4269 EPSG:4326”)该值应为大写(EPSG:3978.....而不是EPSG:3978),以避免区分大小写的平台出现问题。
另请参见上面的“设置 Mapfile /地图投影和WMS U SRS元数据”一节。
wms_timeformat
*说明:*发送请求时使用的时间格式。(例如,“wms-timeformat”“%y-%m-%d%h,%y-%m-%d%h:%m”)。请看 WMS Time Support Howto 更多信息。
wms_title
层对象元数据¶
gml_exclude_items
*描述:*(可选,仅适用于GetFeatureInfo GML请求)要排除的项的逗号分隔列表。从MapServer4.6开始,您可以使用元数据控制为数据层公开的属性(字段)的数量。以前的行为只是一直公开所有属性。默认情况是根本不公开任何属性。排除特定字段的示例如下:
"gml_include_items" "all" "gml_exclude_items" "Phonenum"
gml_geometries
*描述:*(可选,仅适用于GetFeatureInfo GML请求)提供几何元素的名称。该值被指定为用于几何元素名称的字符串。默认情况下,GML几何图形不会写入GML GetFeatureInfo输出,除非同时设置了GML_几何图形和GML_uu[几何图形名称]_类型。默认情况下,只写入边界框。如果gml_几何设置为“无”,则不会写入边界框或几何。
gml_groups
gml_u[group name]_组
*描述:*(可选,仅适用于GetFeatureInfo GML请求)组中以逗号分隔的属性列表。下面是一个例子:
"gml_include_items" "all" "gml_groups" "display" "gml_display_group" "Name_e,Name_f"
gml_include_items
*描述:*(可选,仅适用于GetFeatureInfo GML请求)要包含的项的逗号分隔列表,或关键字“all”。从MapServer 4.6开始,您可以使用此元数据控制为数据层公开的属性(字段)的数量。以前的行为只是一直公开所有属性。您可以使用关键字“all”启用完全曝光,例如:
"gml_include_items" "all"
可以指定部分曝光的属性(字段)列表,例如:
"gml_include_items" "Name,ID"
新的默认行为是完全不公开属性。
gml_u[item name]_别名
gml_u[item name]_类型
描述: (可选)指定属性的类型。有效值为OGR数据类型:INTEGER |Long| 真实 |Character| 日期 |Time| DateTime|布尔值。MapServer将这些转换为有效的GML数据类型。
备注
从MapServer 7.0.1开始,Long将用于64位整数。
备注
在MapServer8中添加了时间和日期时间。从MapServer8开始,日期语义是日期,没有时间,而在以前的版本中,它被不同地用于日期、时间或日期时间。
gml_uu[geometry name]_类型
*说明:*(可选,仅适用于GetFeatureInfo GML请求)使用GML U几何图形时,还需要指定层的几何类型。这是通过为gml_uuu几何名称类型提供一个值来实现的,其中[几何名称]是为gml_u几何指定的字符串值,并且是以下值之一:
点
多点
线
多线
多边形
多多边形
gml_xml_items
- ows_allowed_ip_list
与Web对象中的“允许使用”列表相同。
- ows_denied_ip_list
与Web对象中的“OWS拒绝”列表相同。
- wms_abstract
与Web对象中的wms_abstract相同。
wms_attribution_logourl_format
Description: (Optional) The MIME type of the logo image. (e.g. "image/png"). Note that the other wms_attribution_logourl_* 还必须指定元数据。
参见WMS 1.1.1规范第7.1.4.5.11节。
wms_attribution_logourl_height
wms_attribution_logourl_href
wms_attribution_logourl_width
wms_attribution_onlineresource
wms_attribution_title
wms_authorityurl_name,wms_authorityurl_href
*描述:*(可选)authorityurl与标识符值一起使用,以提供将标识符信息链接回Web服务的方法。wms_标识符_权限应提供与声明的wms_权限url_名称匹配的字符串。必须同时存在wms-authorityurl-name和wms-authorityurl-href才能将authorityurl标记写入功能。
参见WMS 1.1.1规范第7.1.4.5.12节。
wms_bbox_扩展名:
wms_dataurl_format
wms_dataurl_href
wms_enable_request (或) ows_enable_request)
*说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetMap, GetFeatureInfo 和 GetLegendGraphic.
实例:
GetMap 和 GetFeatureInfo:
"wms_enable_request" "GetMap GetFeatureInfo"
启用除'getFeatureInfo'以外的所有请求`
"wms_enable_request" "* !GetFeatureInfo"
wms_exclude_items
wms_extent
描述: (可选)在MapServer无法(或效率很低)探测数据源以确定其范围(例如使用数据库)的情况下,用于层的边界框标记。该元数据的值是用空格分隔的“minx miny Maxx Maxy”,值以层的投影单位表示。如果提供了WMS_EXTEND,则它具有优先级,并且MapServer不会尝试读取源文件的范围。
参见
对于通过WMS提供服务的Raster,MapServer现在可以使用WMS的扩展元数据参数来注册图像。如果找不到.wld文件,MapServer将查找wms_扩展数据块元数据参数,并使用图像的扩展数据块和图像的大小进行地理注册。
参见
wms_getfeatureinfo_formatlist
描述: (可选)以逗号分隔的格式列表,该列表对GetFeatureInfo请求有效。如果定义了这些格式,则仅在功能文档中公布这些格式。
wms_getlegendgraphic_formatlist
描述: (可选)对GetLegendGraphic请求有效的图像格式的逗号分隔列表。如果定义了这些格式,则仅在功能文档中公布这些格式。
wms_getmap_formatlist
描述: (可选)对GetMap请求有效的图像格式的逗号分隔列表。如果定义了这些格式,则仅在功能文档中公布这些格式。
wms_group_abstract
*描述:*(可选)提供有关组的更多信息的文本的提示。该组只有一个层需要包含wms_group_abstract,mapserver将查找并使用该值。使用组中第一层的值。因此,如果多个层具有wms_group_abstract集,那么只使用第一个值。
wms_group_title
*描述:*(可选)此层所属组的可读名称。该组只有一个层需要包含wms_group_标题,mapserver将查找并使用该值。使用组中第一层的值。因此,如果多个图层设置了wms_group_标题,那么只使用第一个值。
wms_identifier_authority,wms_identifier_value
*描述:*(可选)标识符与authorityurl端点一起使用,以提供将标识符信息链接回Web服务的方法。wms_标识符_权限应提供与声明的wms_权限url_名称匹配的字符串。必须同时存在wms_identifier_authority和wms_identifier_值,才能将标识符标记写入功能。
参见WMS 1.1.1规范第7.1.4.5.12节。
wms_include_items
- wms_keywordlist
与Web对象中的WMS关键字列表相同。
- wms_keywordlist_vocabulary
与Web对象中的wms关键字列表词汇相同。
- wms_关键字列表[词汇名称]_项
与Web对象中的WMS关键字列表[词汇表名称]项目相同。
wms_layer_group
*描述:*(可选)可用于将层分配给多个层次嵌套组。这个分组的层次结构将用能力表示。
在MapServer 7.2中,wms_layer_group类似于group关键字,因为它总是在功能中发布组的名称和图块。因此,使用wms_layer_group设置的组始终可以通过getmap或getfeatureinfo请求(参见wms实现规范版本1.1.1第7.1.4.5.2节)。(OGC 01-068R2))。
与group不同的是,group不支持嵌套的group。此元数据设置的目的是使WMS客户机能够了解层分组。
所有组名前面都应该有一个正斜杠(/)。不允许对单个层同时使用wms_layer_group设置和group关键字。可以将组视为已弃用!
LAYER NAME "mylayer" DATA "mylayer" TYPE LINE CLASS STYLE COLOR 100 100 255 END END METADATA "WMS_LAYER_GROUP" "/rootgroup/subgroup" END END
wms_metadataurl_format
*描述:*(可选)元数据记录的文件格式mime类型(例如“text/plain”)。还必须指定层元数据wms_metadataurl_type和wms_metadataurl_href。
参见WMS 1.1.1规范第7.1.4.5.10节。
要输出多个MetadataURL元素,请使用
wms_metadataurl_list
wms_metadataurl_href
*描述:*(可选)层元数据的URL。还必须指定层元数据wms_metadataurl_格式和wms_metadataurl_类型。
参见WMS 1.1.1规范第7.1.4.5.10节。
要输出多个MetadataURL元素,请使用
wms_metadataurl_list
wms_metadataurl_list
描述: (可选)以空格分隔的元数据键部分列表,以便能够指定多个MetadataURL。如果wms_metadataurl_list的值为“foo bar”,则将使用wms_metadataurl_href、wms_metadataurl_href、wms_metadataurl_foo_type、wms_metadataurl_foo_type、wms_metadataurl_bar_href、wms_metadataurl_bar_type项的语义查询wms_metadataurl_foo_href、wms_metadataurl_foo_type、wms_metadataurl_foo_type、wms_metadataurl_bar_href和wms_metadataurl_type项。
示例:
"wms_metadataurl_list" "xml html" "wms_metadataurl_xml_format" "text/xml" "wms_metadataurl_xml_type" "TC211" "wms_metadataurl_xml_href" "http://example.com/testXML" "wms_metadataurl_html_format" "text/html" "wms_metadataurl_html_type" "TC211" "wms_metadataurl_html_href" "http://example.com/testHTML"
8.0 新版功能.
wms_metadataurl_type
*说明:*(可选)元数据符合的标准。目前只有两种类型有效:“TC211”是指[ISO 19115],而“FGDC”是指[FGDC-STD-001-1988]。还必须指定层元数据wms_metadataurl_格式和wms_metadataurl_href。
参见WMS 1.1.1规范第7.1.4.5.10节。
要输出多个MetadataURL元素,请使用
wms_metadataurl_list
wms_opaque
- wms_srs
与Web对象中的wms-srs相同。
wms_style
*描述:*(可选)legendurl样式名。需要以下元数据:wms u-style u-style's_u-name'u-width、wms u-style u-style's_u-name'u-legendurl-height、wms u-style u-style's_u-name'u-legendurl-format、wms u-style's_u-name'u-legendurl-href
参见WMS 1.1.1规范第7.1.4.5.4节。
wms_style_[style's_name]_legendurl_format
*说明:*(可选)图例图像的文件格式mime类型。需要以下元数据:wms-style uu[样式的名称]Width、wms-style[样式的名称]Legendurl Height、wms-style、wms-style u[样式的名称]Legendurl Href。
参见WMS 1.1.1规范第7.1.4.5.4节。
wms_style_[style's_name]_legendurl_height
*说明:*(可选)图例图像的高度(像素)。需要以下元数据:wms-style uu-style's_u-name]width、wms-style、wms-style u-style's_u-name]legendurl_-format、wms-style u-style's_u-name]legendurl_-href。
参见WMS 1.1.1规范第7.1.4.5.4节。
wms_style_[style's_name]_legendurl_href
*说明:*(可选)层图例的URL。需要以下元数据:wms u-style u-style's_u-name'u-width、wms u-style u-style's_u-name'u-legendrl'u-height、wms u-style u-style's_u-name]legendrl'u-format、wms u-style。
参见WMS 1.1.1规范第7.1.4.5.4节。
wms_style_[style's_name]_legendurl_width
*说明:*(可选)图例图像的宽度(像素)。需要以下元数据:wms_u-style_u-style's_u-name'u-format、wms_u-style's_u-name'legendrl'u-height、wms_u-style、wms_u-style's_u-name'legendrl'u-href。
参见WMS 1.1.1规范第7.1.4.5.4节。
wms_timedefault
*描述:*(时间支持可选)如果定义了该值并且请求中缺少时间值,则使用该值。请看 WMS Time Support Howto 更多信息。
wms_timeextent
*描述:*(时间支持必须使用)此功能用于返回层的有效时间值。此处定义的值应该是有效的时间范围。请看 WMS Time Support Howto 更多信息。
wms_timeitem
*描述:*(时间支持必须使用)这是数据库中包含时间值的字段的名称。请看 WMS Time Support Howto 更多信息。
- wms_title
与Web对象中的wms_标题相同。
层元数据API¶
如果 wms_metadataurl_href
未定义,MapServer将为中的给定层提供指向层元数据API的链接。 <MetadataURL>
元素见 Layer Metadata API 有关详细信息的文档。
供应商特定的WMS参数¶
angle
旋转地图的角度(度)。
备注
角度值是顺时针的度数。
radius
此参数接受两种类型的输入:
以像素为单位指定搜索半径的整数。
bbox
bbox_pixel_is_point
如果此参数为“真”,MapServer将把WMS GetMap请求中接收到的bbox视为以像素为点模式提供的bbox。从本质上来说,禁用从pixel_is_area(wms model)到pixel_的转换是在mapwms.c中针对特定映射文件存在的_点。
级联WMS请求¶
目前,有3个请求支持WMS级联:
GetMap
GetFeatureInfo
GetLegendGraphic
在MapServer 6.2之前,未层叠GetLegendgraphic请求。使用层类返回了一个图例。为了保持这种行为,GetLegendGraphic请求将仅层叠 if:
GetLegendgraphic请求通过 _enable_request 元数据。
层不包含任何具有名称属性集的类。IE:
CLASS NAME "Parks" STYLE COLOR 0 255 0 END END
此层将不会层叠,因为它至少包含一个具有属性名集的类。
备注
如果您知道远程WMS服务器 does not 支持一个给定的WMS请求,您应该使用(OWS/WMS)为您的层显式禁用此请求启用请求元数据。否则,您只需从级联服务器获取XML异常。
WMS服务器映射文件示例¶
以下是一个非常基本的WMS服务器映射文件:
1MAP
2 NAME "WMS-test"
3 STATUS ON
4 SIZE 400 300
5 EXTENT -2200000 -712631 3072800 3840000
6 UNITS METERS
7 SHAPEPATH "../data"
8 IMAGECOLOR 255 255 255
9 FONTSET ../etc/fonts.txt
10
11 WEB
12 IMAGEPATH "/ms4w/tmp/ms_tmp/"
13 IMAGEURL "/ms_tmp/"
14 METADATA
15 "wms_title" "WMS Demo Server" ##required
16 "wms_onlineresource" "http://yourpath/cgi-bin/mapserv.exe?map=/path/to/your-mapfile.map" ##required (must change mapfile path)
17 "wms_srs" "EPSG:3978 EPSG:3857 EPSG:4269 EPSG:4326" ##recommended
18 "wms_enable_request" "*" ##necessary
19 END
20 END # Web
21
22 PROJECTION
23 "init=epsg:3978" ##required
24 END
25
26 SYMBOL
27 NAME "circle"
28 TYPE ellipse
29 POINTS 1 1 END
30 END # Symbol
31
32 #
33 # Start of layer definitions
34 #
35
36 LAYER
37 NAME "park"
38 METADATA
39 "wms_title" "Parks" ##required
40 END
41 TYPE POLYGON
42 STATUS OFF
43 DATA park
44 PROJECTION
45 "init=epsg:3978" ##recommended
46 END
47 CLASS
48 NAME "Parks"
49 STYLE
50 COLOR 200 255 0
51 OUTLINECOLOR 120 120 120
52 END # Style
53 END # Class
54 END # Layer
55
56 LAYER
57 NAME popplace
58 METADATA
59 "wms_title" "Cities" ##required
60 END
61 TYPE POINT
62 STATUS ON
63 DATA popplace
64 PROJECTION
65 "init=epsg:3978" ##recommended
66 END
67 CLASS
68 NAME "Cities"
69 STYLE
70 SYMBOL "circle"
71 SIZE 8
72 COLOR 0 0 0
73 END # Style
74 END # Class
75 END # Layer
76
77END # Map File
常见问题/常见问题¶
- Q
如何找到数据投影的epsg代码?
- A
如果您知道数据投影的一些参数,那么您可以使用https://epsg.io/上的搜索工具来查找数据的相关EPSG码。EPSG官方主页现在还允许您执行投影的文本或地图搜索:https://epsg.org/
为 PROJ 版本>=6:EPSG代码存储在SpatiaLite数据库中 proj.db 在Unix系统上通常位于/usr/local/share/proj/中,在Windows系统中通常位于C:/proj/或C:/proj/nad中(具体取决于安装),对于MS4W用户,具体位置为/MS4W/proj/nad/。
为 PROJ 版本<6:您可以浏览Proj附带的“epsg”文件,并查找与数据的投影匹配的投影定义。这是一个简单的文本文件,EPSG代码位于每行开头的括号(<...>)中。“epsg”文件在Unix系统上通常位于/usr/local/share/proj/中,在Windows系统中通常位于C:/proj/或C:/proj/nad中(具体取决于安装)。MS4W用户可以在/MS4W/proj/nad/中找到epsg文件。
- Q
my wms server生成错误“msprocessprojection():no system list,errno:…”。
- A
这很可能是Proj抱怨它找不到 epsg 投影定义文件(适用于项目版本低于6),或 proj.db 文件(对于项目版本>=6)。确保您已安装 PROJ 那就是 proj.db 文件(或 epsg 根据您的本地项目版本)安装在正确的位置。在Unix上,它应该在/usr/local/share/proj/下,在Windows proj上,它在C:/proj/或C:/proj/nad(取决于安装)下查找,MS4W用户将在/MS4W/proj/nad/中找到该文件。您还应该检查 error documentation 看看你的错误是否被讨论过了。
如果你没有 proj.db 文件(或 epsg 文件),然后您可以将其作为项目分发的一部分从 https://proj.org/ 或者,您也可以手动下载<6 epsg 文件位置: http://www.maptools.org/dl/proj4-epsg.zip 。
- Q
自动投影如何工作?
- A
当WMS客户机调用具有自动投影的WMS服务器时,它必须以如下形式指定SRS:auto:proj_id,unit_id,lon0,lat0,其中:
项目ID是42001、42002、42003、42004或42005中的一个(当前只定义了五个自动投影)。
对于米,单位ID始终为9001。(不确定是否有人支持任何其他单位。)
lon0和lat0是用作投影原点的坐标。
在WMS getCapabilities中使用自动投影时,在WMS的SRS元数据中只包含“auto:42003”字符串,而不包括投影参数。这些是由应用程序(客户端)在运行时根据地图视图添加的。例如:
NAME "DEMO" ... WEB ... METADATA "wms_title" "WMS Demo Server" "wms_onlineresource" "http://my.host.com/cgi-bin/mapserv?map=/path/to/your-mapfile.map" #must change mapfile path "wms_srs" "AUTO:42001 AUTO:42002" "wms_enable_request" "*" ##necessary END # METADATA END # WEB
上述服务器公布前两个自动预测。