5.5. 将MapServer用作WMS客户端#

5.5.1. 查看示例#

https://webgis.cn/cgi-bin/mapserv?map=/owg/mfb4.map&layers=topo_wms+states&mode=map

MapServer的另一个令人兴奋的功能是它能够使用其他地图服务器提供的层作为其数据源。在这种情况下,MapServer应用程序将成为WMS(WFS)客户端。MapServer还可以将MapFile中的图层共享(或提供)给其他地图服务器。这使应用程序成为WMS(WFS)服务器。什么是WMS或WFS?这些是开放地理空间联盟(OGC)发布的基于Web的互操作性服务规范。WMS代表Web地图服务,WFS代表Web要素服务。

简单地说,这两个规范之间的区别在于,WMS使用Web栅格格式(PNG、GIF、JPEG)来共享层,而WFS使用地理标记语言GML。第三个常用的OGC互操作性规范是Web Coverage Service规范(WCS),MapServer仅提供服务器端支持。如果您需要更多关于WMS、WFS和WCS的信息,可以在OGC官方网站上找到OGC实现规范或OGC摘要规范。MapServer的网站上也有一些与这些规范相关的页面。

本例显示了如何将WMS图层添加到 Mapfile 。

以下是本例中使用的 Mapfile mfb4.map ):

 1MAP
 2    IMAGETYPE "PNG"
 3    EXTENT -180 -90 180 90
 4    SIZE 600 300
 5    SHAPEPATH "/gdata"
 6    IMAGECOLOR 255 255 255
 7    PROJECTION
 8        "init=epsg:4326"
 9    END
10    LAYER
11        NAME "basemap"
12        TYPE RASTER
13        OFFSITE 0 0 0
14        STATUS OFF
15        CONNECTIONTYPE WMS
16        CONNECTION "https://webgis.cn/cgi-bin/mapserv?map=/owg/mfba.map"
17        METADATA
18            "wms_srs" "EPSG:4326"
19            "wms_name" "wcountry,wriver,wroads"
20            "wms_server_version" "1.1.1"
21            "wms_format" "image/png"
22        END
23        PROJECTION
24            "init=epsg:4326"
25        END
26    END
27END

在上述资源中,WMS需要从 http:// ,不是 //

此外,作为客户端,不需要在映射文件中配置Web;服务器上需要配置Web。

将WMS图层添加到 Mapfile

文件更改如下:

5.5.2. 地图服务器的定义#

让我们来看看WMS层:

  • LAYER ,标记WMS Layer对象的开始。

  • NAME modis_jpl ,层标识符。

  • TYPE RASTER ,由于此WMS层是图像,因此请使用栅格层类型。

  • OFFSITE 0 0 0 ,忽略黑色背景色

  • STATUS OFF 默认情况下,该层处于关闭状态。

  • CONNECTIONTYPE WMS 输入层连接使用。默认为本地。

如果必须明确,我们将在本地的MapFileCONNECTIONTYPE中添加所有其他矢量和栅格层。相反,我们只定义外部的连接类型。WMS是来自其他地图服务器的外部数据层。

CONNECTION "https://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.map", the connection string that allows us to “get” data from another server. In the case of a WMS connection, this is a URL. If we were using a PostGIS database, this would be an SQL statement. Note that the string in your MapFile is on a single line.

METADATA 标记我们的WMS层的元数据对象。MapServer使用此对象定义的参数以及上面的连接参数来形成对WMS服务器的有效WMS请求。

"wms_srs" "epsg:4326" 、WMS投影。有时,WMS服务器支持多个投影。如果是这种情况,您可能会想要您的输出预测 (EPSG:2163 )地图。不幸的是,外部WMS服务器不支持这种投影。

"wms_name" "modis" ,要添加的WMS层的名称。这就像添加参数 "layers=modis"

"wms_server_version" "1.1.1" ,WMS版本的服务器版本。可以查看更多受支持的版本。

"wms_format" "image/jpeg" ,这是我们期望从WMS服务器接收的图像格式。你可以试试 image/png 或其他允许值。

5.5.3. 更多信息#

要了解有关将WMS层添加到应用程序的更多信息,请访问WMS客户端如何录制。

除了添加WMS Layer对象外,还有地图的下一个新对象。这是Web对象。Web对象中有两个参数:

IMAGEPATH '/data/tmp/' , the local absolute path to the temporary directory for web access. The user running the web server process should be able to write to this directory. Make sure the path contains the last slash ( / ). (Your IMAGEPATH might look like this: ``` /home/apache/htdocs/tmp/  ``C:/Inetpub/wwwroot/tmp/ 。)

IMAGEURL '/tmp/' ,这就是IMAGEPATH相对于Web服务器根目录的显示方式。如果我们必须输入完整的url,它将是“http://terrasip.gis.umn.edu/tmp/”。确保路径包含最后一个斜杠( / )。

最后,将一个新参数添加到 MAP 对象: NAME 。这是地图对象的标识符。MapServer创建并转储 tmp 使用此前缀的所有图像的目录。在本例中并不真正需要它,但它也不会有任何不良影响。

如果要将数据图层共享到其他地图服务器,则需要添加 METADATA 对象添加到您的 MAP 对象,并添加 METADATA 对象添加到要与所有人共享的每个Layer对象。从另一台服务器添加的所有WMS层都会自动级联,并可供其他人使用(传染)。有关如何使您的MapServer应用程序成为WMS服务器的详细信息,请仔细阅读WMS服务器文档。此外,除了WMS服务外,MapServer还支持WFS服务,您可以查看文档以了解如何配置MapServer以实现WFS服务器或WFS客户端。