地图上下文

作者

杰夫麦克纳

联系

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_LYRUSE_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_onlineresourceRequired 访问服务器的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

测试映射上下文支持

  1. 首先要做的是使用savemapcontext函数保存映射文件,该函数可从 PHP/MapScript 类库。示例脚本如下所示:

    <?php
      if (!extension_loaded("MapScript")) dl(MODULE);
      $oMap = ms_newMapObj("mapcontext.map");
      $oMap->saveMapContext("mapcontext_output.xml");
    ?>
    
  2. 扫描XML输出以查找*<!--警告:…> >注释。然后进行必要的更改以修复您遇到的每个警告。最后,您应该有一个与映射上下文规范兼容的映射文件。

  3. 现在,您可以使用 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”。