安装与配置 MapServer

开始一项工作的时候建立初始的运行环境是令人烦燥的,尤其是当依照步骤一步一步操作,但是基本的“Hello World”还是迟迟不出现,甚至会令人抓狂。搭建运行环境需要综合技术,一些经验,也需要一点运气。不要小看配置运行环境的能力,很多的程序员是无法自行搭建开发环境的,更遑论真正的生产环境。

安装与配置 MapServer 的基本要求

MapServer是使用C语言编写的开源软件,它本身又依赖一些开源的或免费的库,如Shapelib, FreeType, Proj.4, GDAL/OGR,GD Library,Regex。MapServer由C写成,它依赖的子项目都有相应的C语言实现版本。在运行 MapServer 时,必须得把相关的类库安装好,有时候还依赖于某些类库的特定版本。当编译安装 MapServer 时,需要对这些类库有一定的了解。

  • Shapelib提供了读、写和更新“ESRI Shapefile”格式数据的能力,并能修改相应的属性文件(.dbf);
  • FreeType是一个渲染字体的库,能够渲染大部分的矢量和bitmap字体格式,设计思想是小、高效、高度定制化,并且在不损失性能和功能的前提下尽可能轻量;
  • Proj.4是一个地理投影库,提供多种投影的定义和使用接口;
  • GDAL/OGR,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。 OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。 有很多著名的GIS类产品都使用了GDAL/OGR库,包括ESRI的ARCGIS 9.3,Google Earth和跨平台的GRASS GIS系统。
  • GD Library,动态产生图片,支持大多数格式:JPEG, GIF, WEBP, XPM, BMP。通常用来动态生成图表、图片、缩略图等,常用于web环境中;
  • Regex,为MapServer提供正则表达式支持。

通过了解这些类库,你能够减少要安装的功能,而简化了安装过程。尽管你只是安装MapServer的一个基本版本,但是它仍然有能力创建一个强大强大的应用。在对MapServer熟悉后,你可以添加想要的其它功能。

MapServer 本身是生成地图的程序,但是提供了 CGI 接口(MapServer CGI 的运行依赖于 PHP),可以通过 Web 访问来调用相关的功能。所以很多时候为了运行 MapServer , 需要安装 Web 服务器(如 Apache 2),以及 让应用程序 (MapServer )与 Web 服务器(Apache)通信的工具(如 FastCGI)。Apache 2 默认情况下未开启 CGI 。

必须的库:

  1. GD Library : MapServer通过使用GD graphics library来表现GIF, PNG和JPEG 格式的图像。这些图像通过MapServer CGI在浏览器上浏览。
  2. Regex:Regex是一个正则表达式库。

可选的库:

  1. JPEG library:由GD调用生成JPEG 图像。
  2. PNG library:由GD调用生成PNG图像。
  3. Zlib:由libpng 用来提供图形压缩功能。
  4. FreeType 2:由GD.调用 提供TrueType支持。
  5. PROJ.4:Proj.4用于动态的投影变换。WMS, WFS 或 WCS Services也需要它的支持。
  6. GDAL/OGR:MapServer 使用GDAL/OGR库来读入raster (GDAL) and vector (OGR)格式的数据
  7. ArcSDE:ArcSDE是ESRI公司的空间数据库引擎(它不是免费的)用于支持MapServer进入SDE 数据库。
  8. EPPL7:用来读取EPPL7 数据库和旧版本的Erdas LAN/GIS 文件。它是作为MapServer的内置库。

GD

GD是一个图像程序库。由于Mapserver使用GD来进行图像的渲染,所以必须安装它。GD有它自己的依赖类库,有zlib、libpng、FreeType2.x及libJPEG。这些类型使得GD能够进行影像压缩(对于支持的数据),来渲染PNG图像,来使用TrueType字体,及渲染JPEG图像。由于关于GIF的授权许可已经过期了,所以它现在也可以使用了。

FreeType

FreeType是一个字体渲染引擎。 它并不是直接由Mapserver引用的,而是被GD使用来进行字体的渲染。由于TrueType比Mapserver提供的位图字体更有吸引力, 所以值得包括这个类库。

libPNG

libPNG使得Mapserver能够渲染JPEG图像。 一个新的版本自2001年已经发行了。一般来讲,机器上应该已经安装了这个库。 如果没有,可以自行安装。libpng使用MapServer能够渲染PNG图像。它并不是直接由MapServer使用的,而是由GD使用的。 libpng需要库zlib。

zlib

zlib是一个数据压缩库,由GD使用。

GDAL

GDAL是栅格数据的转换类库。它提供了导入及对具有地理投影的栅格影像的投影。在本书中,你不会使用那些功能, 但是这个库对于安装基本的Mapserver是必需的。它还包含OGR库。

OGR

OGR库提供了读取及写入一些矢量格式的功能。在本书中你会使用OGR提供的一些功能。

Proj.4

Proj.4是一个进行制图投影的程序。 它可以由Mapserver来调用,也可以单独对整个的数据库进行投影操作。

shapelib

shapelib是一个C程序,来生成及处理Shape文件。你可以使用这个类库提供的有用的工具,而不必自己写任何C代码。它具有生成shape文件(包括DBF文件),销毁shape文件及DBF文件的内容,及更改shape文件的投影。 其中的的一些功能基于Proj.4。

libcurl

libcurl是一个支持FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE及LDAP的URL转换的客户端类库。如果你想提供WMS支持的话,会需要这个类库。WMS协议用来通过网络传输地图影像及文件数据。为了保持Mapserver环境的简单,你不必安装它。

SDE客户端库

SDE客户端库是ESRI的空间数据仓库的一部分。如果你希望Mapserver能够访问它,你需要编译这个库。

PostgreSQL客户端库

PostgreSQL客户端库提供了使用Mapserver能够访问PostGIS数据的功能。它们提供了与ESRI产品类似的功能,但它们不是开源的。

Oracle Spatial客户端库

Oracle Spatial客户端库使得用户能够使用MapServer访问Oralce空间数据仓库。它们提供了与ESRI产品类似的功能。

Ming

Ming使得MapServer能够创建SWF视频。它能够提供一些有趣的功能。

PDFLib

PDFLib使用MapServer能够以PDF格式输出,也很有用。

Debian / Ubuntu 系统下的安装

Debian / Ubuntu 是我最常用的 Linux 发布版本,其良好设计的包管理工具真是让人非常愉悦。安装 MapServer 只需要运行下面的安装命令(需要有管理员权限):

在 Debian 9中:

apt install -y apache2 php7.0 libapache2-mod-fcgid cgi-mapserver mapserver-bin libapache2-mod-php
a2enmod authnz_fcgi
a2enmod cgi
service apache2 restart

在 Ubuntu 18.04 中:

apt install -y apache2 php7.2 libapache2-mod-fcgid cgi-mapserver mapserver-bin libapache2-mod-php
a2enmod authnz_fcgi
a2enmod cgi
service apache2 restart

几乎没有不同,只不过 Ubuntu 18.04中使用了较新的 php 7.2 版本。在安装这些软件包时,如果缺少相应的依赖会自动安装。

在安装完成后,可以在终端输入如下命令来查看结果:

$ mapserv -v
MapServer version 7.0.4 OUTPUT=PNG OUTPUT=JPEG OUTPUT=KML SUPPORTS=PROJ
    SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=SVG_SYMBOLS 
    SUPPORTS=RSVG 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

关于 FastCGI 要进行一点说明。

CGI(公共网关接口)定义了 WEB 服务器与外部内容生成程序之间交互的方法,通常是指CGI程序或者CGI脚本,它是在网站上实现动态页面的最简单和常用的方法,使外部程序与Web服务器之间交互成为可能。但早期的 CGI 程序运行在独立的进程中,并对每个Web请求创建一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量创建和消亡使操作系统性能大大下降,此外由于地址空间无法共享,也限制了资源重用。

FastCGI使用持续的(守护)进程来处理一连串的请求,这些进程由FastCGI服务器管理,而不是 Web 服务器。当进来一个请求时,Web 服务器把环境变量和这个页面请求通过一个 socket 比如 FastCGI 进程与 Web 服务器(都位于本地)或者一个TCP connection( FastCGI进程在远端的server farm)传递给FastCGI进程。

Windows 系统下的安装

在 Windows 下面安装 MapServer ,也是需要安装 Apache2 , CGI,以及 MapServer 程序,这些也都有 Windows 下面的二进制软件包,但是这样一步一步安装是比较麻烦的,很容易出现问题。这里推荐使用 MS4W (MapServer 4 Windows ), 链接为: https://www.ms4w.com/