MapServer的另一项令人兴奋的功能是它能够使用其他地图服务器提供的图层作为其数据源。在这种情况下,MapServer 应用程序成为 WMS(WFS)客户端。MapServer的也可以分享(或服务)MapFile 中的图层到其他地图服务器。这使得应用程序成为的WMS(WFS)服务器。WMS或WFS是什么?这些都是“基于网络的互操作性服务”规范,由开放地理空间联盟(OGC)发布。WMS代表Web地图服务, WFS表示Web要素服务。这两种规格之间的差异,简单来说,就是WMS使用网络栅格格式(PNG,GIF,JPEG)分享层,而世界粮食首脑会议使用地理标记语言GML。第三种常用的 OGC互操作规范是网络覆盖服务规范(WCS) ,MapServer 仅在服务器端提供支持。如果需要了解 WMS,WFS和WCS的更多信息,可以在 OGC 官方网站 查找 OGC Implementation Specifications 或者 OGC Abstract Specifications 。MapServer的网站也有一些与这些规范相关页面。
这个例子告诉你如何在你的 MapFile 中添加一个WMS层。
下面是本例中使用的Mapfile( mfb4.map
):
01 MAP
02 IMAGETYPE "PNG"
03 EXTENT -180 -90 180 90
04 SIZE 600 300
05 SHAPEPATH "/gdata"
06 IMAGECOLOR 255 255 255
07 PROJECTION
08 "init=epsg:4326"
09 END
10 LAYER
11 NAME "basemap"
12 TYPE RASTER
13 OFFSITE 0 0 0
14 STATUS OFF
15 CONNECTIONTYPE WMS
16 CONNECTION "http://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
27 END
在上面的资源中, WMS 需要使用 http://
开头,而不能用 //
。
另外, 作为客户端时, Mapfile 中不需要配置 WEB ;而在服务端则是必需的。
Mapfile 中添加WMS图层
文件变动如下:
让我们看看在WMS层:
LAYER
, 标志着开始的WMS层对象。NAME modis_jpl
,层标识符。TYPE RASTER
, 由于这WMS图层是图像,使用栅格图层类型。OFFSITE 0 0 0
,忽略黑色的背景颜色
STATUS OFF
, 打开这层默认关闭。CONNECTIONTYPE WMS
输入层连接使用。默认为本地 。
如果我们必须要明确的,我们将增加本地的所有其他矢量和栅格图层在我们的 MapFile CONNECTIONTYPE。相反,我们只定义是外部的连接类型。WMS是一个外部的数据层,来自其他地图服务器。
CONNECTION “http://webgis.cn/cgi-bin/mapserv?map=/owg/mfb2.map”
,连接字符串,使我们能够从另一台服务器上的数据“搞定”。在WMS连接的情况下,这是一个URL。如果我们用的是PostGIS数据库,这将是一个SQL语句。请注意在你的 MapFile 字串是在一个单一的线。
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
或其他的允许取值 。
要知道更多关于WMS图层添加到您的应用程序,请访问 WMS客户端如何来记录.
除了加入WMS图层对象,也有地图的下一个新的对象。这是Web对象。在Web对象有两个参数:
IMAGEPATH '/data/tmp/'
,
本地绝对路径到Web访问的临时目录。运行Web服务器进程的用户应该能够写入到这个目录中。确保该路径包含在最后一个斜杠( /
)。(你的IMAGEPATH可能是这个样子: /home/apache/htdocs/tmp/
or C:/Inetpub/wwwroot/tmp/
.)
IMAGEURL '/tmp/'
,
这是怎么IMAGEPATH会出现相对Web服务器的根目录。如果我们必须输入完整的URL,这将是 "http://terrasip.gis.umn.edu/tmp/" 。请确保路径包含在最后一个斜杠( /
)。
最后,在 MAP
对象中添加了一个新的参数: NAME
。这是地图对象的标识符。MapServer的使用这个前缀的所有图像创建和转储 tmp
的目录。在这个例子中其实并不需要,但也不会有什么不好的影响。
如果您想分享您的数据层到其他地图服务器,你需要在你的 MAP
对象添加 METADATA
对象,并在每个你想和大家分享的图层对象中添加 METADATA
。所有从另一台服务器添加的 WMS 图层会自动进行级联 发布,提供给他人来用(传染性)。
要知道如何使MapServer的应用程序成为一个WMS服务器的详细信息,请仔细阅读 WMS服务器文档。另外,除了 WMS 服务, MapServer 也支持 WFS 服务,可以查看文档了解如何配置 MapServer 来实现 WFS 服务器,或 WFS 客户端。