1.2. 安装和配置MapServer

在启动作业时设置初始运行时环境可能会很乏味,特别是在遵循循序渐进的步骤时,但基本的“Hello World”仍然没有出现,而且可能会令人抓狂。营造跑步环境需要全面的技术、一定的经验和一点运气。不要低估配置运行时环境的能力。许多程序员不能自己构建开发环境,更不用说真正的生产环境了。

1.2.1. 安装和配置MapServer的基本要求

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

  • Shapelib提供了读、写和更新“ESRI shapefile”格式的数据,以及修改相应的属性文件(.dbf)的能力;

  • FreeType是一个字体渲染库,能够渲染大多数矢量和位图字体格式,设计成小、高效、高度可定制和尽可能轻便,而不牺牲性能和功能;

  • Proj.4是一个地理投影库,提供各种投影定义和界面;

  • GDAL/OGR,GDAL(地理空间数据抽象库)是X/MIT许可下的开放源码栅格空间数据转换库。它利用抽象数据模型来表示其支持的各种文件格式。它还具有一系列用于数据转换和处理的命令行工具。OGR是GDAL项目的一个分支,在功能上类似于GDAL,只是它提供了对矢量数据的支持。有许多使用GDAL/OGR库的知名GIS产品,包括ESRI的ArcGIS 9.3、Google Earth和跨平台的GRASS地理信息系统。

  • GD库,动态生成图像,支持大多数格式:JPEG,GIF,WebP,XPM,BMP。通常用来动态生成图表、图片、缩略图等,经常在网络环境中使用;

  • Regex为MapServer提供正则表达式支持。

通过了解这些库,可通过减少要安装的功能数量来简化安装过程。即使只安装了基本版本的MapServer,它仍然能够创建功能强大的应用程序。熟悉MapServer后,可添加所需的其他功能。

MapServer是一个生成地图的程序,但提供了CGI接口(MapServer CGI的操作依赖于PHP),相关函数可以通过Web Access调用。为了多次运行MapServer,需要安装Web服务器(如Apache2)和一个工具(如FastCGI)以使应用程序(MapServer)与Web服务器(Apache)通信。默认情况下,Apache2没有启用CGI。

MapServer所依赖的库

MapServer所依赖的库

1.2.3. 在Debian/Ubuntu系统下安装

Debian/Ubuntu是我最常用的Linux版本,它设计良好的包管理工具真的很有趣。要安装MapServer,只需运行以下安装命令(需要管理员权限):

在Debian 12中:

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

在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 22.04中:

apt install -y apache2 php8.1 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

除了不同版本的PHP Debian/Ubuntu,几乎没有区别。安装这些程序包时,如果缺少相应的依赖项,则会自动安装它们。

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

$ 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

And some configureations are needed for the service of MapServer. The config files could be founds under the etc directory of the soruce codes. May be you just need Apache. Howerver, //webgis.cn uses Nginx for reverse proxy to Apache.

关于FastCGI的说明。

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

FastCGI使用持久(守护程序)进程来处理请求链,这些进程由FastCGI服务器管理,而不是Web服务器。当请求进入时,Web服务器通过套接字将环境变量和页面请求传递给FastCGI进程,例如FastCGI进程和Web服务器(两者都在本地),或者将TCP连接(远程服务器场上的FastCGI进程)传递给FastCGI进程。

配置

编辑Apache2配置文件,例如 more /etc/apache2/sites-enabled/webgis_pub_apache.conf

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>

1.2.4. Windows系统下的安装

要在Windows下安装MapServer,还需要安装Apache2、CGI和MapServer程序,这些程序在Windows下也有二进制包,但这种循序渐进的安装比较麻烦,容易出现问题。建议使用 MS4W (MapServer4 Windows),链接为:https://www.ms4w.com/