MapServer简介

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

作者

戴维福塞特

联系

美国明尼苏达州莫伊亚的大卫·福塞特

作者

霍华德巴特勒

联系

位于gmail.com的Hobu.inc

最后更新

2021-07-01

MapServer概述

MapServer是一个流行的开源项目,其目的是通过Internet显示动态空间地图。它的一些主要功能包括:

  • 支持显示和查询数百种栅格、矢量和数据库格式

  • 能够在各种操作系统(Windows、Linux、Mac OS X等)上运行。

  • 支持流行的脚本和开发环境(PHP、Python、Perl、Ruby、Java、.NET)

  • 飞行中的投射

  • 高质量渲染

  • 完全可自定义的应用程序输出

  • 许多现成的开源应用程序环境

在最基本的形式中,mapserver是 CGI 在Web服务器上处于非活动状态的程序。当请求发送到MapServer时,它使用请求URL中传递的信息和 Mapfile 创建所请求地图的图像。请求还可以返回图例、比例尺、参考地图和作为CGI变量传递的值的图像。

参见

这个 术语表 包含此文档中许多行话术语的概述。

MAPServer可以通过 MapScripttemplating . 它可以用来支持许多不同的 vectorraster 输入数据格式,它可以生成大量 output 格式。大多数预编译的mapserver发行版都包含其大部分功能。

备注

MapScript 为MapServer提供用于构建Web和独立应用程序的脚本接口。mapscript可以独立于cgi mapserver使用,它是一个可加载模块,可以将mapserver功能添加到您最喜欢的脚本语言中。mapscript当前存在于 PHP Perl Python Ruby、TCL、Java和.NET调味品。

本指南不会明确讨论mapscript,请查看 MapScript Reference 更多信息。

MapServer应用程序的剖析

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公司

    备注

    强烈建议您查看 MAP= 通过设置来调用MapServer可执行文件 MS_MAP_PATTERNMS_MAP_NO_PATH 或者隐藏 MAP= 参数,如本文档中所建议的 限制 Mapfile 访问 。中列出了保护服务器安全的所有可能环境变量 环境变量

  • Web/HTTP Server -当用户的浏览器点击时,服务于HTML页面。您需要一个工作的Web(HTTP)服务器,例如 Apache 或安装MAPServer的计算机上的Microsoft Internet Information Server。

安装及要求

硬件要求

MapServer在Linux、Windows、Mac OS X、Solaris等系统上运行。要编译或安装某些必需的程序,您可能需要计算机的管理权限。人们通常会问一些关于MapServer应用程序最低硬件规格的问题,但答案实际上是特定于单个应用程序的。为了开发和学习的目的,一个非常小的机器可以很好地工作。对于部署,您将要调查 优化 从数据到服务器配置。

软件需求

您需要一个工作正常且配置正确的Web(HTTP)服务器,例如 Apache 或Microsoft Internet Information Server,安装在要安装MapServer的计算机上。

如果您使用的是Windows计算机,并且未安装Web服务器,则建议您使用 MS4W ,它将安装预配置的Web服务器、MapServer、MapCache、PHP、TinyOWS和更多实用程序。Windows用户可以选择从 OSGeo4W 安装程序也是如此。

本介绍将假设您正在使用MS4W安装进行后续操作。正在获取上的MapServer LinuxMac OS X 应该是直截了当的。参观 下载 用于在Mac OS X和Linux上安装预编译的MapServer。

备注

这个 OSGeo-Live 虚拟机包含也可以使用的mapserver。

您还需要一个Web浏览器和一个文本编辑器(vi、emacs、notepad++、textpad、homesite)来修改您的HTML和 mapfiles .

小技巧

记事本++用户可以遵循以下说明 steps 若要向.map文件添加语法颜色,请执行以下操作。

技能

除了学习MapServer应用程序的不同组件如何协同工作以及学习映射文件语法之外,构建基本应用程序还需要对几个技能领域有一些概念上的理解和熟练程度。

您需要能够创建或至少修改 HTML 页面,并了解HTML表单的工作原理。由于MapServer应用程序的主要目的是创建地图,因此您还需要了解地理数据以及地图投影的基础知识。随着您的应用程序变得越来越复杂,掌握SQL、DHTML/Java、Java、数据库、表达式、编译和脚本方面的技能可能会非常有用。

保护您的安装

在安装和配置期间,强烈建议查看的安全步骤 MAP= 通过设置来调用MapServer可执行文件 MS_MAP_PATTERNMS_MAP_NO_PATH 或者隐藏 MAP= 参数,如本文档中所建议的 限制 Mapfile 访问 。中列出了保护服务器安全的所有可能环境变量 环境变量

Windows安装

备注

针对MapServer的预编译二进制文件可从各种来源获得,请参阅 Windows 下载页面的部分。

MS4W(MapServer for Windows)是包含Apache Web服务器、MapServer及其所有依赖项和工具的长时间安装程序;MS4W还包含多个附加包,其中包含60多个预配置的MapServer配置文件(MapFile)和数据。以下步骤说明如何安装MS4W:

  1. 下载MS4W(此示例将使用 -setup.exe 文件),来自https://ms4w.com/

  2. 执行(双击).exe

  3. 单击“同意”按钮接受许可证。

    备注

    MS4W使用非常开放的 MIT/X license

    _images/ms4w-license.jpg
  4. 选择要安装的程序包。请务必选择“mapserver itasca demo application”,因为稍后我们将使用此演示。

    备注

    通过单击包名称旁边的复选框,您可以选择安装其他包。

    _images/ms4w-packages.jpg
  5. 点击“下一步”按钮

  6. C:/ms4w.

    备注

    支持带空格的文件夹,如果使用 -setup.exe 安装程序。

    _images/ms4w-install-folder.jpg
  7. 点击“下一步”按钮

  8. 80,

    备注

    1024, 如 80818082.

    _images/ms4w-port.jpg
  1. 点击“安装”按钮

    _images/ms4w-install.jpg
  2. 一旦看到“安装程序完成”的消息,请单击“关闭”按钮。

    _images/ms4w-install-complete.jpg
  3. 在桌面上,单击“ms4w localhost”快捷方式,浏览器将打开http://127.0.0.1,其中加载了ms4w简介页。

    _images/ms4w-browser.jpg
  4. 单击页面“功能”部分的`/cgi bin/mapserv.exe`链接,验证mapserver是否正常工作。

备注

如果MapServer工作正常,您将收到一条消息,说明:“没有要解码的查询信息。已设置查询字符串,但为空。“”

_images/ms4w-cgi-success.jpg

Mapfile 简介

.map文件是用于MapServer数据访问和样式设置的基本配置文件。该文件是一个ASCII文本文件,由不同的对象组成。每个对象都有各种可用的参数。所有.map文件(或map file)参数都记录在 mapfile reference . 下面是一个仅显示一个图层的简单 Mapfile 示例,以及地图图像输出:

小技巧

记事本++用户可以遵循以下说明 steps 若要向.map文件添加语法颜色,请执行以下操作。

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
渲染的蓝色大理石图像

渲染的蓝色大理石图像

备注

  • 映射文件中的注释使用‘#’字符指定。由于版本7.2的MapServer还支持单行或多行的C样式注释,因此 /* ... */

  • MapServer从上到下解析映射文件,因此映射文件末尾的层将最后绘制(这意味着它们将显示在其他层的顶部)。

  • 始终建议使用相对路径

  • 应引用路径(接受单引号或双引号)

  • 上面的示例基于以下目录结构:

    • 只要Web服务器可以访问映射文件,它就可以放在任何地方。通常,人们会尽量避免把它放在一个可以在网络上访问的位置。假设它放在/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开始,对映射文件中的层数没有限制

  • 这个 DATA SHAPEPATH 的参数 MAP 对象

  • DATA

栅格层

LAYER
    NAME "bathymetry"
    TYPE RASTER
    STATUS DEFAULT
    DATA "bath_mapserver.tif"
END # LAYER

参见

栅格数据

矢量层

TYPE line, 或 polygon TYPE OUTLINECOLOR 参数:

LAYER
  NAME "world_poly"
  DATA 'shapefile/countries_area.shp'
  STATUS ON
  TYPE POLYGON
  CLASS
    NAME 'The World'
    STYLE
      OUTLINECOLOR 0 0 0
    END # STYLE
  END # CLASS
END # LAYER

小技巧

MapServer接受以RGB值或十六进制字符串表示的颜色。

参见

矢量数据

渲染的蓝色大理石图像

带矢量边界的渲染蓝大理石图像

类和样式对象

  • 典型的样式信息存储在 CLASSSTYLE A的对象 LAYER

  • 从MapServer 5.0开始,对映射文件中的类或样式数没有限制

  • 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

  • 可以直接在映射文件中定义,也可以在单独的文件中定义

  • 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
渲染的蓝宝石图像滑雪器

带滑雪者符号的渲染蓝大理石图像

LABEL

一个例子 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
渲染的蓝宝石图像滑雪器

带滑雪者符号和标签的渲染蓝大理石图像

参见

LABEL, FONTSET

类表达式

MapServer支持三种类型的 CLASS 表达 在一个 LAYER LAYER

  1. 字符串比较

    EXPRESSION "africa"
    
  2. 正则表达式

    EXPRESSION /^9|^10/
    
  3. 逻辑表达式

    EXPRESSION ([POPULATION] > 50000 AND '[LANGUAGE]' eq 'FRENCH')
    

备注

尽可能避免使用逻辑表达式,因为它们的绘制时间非常昂贵。

参见

表达

INCLUDE

添加到MapServer 4.10后,映射文件的任何部分现在都可以存储在单独的文件中,并使用 INCLUDE 参数。要包含的文件名可以有任何扩展名,并且它总是相对于主.map文件。以下是一些潜在的用途:

  • LAYER S可以存储在文件中并包含在任意数量的应用程序中

  • STYLE 还可以存储和包含在多个应用程序中

下面是使用mapfile的示例 includes 要在单独的文件中包含层定义,请执行以下操作:

如果“shadedrelief.lay”包含:

LAYER
  NAME 'shadedrelief'
  STATUS ON
  TYPE RASTER
  DATA 'GLOBALeb3colshade.jpg'
END # LAYER

因此,主映射文件将包含:

MAP
  ...
  INCLUDE "shadedrelief.lay"
  ...
END # MAP

下面是一个mapfile示例,其中 LAYER s位于单独的.lay文件和所有其他对象中( WEBREFERENCESCALEBAR 等)存储在“.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 Extension或MapServer将无法识别它们。但是,包含文件可以具有您想要的任何扩展名。

参见

INCLUDE

使MapServer运行

您可以通过运行MapServer可执行文件来测试MapServer是否正在工作 (mapserv )和命令行上的-v参数(./mapserv-v)。

通过安装程序安装的MS4W用户可以使用 MS4W-Shell mapserv -v 在命令行。未使用`-setup.exe`安装程序的MS4W用户可以打开命令提示窗口,将CD打开到其安装文件夹,然后执行 setenv.bat, mapserv -v 命令。

根据您的配置,输出可能如下所示:

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

QUERY_STRING

让演示运行

警告

MS4W-Localhost

下载 MapServer Demo 。将其解压缩并按照Readme.txt中的说明进行操作。您需要将演示文件移动到其在Web服务器上的适当位置,并修改映射文件和HTML页面以反映服务器的路径和URL。接下来,将浏览器指向init.html并点击“初始化按钮”。如果出现错误,请验证是否已正确修改演示文件。

使网站成为您自己的网站

LAYERs to your Map file that refer to your own geographic data layers (you will probably want to delete the existing layers or set their status to 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 阻塞到 MAP (定义输出投影/地理参考系统)和 LAYER S(定义层数据集的地理参考系统)。

向网站添加数据

MapServer“本机”支持多种数据输入格式,如果使用开放源代码库编译,则支持更多格式。 GDALOGR .

矢量数据

矢量数据包括由点、线和多边形组成的特征。默认情况下,MapServer支持ESRI形状格式,但可以编译它以支持空间启用的数据库,例如 PostgreSQL-PostGIS 和文件格式,例如 Geography Markup Language (GML)MapInfo ,分隔文本文件和其他格式 通过MapServer的OGR矢量层 .

Vector Data reference 有关如何将不同地理数据源添加到MapServer项目的示例。

栅格数据

栅格数据是图像或网格数据。通过 GDAL ,MapServer支持大多数栅格格式-请参见 GDAL format list . 更具体的信息可以在 Raster Data reference .

备注

因为6.2版的mapserver依赖于gdal进行所有的栅格访问。

预测

因为地球是圆的,而你的显示器(或纸质地图)是平的,当你在二维图像中显示地理数据时,就会发生扭曲。投影允许您在平面上表示地理数据。这样做,数据的一些原始属性(如面积、方向、距离、比例或一致性)将被扭曲。不同的投影可以精确地描绘不同的属性。

使用MapServer,如果您将所有空间数据集保持在同一投影(或未投影的经纬度),则不需要在 Mapfile 中包含任何投影信息。在构建第一个MapServer应用程序时,建议进行这种简化。

使用编译MapServer时,可以完成动态投影 PROJ 支持。有关如何在Windows上启用项目支持的说明,请参阅 Wiki

增强您的网站

添加查询功能

查询空间数据有两种主要方法。两种方法都通过使用模板和CGI变量替换来返回数据。一 QUERYMAP 可用于映射查询结果。

可查询,每个映射文件 LAYER 必须有 TEMPLATE 定义的,或每个 CLASS 层中必须定义模板。有关用于定义查询的CGI变量的更多信息,请参见 MapServer CGI Reference .

属性查询

用户根据与该功能相关联的数据选择功能。”显示深度大于100英尺的所有湖泊,其中“深度”是形状数据集或空间数据库中的字段。属性查询是通过在URL(或表单发布)中将查询定义信息传递给MapServer来完成的。mode=itemquery返回单个结果,mode=itemnquery返回多个结果集。

EXTENT

空间查询

用户根据单击地图或用户定义的选择框来选择功能。同样,请求通过URL或表单投递传递。通过设置模式=查询,用户单击将返回最接近的功能。在模式=nQuery中,将返回通过单击地图或用户定义的选择框找到的所有功能。其他查询选项可以在 CGI 文档。

界面

参见:openlayers http://openlayers.org,gemooose http://gemooose.org

备注

MS4W用户可以随时安装OpenLayers和GeoMOOSE packages

数据优化

在优化MapServer应用程序的性能方面,数据组织至少和硬件配置一样重要。MapServer在它所做的方面非常有效,但是通过减少它在用户请求时需要做的处理量,您可以极大地提高性能。以下是一些规则:

  • Index Your data -通过使用创建形状数据集的空间索引 希普特里 . 还应为空间感知数据库(如Postgis和Oracle Spatial)创建空间索引。

  • 切片您的数据 -理想情况下,您的数据将被分割成大约显示大小的片段。在搜索大型矢量数据集或图像时,如果您只显示其中的一小部分区域,则会产生不必要的开销。通过将数据拆分成瓦片并创建瓦片索引,MapServer只需打开并搜索感兴趣的数据文件。GDAL命令行实用程序 ogrtindex (用于向量)和 gdaltindex (对于栅格)允许索引任何支持的GDAL驱动程序/格式。有关详细信息(和详细步骤),请参阅 瓦片索引 。如果只需要为shapefile编制索引,则可以使用 tile4ms MapServer实用程序。

  • Pre-Classify Your Data -MAPServer允许使用非常复杂的 EXPRESSIONs CLASSITEM EXPRESSION.

  • Pre-Process Your Images -预先进行资源密集型处理。见 Raster Data reference 更多信息。

  • Generalize for Overview -创建一个更简单、更通用的数据层,以小比例显示,然后使用与比例相关的层 LAYER MINSCALELAYER

参见

优化

我如何获得帮助?

文档

  • 官方的mapserver文档就在这里 site .

  • MapServer上存在用户贡献的文档 Wiki

用户邮件列表

注册并将问题发布到 MapServer Users 邮件列表。列表中的问题通常由开发人员自己快速回答。需要记住的几点:

  1. Search the archives 对于你的第一个答案,人们厌倦了一遍又一遍地回答同样的问题。

  2. 提供MapServer安装的版本和配置信息,以及地图和模板文件的相关片段。

  3. 总是把你的回答发回整个列表,而不仅仅是回复你问题的人。

IRC

MapServer用户和开发人员可以在Internet Relay Chat上找到。频道为#mapserver on irc.libera.chat

报告错误

软件错误报告在 MapServer issue tracker . 文档错误报告在 MapServer documentation issue tracker .

教程

Here 是新用户的快速教程。

测试套件

下载 MapServer Test Suite 以获得一些MapServer功能的演示。

Web Mapping Illustrated 这是泰勒·米切尔的一本书,它很好地描述了Web映射概念、开源地理信息系统软件、MapServer、Web服务和PostGIS的使用,并提供了现实世界的例子。

Mapping Hacks Schuyler Erle、Rich Gibson和Jo Walsh创造性地展示了数字地图工具和概念。MapServer只出现在100个黑客中的一小部分,但更多的对概念和灵感有用。

Beginning MapServer: Opensource GIS Development ,比尔·克罗普拉。根据发布者的说法,它涵盖了安装和配置、基本的mapserver主题和特性、动态数据的合并、高级主题、mapscript以及实际应用程序的创建。