MapServer简介¶
- 作者
Jeff McKenna
- 联系方式
jmckenna at gatewaygeomatics.com
- 作者
David Fawcett
- 联系方式
david.fawcett at moea.state.mn.us
- 作者
Howard Butler
- 联系方式
hobu.inc at gmail.com
- 最后更新
2019-11-21
目录
MapServer概述¶
MapServer是一个流行的开源项目,其目的是通过Internet显示动态空间地图。它的一些主要功能包括:
支持显示和查询数百种栅格、矢量和数据库格式
能够在各种操作系统(Windows、Linux、Mac OS X等)上运行。
支持流行的脚本和开发环境(PHP、Python、Perl、Ruby、Java、.NET)
动态投射
高质量绘制
完全可自定义的应用程序输出
许多现成的开源应用程序环境
在最基本的形式中,mapserver是 CGI 在Web服务器上处于非活动状态的程序。当请求发送到MapServer时,它使用请求URL中传递的信息和 Mapfile 创建所请求地图的图像。请求还可以返回图例、比例尺、参考地图和作为CGI变量传递的值的图像。
参见
术语表 包含此文档中许多行话术语的概述。
MAPServer可以通过 MapScript 或 templating 进行扩展. 它可以用来支持许多不同的 vector 和 raster 输入数据格式,它可以生成大量 output 格式。大多数预编译的mapserver发行版都包含其大部分功能。
注解
MapScript 为MapServer提供用于构建Web和独立应用程序的脚本接口。mapscript可以独立于cgi mapserver使用,它是一个可加载模块,可以将mapserver功能添加到您最喜欢的脚本语言中。mapscript当前存在于 PHP ,Perl, Python, Ruby、TCL、Java和.NET flavors里。
本指南不会明确讨论mapscript,更多信息请查看 MapScript Reference 。
MapServer应用程序的剖析¶

MapServer应用程序的基本架构。¶
简单的MapServer应用程序包括:
Map File -MapServer应用程序的结构化文本配置文件。它定义了地图的区域,告诉MapServer程序数据在哪里,以及输出图像的位置。它还定义了地图层,包括它们的数据源、投影和符号。它必须具有.map扩展名,否则MapServer将无法识别它。
Geographic Data -MapServer可以使用许多地理数据源类型。默认格式为ESRI形状格式。可以支持许多其他数据格式,下面将在 Adding data to your site .
HTML Pages -用户和MapServer之间的接口。它们通常位于web根目录中。在最简单的形式中,可以调用mapserver在HTML页面上放置静态映射图像。为了使地图具有交互性,图像被放置在页面的HTML表单中。
CGI 程序是“无状态的”,它们收到的每个请求都是新的,它们不记得上次被应用程序攻击时的任何信息。因此,每次应用程序向MapServer发送请求时,都需要在隐藏的表单变量或URL变量中传递背景信息(比如您在什么层上,您在地图上的位置,应用程序模式等)。
一个简单的映射服务器 CGI 应用程序可能包括两个HTML页面:
Initialization File -使用带有隐藏变量的窗体向Web服务器和MapServer发送初始查询。此表单可以放在另一个页面上,也可以通过在URL中将初始化信息作为变量传递来替换。
Template File -控制MapServer输出的地图和图例在浏览器中的显示方式。通过引用模板html中的mapserver cgi变量,mapserver将可以使用与应用程序当前状态相关的值(例如,映射图像名称、引用图像名称、映射范围等)来填充这些变量,因为它创建了供浏览器读取的HTML页。该模板还确定用户如何与MapServer应用程序交互(浏览、缩放、平移、查询)。
参见
MapServer CGI -接收请求并返回图像、数据等的二进制或可执行文件,它位于Web服务器的cgi bin或scripts目录中。Web服务器用户必须对其所在的目录具有执行权限,并且出于安全原因,它不应位于Web根目录中。默认情况下,此程序被调用 mapserv服务
当用户的浏览器点击时,Web/HTTP Server -服务于HTML页面。您也需要一个工作的Web(HTTP)服务器,例如 Apache 或安装MAPServer的计算机上的Microsoft Internet Information Server。
安装及要求¶
硬件要求¶
MapServer在Linux、Windows、Mac OS X、Solaris等系统上运行。要编译或安装某些必需的程序,您可能需要计算机的管理权限。人们通常会问一些关于MapServer应用程序最低硬件规格的问题,但答案实际上是特定于单个应用程序的。为了开发和学习的目的,一个非常小的机器可以很好地工作。对于部署,您将要调查 优化 从数据到服务器配置。
软件需求¶
您需要一个工作正常且配置正确的Web(HTTP)服务器,例如 Apache 或安装MAPServer的计算机上的Microsoft Internet Information Server。
如果您在Windows计算机上,并且没有安装Web服务器,建议您使用 MS4W 它将安装一个预配置的Web服务器、MapServer、MapCache、PHP、Tinyows和许多其他实用程序。Windows用户可以选择签出 OSGeo4W 。
本介绍将假设您正在使用MS4W安装进行后续操作。您可以直截了当地在 Linux 或 Mac OS X <osx>`上获取MapServer。参考 :ref:`download 以下载用于在Mac OS X和Linux上安装预编译的MapServer。
注解
OSGeo-Live 虚拟机也包含可以使用的mapserver。
您还需要一个Web浏览器和一个文本编辑器(vi、emacs、notepad++、textpad、homesite)来修改您的HTML和 mapfiles .
技能¶
除了学习MapServer应用程序的不同组件如何协同工作以及学习 Mapfile 语法之外,构建基本应用程序还需要对几个技能领域有一些概念上的理解和熟练程度。
您需要能够创建或至少修改 HTML 页面和了解HTML表单的工作方式。由于MapServer应用程序的主要目的是创建地图,因此您还需要了解地理数据的基础知识,以及地图投影。随着应用程序变得越来越复杂,SQL、DHTML/JavaScript、Java、数据库、表达式、编译和脚本编写技巧可能非常有用。
Windows安装¶
注解
针对MapServer的预编译二进制文件可从各种来源获得,请参阅下载页面的 Windows 。
MS4W(MapServer for Windows)是包含Apache Web服务器、MapServer及其所有依赖项和工具的长时间安装程序;MS4W还包含多个附加包,其中包含60多个预配置的MapServer配置文件(MapFile)和数据。以下步骤说明如何安装MS4W:
从http://ms4w.com 下载ms4w(此示例将使用`-setup.exe`文件)/
执行(双击).exe
单击“同意”按钮接受许可证。
注解
MS4W使用非常开放的 MIT/X license .
选择要安装的程序包。请务必选择“mapserver itasca demo application”,因为稍后我们将使用此演示。
注解
通过单击包名称旁边的复选框,您可以选择安装其他包。
点击“下一步”按钮
C:/ms4w.
注解
如果您使用的是`-setup.exe`安装程序,则文件夹将支持空格。
点击“下一步”按钮
80。
注解
1024, 如 8081 或 8082.
点击“安装”按钮
一旦看到“安装程序完成”的消息,请单击“关闭”按钮
在桌面上,单击“ms4w localhost”快捷方式,浏览器将打开http://127.0.0.1,其中加载了ms4w简介页。
单击页面“功能”部分的`/cgi bin/mapserv.exe`链接,验证mapserver是否正常工作。
注解
如果MapServer工作正常,您将收到一条消息,说明:“没有要解码的查询信息。已设置查询字符串,但为空。“”
![]()
Mapfile 简介¶
.map文件是用于MapServer数据访问和样式设置的基本配置文件。该文件是一个ASCII文本文件,由不同的对象组成。每个对象都有各种可用的参数。所有.map文件(或map file)参数都记录在 mapfile reference . 下面是一个仅显示一个图层的简单 Mapfile 示例,以及地图图像输出:
MAP
NAME "sample"
STATUS ON
SIZE 600 400
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/"
END # WEB
#
# Start of layer definitions
#
LAYER
NAME 'global-raster'
TYPE RASTER
STATUS DEFAULT
DATA bluemarble.gif
END # LAYER
END # MAP

绘制的蓝色大理石图像¶
注解
Mapfile 中的注释是用
#
字符指定的MapServer从上到下解析 Mapfile ,因此 Mapfile 末尾的层将最后绘制(这意味着它们将显示在其他层的顶部)。
始终建议使用相对路径
应引用路径(接受单引号或双引号)
上面的示例基于以下目录结构:
只要Web服务器可以访问 Mapfile ,它就可以放在任何地方。通常,人们会尽量避免把它放在一个可以在网络上访问的位置。假设它放在/home/msuser/mapfiles中/
字体文件的位置是相对于 Mapfile 给出的,在这种情况下是:/home/msuser/etc/fonts.txt
数据集的位置(bluemarble.gif)是相对于 Mapfile 给出的,在本例中是:/home/msuser/data/
符号文件的位置相对于 Mapfile 给出,在这种情况下为/home/msuser/etc/symbols.txt
www.ms.org, 目录的网址必须是:httpd://www.ms.org/ms_tmp/。
地图对象¶
MAP
NAME "sample"
EXTENT -180 -90 180 90 # Geographic
SIZE 800 400
IMAGECOLOR 128 128 255
END # MAP
范围是以输出映射的单位表示的输出范围
大小是地图图像的宽度和高度(以像素为单位)
ImageColor是默认的图像背景色
小技巧
MapServer接受以RGB值或十六进制字符串表示的颜色。
注解
MapServer目前使用基于像素中心的扩展模型,这与GDAL或WMS使用的模型稍有不同。
层对象¶
从MapServer 5.0开始,对 Mapfile 中的层数没有限制
这个 DATA SHAPEPATH 的参数为 MAP 对象
DATA
类和样式对象¶
从MapServer 5.0开始,对 Mapfile 中的类或样式数没有限制
下面的示例演示如何使用覆盖的“style”对象显示具有两种颜色的路线
CLASS
NAME "Primary Roads"
STYLE
SYMBOL "circle"
COLOR 178 114 1
SIZE 15
END # STYLE
STYLE
SYMBOL "circle"
COLOR 254 161 0
SIZE 7
END # STYLE
END # CLASS
小技巧
MapServer接受以RGB值或十六进制字符串表示的颜色。

有风格地绘制蓝大理石图像¶
SYMBOLs¶
可以直接在 Mapfile 中定义,也可以在单独的文件中定义
SYMBOLSET 中的参数 MAP 对象:
MAP
NAME "sample"
EXTENT -180 -90 180 90 # Geographic
SIZE 800 400
IMAGECOLOR 128 128 255
SYMBOLSET "../etc/symbols.txt"
END # MAP
其中symbols.txt可能包含:
SYMBOL
NAME "ski"
TYPE PIXMAP
IMAGE "ski.png"
END # SYMBOL
Mapfile 将包含:
LAYER
...
CLASS
NAME "Ski Area"
STYLE
SYMBOL "ski"
END # STYLE
END # CLASS
END # LAYER

带滑雪者符号的绘制的蓝大理石图像¶
参见
MapServer 的制图符号构造, 符号示例, and SYMBOL
LABEL¶
在a中定义 CLASS 对象
layer`对象中的'labelitem'参数可用于指定要用于标记的数据中的属性。标签由 :ref:`font set`文件(在 :ref:`map`对象中设置)中声明的“字体”显示。 :ref:`fontset`文件包含对可用字体名的引用。 encoding`描述文件中使用的编码(请参见 在MapServer中显示国际字符)。
一个例子 LABEL 引用上述字体之一的对象可能如下所示:
LABEL
FONT "sans-bold"
TYPE truetype
ENCODING "UTF-8"
SIZE 10
POSITION LC
PARTIALS FALSE
COLOR 100 100 100
OUTLINECOLOR 242 236 230
END # LABEL

带滑雪者符号和标签的绘制的蓝大理石图像¶
类表达式¶
mapserver支持三种类型的 CLASSexpressions`和a:ref:`layer`(`classitem in`layer`决定要用于前两种类型的表达式的属性):
字符串比较
EXPRESSION "africa"
正则表达式
EXPRESSION /^9|^10/
逻辑表达式
EXPRESSION ([POPULATION] > 50000 AND '[LANGUAGE]' eq 'FRENCH')
注解
尽可能避免使用逻辑表达式,因为它们的绘制所花费的时间非常长。
参见
INCLUDE¶
添加到MapServer 4.10后, Mapfile 的任何部分现在都可以存储在单独的文件中,并使用 INCLUDE 参数。要包含的文件名可以有任何扩展名,并且它总是相对于主.map文件。以下是一些潜在的用途:
下面是使用mapfile的示例 includes 要在单独的文件中包含层定义,请执行以下操作:
如果“shadedrelief.lay”包含:
LAYER
NAME 'shadedrelief'
STATUS ON
TYPE RASTER
DATA 'GLOBALeb3colshade.jpg'
END # LAYER
因此,主 Mapfile 将包含:
MAP
...
INCLUDE "shadedrelief.lay"
...
END # MAP
下面是一个mapfile示例,其中 LAYER s位于单独的.lay文件和所有其他对象中( WEB , REFERENCE , SCALEBAR 等)存储在“.ref”文件中:
MAP
NAME "base"
#
# include reference objects
#
INCLUDE "../templates/template.ref"
#
# Start of layer definitions
#
INCLUDE "../layers/usa/usa_outline.lay"
INCLUDE "../layers/canada/base/1m/provinces.lay"
INCLUDE "../layers/canada/base/1m/roads_atlas_of_canada_1m.lay"
INCLUDE "../layers/canada/base/1m/roads_atlas_of_canada_1m_shields.lay"
INCLUDE "../layers/canada/base/1m/populated_places.lay"
END # MAP
警告
Mapfiles 必须有 .map
扩展或MapServer将无法识别它们。但是,include文件可以有任何扩展名。
参见
使MapServer运行¶
您可以通过运行mapserver可执行文件来测试mapserver是否工作( mapserv
)命令行上有-v参数(../mapserv-v)。
通过安装程序安装的ms4w用户可以使用桌面上的“ms4w shell”快捷方式,然后在命令行运行“mapserv-v”。未使用`-setup.exe`安装程序的MS4W用户可以打开命令提示窗口,CD到其安装文件夹,然后在测试'mapserv-v'命令之前执行'setenv.bat'。
根据您的配置,输出可能如下所示:
MapServer version 7.0.1 (MS4W 3.1.4) OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML
SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=ICONV
SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER
SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI
SUPPORTS=THREADS SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL
INPUT=SHAPEFILE
您还可以直接向mapserver cgi程序发送HTTP请求,而无需传递任何配置变量(例如http://127.0.0.1/cgi-bin/mapserv.exe)。如果您收到消息,'没有要解码的查询信息。`查询“未设置”字符串,您的安装正在运行。
运行演示¶
警告
MS4W用户不必执行此步骤,因为上面的说明已经安装了演示。您应该看到页面底部的“mapserver itasca demo application”部分(单击“ms4w localhost”快捷方式后)。
下载 MapServer Demo . 解压缩并按照readme.txt中的说明操作。您需要将演示文件移动到Web服务器上的适当位置,并修改 Mapfile 和HTML页面以反映服务器的路径和URL。接下来,将浏览器指向init.html并点击“初始化按钮”。如果出现错误,请验证是否正确修改了演示文件。
使网站成为您自己的网站¶
现在您有了一个正在运行的MapServer演示,您可以使用该演示来显示自己的数据。将新的“layer”添加到引用您自己地理数据层的 Mapfile 中(您可能希望删除现有层或将其状态设置为“off”)。
除非添加的层与演示所在的地理区域相同,否则请修改 MAP EXTENT to match the extent of your data. To determine the extent of your data, you can use ogrinfo . 如果你可以使用地理信息系统,你也可以使用它。这个 MAP EXTENT 需要以输出投影的单位表示。
如果添加具有不同地理参考系统的地理数据层,则需要修改 Mapfile ,将 projection`块添加到 :ref:`map`(定义输出投影/地理参考系统)和 :ref:`layers(定义层数据集的地理参考系统)中的每一个。
矢量数据¶
矢量数据包括由点、线和多边形组成的特征。默认情况下,MapServer支持ESRI形状格式,但可以编译它以支持空间启用的数据库,例如 PostgreSQL-PostGIS 和文件格式,例如 Geography Markup Language (GML) , MapInfo ,分隔文本文件和其他格式 通过MapServer的OGR矢量层 .
有关如何将不同地理数据源添加到MapServer项目的示例请见 Vector Data reference 。
栅格数据¶
栅格数据是图像或网格数据。通过 GDAL ,MapServer支持大多数栅格格式-请参见 GDAL format list . 更具体的信息可以在 Raster Data reference .
注解
从6.2版的mapserver开始,其依赖于gdal进行所有的栅格访问。
增强您的网站¶
添加查询功能¶
查询空间数据有两种主要方法。两种方法都通过使用模板和CGI变量替换来返回数据。一 QUERYMAP 可用于映射查询结果。
为了使文件可查询,每个 Mapfile LAYER 必须有 TEMPLATE 定义,或每个 CLASS 层中必须定义模板。有关用于定义查询的CGI变量的更多信息,请参见 MapServer CGI Reference .
属性查询¶
用户根据与该功能相关联的数据选择功能。”显示深度大于100英尺的所有湖泊,其中“深度”是形状数据集或空间数据库中的字段。属性查询是通过在URL(或表单发布)中将查询定义信息传递给MapServer来完成的。mode=itemquery返回单个结果,mode=itemnquery返回多个结果集。
请求还必须包括一个Qlayer(标识要查询的层)和一个包含查询字符串的qstring。也可以将qitem与qstring结合使用,以定义要查询的字段。属性查询仅适用于 Mapfile 中的“extent”集。
空间查询¶
用户根据单击地图或用户定义的选择框来选择功能。同样,请求通过URL或表单投递传递。通过设置模式=查询,用户单击将返回最接近的功能。在模式=nQuery中,将返回通过单击地图或用户定义的选择框找到的所有功能。其他查询选项可以在 CGI 文档。
界面¶
参见:openlayers http://openlayers.org,gemooose http://gemooose.org
注解
MS4W用户可以安装openlayers和gemoose作为“软件包”,以便随时可用。
数据优化¶
在优化MapServer应用程序的性能方面,数据组织至少和硬件配置一样重要。MapServer在它所做的方面非常有效,但是通过减少它在用户请求时需要做的处理量,您可以极大地提高性能。以下是一些规则:
Index Your data -空间索引可以用于形状数据集 shptree 的使用, 还可用于空间感知数据库(如Postgis和Oracle Spatial)。
Tile Your Data -理想情况下,您的数据将被“分割”成与显示数据的大小相同的片段。在搜索一个大的形状数据集或图像时,您只需要显示一个小区域。通过将数据分解成图块并创建图块索引,MapServer只需要打开并搜索感兴趣的数据文件。形状数据集可以分解为较小的图块,然后可以使用 tile4ms 实用工具。一 tileindex 还可以创建栅格文件的形状数据集。
Pre-Classify Your Data。-mapserver允许使用非常复杂的 :ref:`expressions<expressions>`对数据进行分类。但是,使用逻辑表达式和正则表达式比使用字符串比较更耗费资源。为了提高效率,您可以提前将数据划分为类,创建一个用作“classitem”的字段,并用一个标识类的简单值填充它,例如用于四类数据集的1、2、3或4。然后可以对类“expression”进行简单的字符串比较。
Pre-Process Your Images -提前进行资源密集型处理。有关详细信息,请参阅 graster data reference。
generalize for overview-创建一个更简单、更通用的数据层以小比例显示,然后使用与比例相关的层,使用 :ref:`layer``minscale`和'layer``maxscale`在用户放大时显示更详细的数据层。同样的概念也适用于图像。
参见
我如何获得帮助?¶
文档¶
官方的mapserver文档可见 site .
用户提供的文档存在于mapserver`wiki<https://github.com/mapserver/mapserver/wiki/>`。
用户邮件列表¶
注册并将问题发布到 MapServer Users 邮件列表。列表中的问题通常由开发人员自己快速回答。需要记住的几点:
Search the archives 首先,你的答案,人们会厌倦一遍又一遍地回答同样的问题。
提供MapServer安装的版本和配置信息,以及地图和模板文件的相关片段。
系统总是把你的回答发回整个列表,而不仅仅是发给回复你问题的人。
测试套件¶
下载'mapserver test suite<https://github.com/mapserver/mapserver/wiki/test suite/>`,以演示一些mapserver功能。
书¶
Web Mapping Illustrated 这是泰勒·米切尔的一本书,它很好地描述了Web映射概念、开源地理信息系统软件、MapServer、Web服务和PostGIS的使用,并提供了现实世界的例子。
Mapping Hacks Schuyler Erle、Rich Gibson和Jo Walsh创造性地展示了数字地图工具和概念。在 100 项黑客技巧中,MapServer只包含很少的一部分,其更多的是对概念的确定和对灵感的启发。
Beginning MapServer: Opensource GIS Development ,比尔·克罗普拉。根据发布者的说法,它涵盖了安装和配置、基本的mapserver主题和特性、动态数据的合并、高级主题、mapscript以及实际应用程序的创建。