地图上下文¶
- 作者
杰夫麦克纳
- 联系
jmckenna在gatewaygeomatics.com
- 最后更新
2019-11-21
目录
介绍¶
术语“地图背景”来自开放的地理空间结构(OGC) Web Map Context Specification v1.0.0 与OGC一致 Web Map Server Specification (WMS) v1.1.1 .映射上下文是描述一个或多个WMS服务器上的层外观的XML文档,可以在客户端之间传输,同时维护启动视图、视图状态(及其层)和存储其他层信息。
在版本3.7/4.0中,对OGC Web映射上下文的支持已添加到MapServer。这允许客户端应用程序以标准XML格式加载和保存映射配置。MapServer可以读取0.1.2、0.1.4、0.1.7、1.0.0、1.1.0版本的上下文文档,并可以导出0.1.4、0.1.7、1.0.0、1.1.0版本的内容。向MapServer 4.10添加了Web地图上下文1.1.0支持
本文档假定您已经熟悉MapServer的某些方面:
MapServer应用程序开发和设置 mapfiles .
熟悉WMS规范将是一种优势。有关关联源的链接,请参阅以下部分。
实现Web映射上下文¶
特殊构建注意事项¶
地图上下文支持需要proj4、GDAL/OGR和php支持库。
在您的系统上构建/安装上述库,然后使用*'——使用wmsclient——使用proj——使用ogr——使用gdal——使用php’配置选项构建mapserver。同时确保您的构建使用 *USE_WMS_LYR 和 USE_OGR 旗帜。有关mapserver编译的更多详细信息,请参阅相应的howto: Unix / Windows
Windows用户可以使用 MS4W ,可供映射上下文使用。
映射上下文映射文件¶
映射上下文文档只能包含WMS层(例如ConnectionType WMS)。请参阅 MapServer WMS Client HowTo 有关声明WMS层的详细信息。
映射文件元数据¶
mapserver使用以下mapfile元数据来处理映射上下文信息:
(注意,有些参数有宽度、高度、格式和href,有些参数只有格式和href。这是因为宽度和高度仅用于没有文本或HTML的图像和参数。为了与规范保持一致,MapServer支持所有参数的高度和宽度,但它们只能用于图像)
Web对象元数据¶
ows_schemas_location
wms_abstract
wms_address
wms_addresstype
wms_city
wms_contactelectronicmailaddress
wms_contactfacsimiletelephone
wms_contactorganization :
wms_contactperson :
wms_contactposition :
wms_contactvoicetelephone
wms_context_fid
wms_context_version
wms_country
wms_descriptionurl_format
wms_descriptionurl_href
wms_keywordlist
wms_logourl_width
wms_logourl_height
wms_logourl_format
wms_logourl_href
wms_postcode
wms_stateorprovince
wms_title
层对象元数据¶
wms_abstract
wms_dataurl_href
wms_dataurl_format
wms_dimension :
4.10 新版功能.
使用的当前维度。
wms_dimensionlist :
4.10 新版功能.
可用维列表。
wms_dimension_%s_default :
4.10 新版功能.
默认尺寸值。如果未指定,MapServer将检查WMS_TIME和WMS_TIME默认元数据。%s=维度的名称。
wms_dimension_%s_multiplevalues :
4.10 新版功能.
多个尺寸值。%s=维度的名称。
wms_dimension_%s_nearestvalue :
4.10 新版功能.
最接近的尺寸值。默认值为0。%s=维度的名称。
wms_dimension_%s_units :
4.10 新版功能.
尺寸值的单位。默认值为ISO8601。%s=维度的名称。
wms_dimension_%s_unitsymbol :
4.10 新版功能.
标注单位的符号。缺省值为t.%s=维度的名称。
wms_dimension_%s_uservalue :
4.10 新版功能.
用户维度值。如果未指定,MapServer将检查WMS_TIME和WMS_TIME默认元数据。%s=维度的名称。
wms_format
wms_formatlist
wms_metadataurl_href
wms_metadataurl_format
wms_name
wms_onlineresource : Required 访问服务器的URL。
wms_server_version
wms_server_title
wms_stylelist
wms_style_%s_legendurl_width
wms_style_%s_legendurl_height
wms_style_%s_legendurl_format
wms_style_%s_legendurl_href
wms_style_%s_sld
wms_style_%s_sld_body
wms_style_%s_title
wms_title
示例映射上下文映射文件¶
1 MAP
2
3 NAME "mapcontext"
4 STATUS ON
5 SIZE 400 300
6 SYMBOLSET "../etc/symbols.txt"
7 EXTENT -180 -90 180 90
8 UNITS DD
9 SHAPEPATH "../data"
10 IMAGECOLOR 255 255 255
11 FONTSET "../etc/fonts.txt"
12
13
14 #
15 # Start of web interface definition
16 #
17 WEB
18 IMAGEPATH "/ms4w/tmp/ms_tmp/"
19 IMAGEURL "/ms_tmp/"
20 METADATA
21 "wms_abstract" "Demo for map context document. Blah blah..."
22 "wms_title" "Map Context demo" #### REQUIRED
23 END
24 END
25
26 PROJECTION
27 "init=epsg:4326"
28 END
29
30 #
31 # Start of layer definitions
32 #
33
34 LAYER
35 NAME "country_bounds"
36 TYPE RASTER
37 STATUS ON
38 CONNECTION "https://demo.mapserver.org/cgi-bin/wms?"
39 CONNECTIONTYPE WMS
40 METADATA
41 "wms_title" "World Country Boundaries" #### REQUIRED
42 "wms_onlineresource" "https://demo.mapserver.org/cgi-bin/wms?" #### REQUIRED
43 "wms_srs" "EPSG:4326"
44 "wms_name" "country_bounds"
45 "wms_server_version" "1.1.1"
46 "wms_format" "image/gif"
47 "wms_dimensionlist" "time,width"
48 "wms_dimension" "time"
49 "wms_dimension_time_unitsymbol" "t"
50 "wms_dimension_time_units" "ISO8601"
51 "wms_dimension_time_uservalue" "1310"
52 "wms_dimension_time_default" "1310"
53 "wms_dimension_time_multiplevalues" "1310,1410"
54 "wms_dimension_time_nearestvalue" "0"
55 END
56 END
57
58 END # Map File
测试映射上下文支持¶
首先要做的是使用savemapcontext函数保存映射文件,该函数可从 PHP/MapScript 类库。示例脚本如下所示:
<?php if (!extension_loaded("MapScript")) dl(MODULE); $oMap = ms_newMapObj("mapcontext.map"); $oMap->saveMapContext("mapcontext_output.xml"); ?>
扫描XML输出以查找*<!--警告:…> >注释。然后进行必要的更改以修复您遇到的每个警告。最后,您应该有一个与映射上下文规范兼容的映射文件。
现在,您可以使用 loadMapContext 来自php/mapscript库的函数。
地图上下文文档示例¶
以下是地图上下文文档示例:
1 <?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
2 <ViewContext version="1.1.0" id="mapcontext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.opengis.net/context" xmlns:sld="http://www.opengis.net/sld" xsi:schemaLocation="http://www.opengis.net/context http://schemas.opengis.net/context/1.1.0/context.xsd">
3 <General>
4 <Window width="400" height="300"/>
5 <!-- Bounding box corners and spatial reference system -->
6 <BoundingBox SRS="EPSG:4326" minx="-180.000000" miny="-90.000000" maxx="180.000000" maxy="90.000000"/>
7 <!-- Title of Context -->
8 <Title>Map Context demo</Title>
9 <Abstract>Demo for map context document. Blah blah...</Abstract>
10 <ContactInformation>
11 </ContactInformation>
12 </General>
13 <LayerList>
14 <Layer queryable="0" hidden="0">
15 <Server service="OGC:WMS" version="1.1.1" title="World Country Boundaries">
16 <OnlineResource xlink:type="simple" xlink:href="https://demo.mapserver.org/cgi-bin/wms?"/>
17 </Server>
18 <Name>country_bounds</Name>
19 <Title>World Country Boundaries</Title>
20 <SRS>EPSG:4326</SRS>
21 <FormatList>
22 <Format current="1">image/gif</Format>
23 </FormatList>
24 <DimensionList>
25 <Dimension name="time" units="ISO8601" unitSymbol="t" userValue="1310" default="1310" multipleValues="1310,1410" nearestValue="0" current="1"/>
26 </DimensionList>
27 </Layer>
28 </LayerList>
29 </ViewContext>
通过CGI映射上下文支持¶
mapserver cgi允许您通过使用上下文参数加载映射上下文,并且您可以将此参数指向本地存储的上下文文件或通过URL访问的上下文文件。有关mapserver cgi的更多信息,请参阅 CGI Reference .
支持本地映射上下文文件¶
有一个新的CGI参数 CONTEXT 用于指定本地上下文文件的。然后,用户可以使用mapserver使用以下语法请求映射:
http://localhost/mapserver.cgi?MODE=map&MAP=/path/to/mapfile.map&CONTEXT=
/path/to/contextfile.xml&LAYERS=layer_name1 layers_name2
备注
从上下文文件创建的所有层的状态都设置为“开”。为了能够显示层,用户需要在url中添加layers参数。
支持通过URL访问上下文文件¶
使用Web可访问上下文文件的语法类似于访问本地上下文文件:
http://localhost/mapserver.cgi?MODE=map&MAP=/path/to/mapfile.map&CONTEXT=
http://URL/path/to/contextfile.xml&LAYERS=layers_name1 layer_name2
出于安全考虑,默认情况下禁用从URL加载文件。要启用此功能,用户需要设置一个名为 CGI_CONTEXT_URL 在允许此功能的默认映射文件中。下面是一个带有config参数的映射文件示例:
# Start of map file
NAME "map-context"
STATUS ON
SIZE 400 300
EXTENT -2200000 -712631 3072800 3840000
UNITS METERS
IMAGECOLOR 255 255 255
IMAGETYPE png
CONFIG "CGI_CONTEXT_URL" "1"
...
WEB
...
END
LAYER
...
END
END
默认 Mapfile¶
要使用映射上下文顺利运行MapServer CGI应用程序,应用程序管理员需要提供一个默认映射文件,其中至少包含将与该上下文文件一起使用的基本必需参数。此默认映射文件可以包含与imagepath和imageurl一样少的信息,也可以包含层列表。来自上下文的信息(例如:层、宽度、高度等)将被附加或替换映射文件中的值。
以下是包含最小必需参数的默认映射文件示例:
1NAME "CGI-CONTEXT-DEMO"
2STATUS ON
3SIZE 400 300
4EXTENT -2200000 -712631 3072800 3840000
5UNITS METERS
6IMAGECOLOR 255 255 255
7IMAGETYPE png
8#
9# Start of web interface definition
10#
11WEB
12 MINSCALE 2000000
13 MAXSCALE 50000000
14#
15# On Windows systems, /tmp and /tmp/ms_tmp/ should be created at the root
16# of the drive where the .MAP file resides.
17#
18 IMAGEPATH "/ms4w/tmp/ms_tmp/"
19 IMAGEURL "/ms_tmp/"
20END
21END # Map File
通过WMS映射上下文支持¶
MapServer还可以将WMS层输出为上下文文档。MapServer通过添加一个request=getContext操作来扩展WMS标准,该操作允许您使用如下调用检索基于WMS的映射文件的上下文:
http://localhost/mapserver.cgi?map=/path/to/mapfile.map&service=WMS&
request=GetContext&version=1.1.0
version参数控制要返回的上下文文档的版本。
默认情况下,getContext被禁用,因为它可能被视为安全问题:它可能公开公开映射文件使用(级联)的WMS层的URL。
要启用它,请在WMS服务器的映射文件中将“wms_getContext_enabled”Web元数据设置为“1”。