地图上下文

作者

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

测试映射上下文支持

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

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

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