地图上下文¶
- 作者
Jeff McKenna
- 联系方式
jmckenna at 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 ,可供映射上下文使用。
映射上下文 Mapfile¶
映射上下文文档只能包含WMS层(例如ConnectionType WMS)。请参阅 MapServer WMS Client HowTo 有关声明WMS层的详细信息。
Mapfile 元数据¶
mapserver使用以下mapfile元数据来处理映射上下文信息:
(注意,有些参数有宽度、高度、格式和href,有些参数只有格式和href。这是因为宽度和高度仅用于没有文本或HTML的图像和参数。为了与规范保持一致,MapServer支持所有参数的高度和宽度,但它们只能用于图像)
Web对象元数据¶
ows_-schemas_-location:XML模式文档的位置。默认值为http://schemas.opengis.net。有关有效架构树的示例,请参阅http://ogc.dmsolutions.ca。
wms_abstract:提供有关wms服务器的更多信息的文本提示。
wms_address
wms_addresstype
wms_city
wms_contactelectronicmailaddress:联系人电子邮件地址。
wms_contactfacsimilephone:联系传真电话号码。
wms_contactorganization :
wms_contactperson :
wms_contactposition :
wms_contactVoiceTelephone:联系人语音电话号码。
wms_context_fid:上下文的功能ID。如果未指定,则在保存时设置为0。
wms_context_version:映射上下文规范的版本。
wms_country:如果提供,则还必须提供WMS U地址、WMS U City、WMS U StateorProvince、WMS U Postcode和WMS U AddressType。
wms_descriptionurl_format:包含视图相关信息的网页格式。
wms_descriptionurl_href:对包含视图相关信息的网页的引用。
wms_keyword list:用逗号分隔的关键字或关键字短语列表,用于帮助目录搜索。
wms_logourl_width:上下文徽标的宽度。
wms_logourl_height:上下文徽标的高度。
wms_logourl_format:上下文徽标的格式。
wms_logourl_href:上下文徽标的位置。
wms_postcode:如果提供,还必须提供WMS U地址、WMS U市、WMS U州或省、WMS U地址类型和WMS U国家。
WMS U StateorProvince:如果提供,还必须提供WMS U地址、WMS U城市、WMS U地址类型、WMS U邮政编码和WMS U国家。
wms_title
层对象元数据¶
wms_abstract:提供有关wms服务器的更多信息的文本提示。
wms_dataurl_href:链接到在线资源,在该资源中可以找到与层对应的数据。
wms_dataurl_format:可以找到与层对应的数据的联机资源的格式。
wms_dimension:使用的当前维度。
4.10 新版功能.
wms_dimensionlist:可用尺寸列表。
4.10 新版功能.
wms_dimension_%s_default:默认维度值。未指定时,mapserver将检查wms-time和wms-timedefault元数据。%S=维度的名称。
4.10 新版功能.
wms_dimension_%s_multiple values:多个维度值。%S=维度的名称。
4.10 新版功能.
wms_dimension_%s_nearest value:最接近的维度值。默认值为0。%S=维度的名称。
4.10 新版功能.
wms_dimension_%s_units:维度值的单位。默认值为ISO8601。%S=维度的名称。
4.10 新版功能.
wms_dimension_%s_unitsymbol:尺寸单位的符号。默认值为t.%s=维度的名称。
4.10 新版功能.
wms_dimension_%s_user value:用户维度值。未指定时,mapserver将检查wms-time和wms-timedefault元数据。%S=维度的名称。
4.10 新版功能.
wms_format:使用的当前格式。
wms_formatlist:此层的可用格式列表。
wms_metadataurl_href:链接到在线资源,在该资源中可以找到相应层的描述性元数据。
wms_metadataurl_format:可以找到相应层的描述性元数据的联机资源的格式。
wms_name:服务器上wms层的名称。
wms_onlineresource : Required 访问服务器的URL。
wms_server_version:Web地图服务器规范的版本。
wms_server_title:Web地图服务器的标题。
wms_stylelist:使用的当前样式。
wms_-style_%s_-legendurl_-width:描述样式的图像宽度。%S=样式的名称。
wms_-style_%s_-legendurl_-height:描述样式的图像高度。%S=样式的名称。
wms_-style_%s_-legendurl_-format:描述样式的图像格式。%S=样式的名称。
wms_-style_%s_-legendurl_-href:描述样式的图像的位置。%S=样式的名称。
wms_-style_%s_-sld:此样式的SLD文档的URL。%S=样式的名称。
wms_-style_%s_-sld_-body:此样式的sld_-body文档。%S=样式的名称。
wms_-style_%s_-title:层的标题。%S=样式的名称。
wms_title:(必选)此层的名称可读。
示例映射上下文 Mapfile¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | MAP
NAME "mapcontext"
STATUS ON
SIZE 400 300
SYMBOLSET "../etc/symbols.txt"
EXTENT -180 -90 180 90
UNITS DD
SHAPEPATH "../data"
IMAGECOLOR 255 255 255
FONTSET "../etc/fonts.txt"
#
# Start of web interface definition
#
WEB
IMAGEPATH "/ms4w/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
METADATA
"wms_abstract" "Demo for map context document. Blah blah..."
"wms_title" "Map Context demo" #### REQUIRED
END
END
PROJECTION
"init=epsg:4326"
END
#
# Start of layer definitions
#
LAYER
NAME "country_bounds"
TYPE RASTER
STATUS ON
CONNECTION "https://demo.mapserver.org/cgi-bin/wms?"
CONNECTIONTYPE WMS
METADATA
"wms_title" "World Country Boundaries" #### REQUIRED
"wms_onlineresource" "https://demo.mapserver.org/cgi-bin/wms?" #### REQUIRED
"wms_srs" "EPSG:4326"
"wms_name" "country_bounds"
"wms_server_version" "1.1.1"
"wms_format" "image/gif"
"wms_dimensionlist" "time,width"
"wms_dimension" "time"
"wms_dimension_time_unitsymbol" "t"
"wms_dimension_time_units" "ISO8601"
"wms_dimension_time_uservalue" "1310"
"wms_dimension_time_default" "1310"
"wms_dimension_time_multiplevalues" "1310,1410"
"wms_dimension_time_nearestvalue" "0"
END
END
END # Map File
|
测试映射上下文支持¶
首先要做的是使用savemapcontext函数保存 Mapfile ,该函数可从 PHP/MapScript 类库。示例脚本如下所示:
<?php if (!extension_loaded("MapScript")) dl(MODULE); $oMap = ms_newMapObj("mapcontext.map"); $oMap->saveMapContext("mapcontext_output.xml"); ?>
扫描XML输出以查找*<!--警告:…> >注释。然后进行必要的更改以修复您遇到的每个警告。最后,您应该有一个与映射上下文规范兼容的 Mapfile 。
现在,您可以使用 loadMapContext 来自php/mapscript库的函数。
地图上下文文档示例¶
以下是地图上下文文档示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
<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">
<General>
<Window width="400" height="300"/>
<!-- Bounding box corners and spatial reference system -->
<BoundingBox SRS="EPSG:4326" minx="-180.000000" miny="-90.000000" maxx="180.000000" maxy="90.000000"/>
<!-- Title of Context -->
<Title>Map Context demo</Title>
<Abstract>Demo for map context document. Blah blah...</Abstract>
<ContactInformation>
</ContactInformation>
</General>
<LayerList>
<Layer queryable="0" hidden="0">
<Server service="OGC:WMS" version="1.1.1" title="World Country Boundaries">
<OnlineResource xlink:type="simple" xlink:href="https://demo.mapserver.org/cgi-bin/wms?"/>
</Server>
<Name>country_bounds</Name>
<Title>World Country Boundaries</Title>
<SRS>EPSG:4326</SRS>
<FormatList>
<Format current="1">image/gif</Format>
</FormatList>
<DimensionList>
<Dimension name="time" units="ISO8601" unitSymbol="t" userValue="1310" default="1310" multipleValues="1310,1410" nearestValue="0" current="1"/>
</DimensionList>
</Layer>
</LayerList>
</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 在允许此功能的默认 Mapfile 中。下面是一个带有config参数的 Mapfile 示例:
# 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应用程序,应用程序管理员需要提供一个默认 Mapfile ,其中至少包含将与该上下文文件一起使用的基本必需参数。此默认 Mapfile 可以包含与imagepath和imageurl一样少的信息,也可以包含层列表。来自上下文的信息(例如:层、宽度、高度等)将被附加或替换 Mapfile 中的值。
以下是包含最小必需参数的默认 Mapfile 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | NAME "CGI-CONTEXT-DEMO"
STATUS ON
SIZE 400 300
EXTENT -2200000 -712631 3072800 3840000
UNITS METERS
IMAGECOLOR 255 255 255
IMAGETYPE png
#
# Start of web interface definition
#
WEB
MINSCALE 2000000
MAXSCALE 50000000
#
# On Windows systems, /tmp and /tmp/ms_tmp/ should be created at the root
# of the drive where the .MAP file resides.
#
IMAGEPATH "/ms4w/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
END
END # Map File
|
通过WMS映射上下文支持¶
MapServer还可以将WMS层输出为上下文文档。MapServer通过添加一个request=getContext操作来扩展WMS标准,该操作允许您使用如下调用检索基于WMS的 Mapfile 的上下文:
http://localhost/mapserver.cgi?map=/path/to/mapfile.map&service=WMS&
request=GetContext&version=1.1.0
version参数控制要返回的上下文文档的版本。
默认情况下,getContext被禁用,因为它可能被视为安全问题:它可能公开公开 Mapfile 使用(级联)的WMS层的URL。
要启用它,请在WMS服务器的 Mapfile 中将“wms_getContext_enabled”Web元数据设置为“1”。