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所依赖的库#
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
MapServer的服务还需要进行一些配置。配置文件可以在source代码的 etc 目录下找到,也许只需要Apache即可。然而,//webgis.cn使用Nginx作为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/。