MapServer 是一款 开源 的服务程序,用于以 OGC 标准服务 发布影象、矢量要素等地理信息。其提供的服务包括 WMS 网络地图服务 和 WFS 网络地理要素服务 。
本的内容包括:
Note
教学内容 本节讲述 mapfile 及其配置,并设置一个示例用于控制 MapServer 将 shp 变换为栅格用于 WMS 服务。
输入以下示例配置:
MAP
NAME "MAPSERVER QUICKSTART"
EXTENT -137 29 -53 88
UNITS DD
SHAPEPATH "/home/user/data/natural_earth/"
SIZE 800 600
IMAGETYPE PNG24
PROJECTION
"init=epsg:4326"
END
WEB
METADATA
ows_enable_request "*"
END
END
LAYER
NAME "Admin Countries"
STATUS ON
TYPE POLYGON
DATA "10m_admin_0_countries"
CLASS
STYLE
COLOR 246 241 223
OUTLINECOLOR 0 0 0
END
END
END
END
Note
这个配置使用了位于 ~/data/natural_earth (或 /usr/local/share/data/natural_earth )的 Natural Earth 数据集。
在一个 MapFile 配置文件中,一个对象以其名称(例如 MAP)开始,并以 END 结束。每个配置应当以 MAP 对象名开始,并包含一组 LAYER 图层对象。在以上示例中只定义了一个图层。
Note
详细的 Mapfile 对象与属性说明可以在 MapServer 文档中找到。
MapServer 主要是为网络服务设计的,但也可以在本地以命令行方式执行处理图像等操作。对于大量重复操作或调试,这种功能会很有用。
在命令行界面(Applications/Accessories/Terminal Emulator)输入:
执行成功后,在 file:///home/user/mymap.png 将可以获得成果图像。
Note
提示 以下演示如何利用 mapfile 根据 OGC WMS 请求 在 MapServer 中渲染 OGC WMS 请求提供的多个图层的数据。
在浏览器中访问 URL
http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Admin%20Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600
以上 URL 为一个 Web Map Service (WMS) GetMap 请求。MapServer 通过其中指定的 mapfile 将指定图层渲染为 PNG 图像,并且符合用户指定的参数(图像大小、地理区域范围、投影等)。在 mapfile 的 “&LAYERS=...” 中指定的各图层都具备 STATUS ON 属性,同时 STATUS DEFAULT 的图层也会被渲染。渲染结果如图所示。
Note
除了 “?map=/home/user/mapserver_quickstart.map” 参数针对 MapServer 外,其它参数都是 WMS 标准规定的。
Note
提示 以下演示向 mapfile 添加一个新的图层对象。
此处将向 mapfile 添加图层对象。在最后一个 END 前添加以下图层配置:
LAYER
NAME "Lakes"
STATUS ON
TYPE POLYGON
DATA "10m_lakes"
CLASS
STYLE
COLOR 153 179 204
END
END
END
目前示例 MapFile 中定义了两个图层。注意新图层具备 “STATUS ON” 属性,即允许调用但默认并不渲染。
改动之前的 WMS GetMap 请求可以加入新的 “Lakes” 图层。这里只需改变 “LAYERS” 列表,即:
http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Admin%20Countries,Lakes&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600
请求的结果与上一次的相似,但添加了湖泊图层:
Note
提示 以下演示根据数据属性配置控制图层内要素的渲染样式。
在 MapFile 中,一个 LAYER 要素可以包含任意多个 CLASS 对象。这些用于控制数据中空间要素的渲染样式。例如,在 “10m_lakes” 数据集使用 ogrinfo 可以看到要素的属性信息。利用不同的 CLASS 对象,可以通过这些属性控制渲染样式。
在 “10m_lakes” 数据集包含了一个 ScaleRank 属性用于标识湖泊对象的大小。据此可以对不同湖泊采用不同的渲染样式。在 LAYER 中添加一个新的 CLASS 对象:
LAYER
NAME "Lakes"
STATUS DEFAULT
TYPE POLYGON
DATA "10m_lakes"
CLASSITEM "ScaleRank"
CLASS
EXPRESSION /0|1/
STYLE
COLOR 153 179 204
OUTLINECOLOR 0 0 0
END
END
CLASS
STYLE
COLOR 153 179 204
END
END
END
新的 CLASS 对象使得 MapServer 根据 “ScaleRank” 属性控制样式。ScaleRank 为 “0” 或 “1” 者边界线以黑色显示。CLASS 列表以从前到后的顺序调用。当一个要素满足了 “EXPRESSION” 的定义,该要素会使用相应 CLASS 进行渲染。不满足时,系统将检查下一个。若没有任何条目满足,该要素默认不会渲染,除非该对象包含 no EXPRESSION 作为默认。图层的 “CLASSITEM” 参数指导 MapServer 调用所需的属性用于 EXPRESSION 对比。
以上改动使得渲染图像上较大的湖泊出现黑边,如图所示。
Note
在 EXPRESSIONS 可以学习更多有关属性匹配表达式的内容。
以上只是一个简单的示例,MapServer 提供了其它大量的功能。MapServer 项目网站提供了大量的培训资源,以下是其中一些: