在Unix上编译¶
- 作者
霍华德巴特勒
- 联系
位于gmail.com的Hobu.inc
- 作者
托马斯堡
- 联系
gmail.com的thomas.bonfort
- 作者
杰夫麦克纳
- 联系
jmckenna在gatewaygeomatics.com
- 最后更新
2021-03-27
介绍¶
明尼苏达大学的MapServer是一个开源的免费的网络地图绘制引擎。由于其开源特性,它可以在各种平台和操作系统上编译。我们将重点讨论如何在类Unix平台上获取、编译和安装MapServer。
备注
详细的配置选项保存在 INSTALL.CMAKE 打包在源目录根目录下的文件:
小技巧
从MapServer 7.6.0版本开始,所需的最低CMake版本为3.0
您也可以检查 MapServerCompilation 有关其他信息的wiki页面。
编译器要求¶
从MapServer8.0开始,构建MapServer需要具有C++11和C99能力的编译器。这意味着例如使用GCC 4.8或更近的版本,或者clang3.3或更近的版本。
获取必要的软件¶
您可以从 下载 部分。
您还可以从 GitHub .
保护您的安装¶
在安装和配置期间,强烈建议查看的安全步骤 MAP= 通过设置来调用MapServer可执行文件 MS_MAP_PATTERN 或 MS_MAP_NO_PATH 或者隐藏 MAP= 参数,如本文档中所建议的 限制 Mapfile 访问 。中列出了保护服务器安全的所有可能环境变量 环境变量 。
所需的外部库¶
GDAL: GDAL库允许MapServer读取各种地理空间栅格格式(GDAL)和矢量格式(OGR)。它可以在https://gdal.org/上下载。(一些平台将此库称为 libgdal-dev )
PROJ: PROJ为MapServer提供投影支持。需要4.4.6或更高版本。
libpng :默认情况下,libpng应在您的系统上。回到1.2.7版本应该可以工作。
FreeType: 需要2.x或更高版本。
libjpeg :libjpeg允许mapserver以jpeg格式呈现图像。默认情况下,系统上应该安装足够的版本(可能是1998年以后的6B版本)。
警告
在MapServer 5.8+中,不推荐使用直接的jpeg支持,现在您应该依靠gdal在MapServer中提供栅格读取支持。但是,在生成(即写入)图像时,仍需要jpeg支持。
zlib: 默认情况下,Zlib应该在您的系统上。虽然不是由MapServer直接使用,但它是libpng的强制依赖项。
高度推荐的库¶
libcurl libCURL是OGC(WFS/WMS/WCS)客户机和服务器支持的基础。需要7.10或更高版本。
可选外部库¶
GEOS:
4.10 新版功能.
GEOS允许MapServer执行空间谓词和代数运算(内、触等&并、差、交)。
-
4.10 新版功能.
需要libxml才能使用 OGC SOS MapServer中的支持
Oracle Spatial OCI :您平台的客户端库可从Oracle网站下载。理想情况下,您的客户机库与您查询的数据库相匹配,但这不是一个困难的需求。
libpq :libpq需要支持在PostgreSQL数据库中使用PostGIS几何图形。理想情况下,您的客户机库与您正在查询的数据库相匹配。
FastCGI :fastcgi是用于将mapserver与各种Web服务器连接的常用协议。您需要安装开发包。下面是有关如何在MapServer中使用此功能的详细信息 FASTCGI . 在Ubuntu上,应该是:
$ apt-get -y install libfcgi-dev
Cairo (SVG, PDF) support :此库需要生成PDF和SVG输出。如果你在一个Ubuntu系统上,它可以安装“apt-get-install-y libcairo2 dev”
KML support :此呈现程序没有外部依赖项。
可选功能¶
Cairo SVG parser support :WITH_SVGCAIRO选项是改进SVG支持的建议的一部分。使用此功能需要安装libsvg-cairo库,可从以下位置获得:https://www.cairographics.org/snapshots/。您将需要编译和安装cairo、libsvg和libsvg-cairo。
SVG支持可以通过未维护的libsvg/libsvg cairo组合来启用,也可以通过librsvg(with_rsvg选项)来启用,但需要付出更多的依赖性。如果您的发行版为librsvg提供了一个包,请使用librsvg;如果编译librsvg依赖项的成本太重要,请返回libsvgcairo。
防颗粒几何支撑¶
由于版本5.0 MapServer支持agg渲染后端。MapServer5.6+将它直接嵌入到源树中,您不必做任何特殊的事情来支持它。
OGC支持¶
MapServer为许多 OGC specifications. For an overview, see MapServer OGC规范支持.
WMS支持¶
WMS服务器¶
支持 WMS server
您可以通过在配置输出中查找以下内容来检查它:
-- * WMS SERVER: ENABLED
如果出于某种原因您不需要WMS支持,可以使用“-dwith_wms=off”将其强制关闭。
有关使用此功能的详细信息,请参阅 WMS服务器 .
WMS客户端¶
还支持级联。这允许MapServer通过WMS透明地获取远程层,基本上充当客户端,并将它们与其他层组合以生成最终地图。
要启用此功能,您需要将with_client_wms选项传递到配置脚本。MapServer将自动查找libcurl,这也是必需的。
要验证此功能是否已启用,请检查以下项的配置输出:
-- * WMS CLIENT: ENABLED
备注
此功能在默认情况下是禁用的,您必须特别请求它。
有关使用此功能的详细信息,请参阅 WMS客户端 .
WFS支持¶
WFS服务器¶
支持 WFS server 默认情况下启用。需要GDAL(实际上是OGR)和PROJ支持。
要验证此功能是否已启用,请检查以下项的配置输出:
-- * WFS SERVER: ENABLED
如果出于某种原因您不需要WFS支持,可以使用“-dwith_w wfs=off”将其强制关闭。
有关使用此功能的详细信息,请参阅 WFS服务器 .
WFS客户端¶
MapServer还可以充当WFS客户机。这实际上意味着MapServer从远程服务器的WFS输出中读取数据并将其呈现到映射中,就像从shapefile中读取数据时一样。
为了启用此功能,您需要确保使用Xerces支持和PROJ支持构建了GDAL(实际上是OGR),并将with_CLIENT_WFS选项传递给配置脚本。MapServer将自动查找libcurl,这也是必需的。
要验证此功能是否已启用,请检查以下项的配置输出:
-- * WFS CLIENT: ENABLED
备注
此功能在默认情况下是禁用的,您必须特别请求它。
有关使用此功能的详细信息,请参阅 WFS客户端 .
WCS服务器¶
支持 WCS server WCS服务器 .
要验证此功能是否已启用,请检查以下项的配置输出:
-- * WCS SERVER: ENABLED
如果出于某种原因您不需要WCS支持,您可以使用“-dwith_wcs=off”将其强制关闭。
SOS服务器¶
通过使用with_sos选项启用对SoS的支持。有关此服务的详细信息,请访问 SOS服务器 .
要验证此功能是否已启用,请检查以下项的配置输出:
-- * SOS SERVER: ENABLED
备注
此功能在默认情况下是禁用的,您必须特别请求它。
空间仓储¶
MapServer可以使用各种数据输入源。越来越受欢迎的解决方案之一是使用支持空间的数据库来存储数据,并直接使用它们来为Web绘制地图。
在这里,您将了解如何使MapServer能够与这些产品之一对话。有关如何使用这些工具的更多详细信息,请参阅MapFile参考。本节仅详细介绍如何编译MapServer以供其使用。
邮政地理信息系统¶
PostGIS 将对地理对象的支持添加到 PostgreSQL 对象关系数据库。实际上,postgis“在空间上启用”了postgresql服务器,允许它用作地理信息系统(gis)的后端空间数据库,就像esri的sde或Oracle的空间扩展。Postgis包含在许多发行版的包装系统中,但如果需要,您也可以自己滚动。
MapServer可以使用PostGIS作为数据源。Postgis支持在默认情况下启用。
要验证此功能是否已启用,请检查以下项的配置输出:
-- * POSTGIS: /usr/local/pgsql/lib/libpq.so
如果出于某种原因不需要PostGIS支持,可以使用“-DWITH_POSTGIS=OFF”强制关闭它。为了帮助CMake找到您的PostGIS安装,您可以使用CMAKE_PREFIX_PATH选项(例如“-DCMAKE_PREFIX_PATH=/usr/local/pgsql”)。
空间数据库¶
MapServer也支持Oracle的Spatial。为了连接到它,您需要使用WITHORACLESPATIC选项根据Oracle库编译MapServer。您很可能需要设置一个Oracle_HOME环境变量,以使其正确配置。
要验证此功能是否已启用,请检查以下项的配置输出:
-- * Oracle Spatial: <path to oracle spatial shared library>
编译¶
在尝试编译MapServer之前,首先要确保安装了所有必需的和/或推荐的库,从而做好准备。这会使你的生活不那么复杂;)。这是我通常使用的顺序:
编译GDAL。描述如何编译GDAL超出了本文的范围。如果您有很多不同格式的需求,请确保首先安装这些库。我经常发现,构建GDAL库通常需要编译MapServer本身的时间!
编译项目。项目(以前 PROJ.4 )是一个直接的configure/make/make安装库。
编译libcurl。libcurl是一个直接配置/生成/生成安装库。此库仅与其他功能一起使用,因此“-with curl config”不会执行任何操作,除非同时选择“-with wmsclient”或“-with wfsclient”。
备注
如果要将MapServer配置为在访问WMS/WFS服务器时使用SSL,则必须使用“--with ssl”选项配置/编译libcurl。有关如何设置此设置的详细信息,请参阅 通过HTTPS访问OGC服务 .
编译/安装可选库。这些可能包括Postgis、Oracle Spatial、Agg、Ming、Pdflib或Mygis。根据需要进行混合和匹配。
将MapServer tarball和CD解压到MapServer目录::
$ tar -zxvf mapserver-X.Y.Z.tar.gz
创建构建目录并配置环境。
创建生成目录:
$ cd mapserver-X.Y.Z $ mkdir build $ cd build
使用“cmake”(这是一个示例)配置环境:
$ cmake -DCMAKE_INSTALL_PREFIX=/opt \ -DCMAKE_PREFIX_PATH=/usr/local/pgsql/91:/usr/local:/opt \ -DWITH_CLIENT_WFS=ON \ -DWITH_CLIENT_WMS=ON \ -DWITH_CURL=ON \ -DWITH_SOS=ON \ -DWITH_PHP=ON \ -DWITH_PERL=ON \ -DWITH_RUBY=ON \ -DWITH_JAVA=ON \ -DWITH_CSHARP=ON \ -DWITH_PYTHON=ON \ -DWITH_SVGCAIRO=ON \ -DWITH_ORACLESPATIAL=ON \ -DWITH_MSSQL2008=ON \ ../ >../configure.out.txt
备注
从MapServer 7.4.0开始,您可以通过 --WITH_PHPNG=ON 通过 SWIG API .
默认情况下启用以下选项(7.0版:带_-proj,带_-wms,带_-fribidi,带_-harfbuzz,带_-iconv,带_-cairo,带_-fcgi,带_-geos,带_-postgis,带_-gdal,带_-ogr,带_-wfs,带_-wcs,带_-libxml2,带_-gif。
如果还想构建库的静态版本,可以使用build_static和link_static_libmapserver选项,
还有许多其他选项可供选择。有关可用CMake选项的最新列表,请参阅CMakeLists.txt。
最好将配置命令放在一个文件中,并将其模式更改为可执行(+X),以保存键入内容并记录MapServer的配置方式。
既然您已经配置了构建选项并选择了希望MapServer使用的所有库,您就可以编译源代码了。
这实际上很简单,只需执行“make”::
$ make
安装MapServer库::
# make install
为了确保一切顺利,请查找名为 MAPSERV公司: :
$ ls -al mapserv -rwxr-xr-x 1 user user 13745 mars 11 17:45 mapserv
一个简单的测试是尝试并运行它:
$ ./mapserv This script can only be used to decode form results and should be initiated as a CGI process via a httpd server.
上面的信息是完全正常的,并且准确地表达了它所说的意思。如果你还有别的事,事情就大错特错了。
安装¶
MapServer二进制¶
mapserver程序本身只包含一个文件,即“mapserv”二进制可执行文件。这是一个CGI可执行文件,打算由Web服务器调用和运行。
在本节中,我们假设您在/usr/local/apache2中的默认目录结构下运行apache。您可能需要有权限编辑httpd.conf(主要的Apache配置文件),或者让某人(如您的网站管理员)帮助您了解配置详细信息。
如果您没有安装Apache,并且您想要Apache、PHP、FastCGI等,那么可能看起来像这样:
$ apt-get install -y apache2 apache2-mpm-worker libapache2-mod-fastcgi
$ a2enmod actions fastcgi alias
$ apt-get install libapache2-mod-php5 php5-common php5-cli php5-fpm php5
主要目标是将“mapserv”二进制文件安装到一个可公开访问的目录中,该目录被配置为运行CGI程序和脚本。
找到你的CGI bin目录。在默认配置下,cgi目录是“/usr/local/apache2/cgi-bin”(redhat:“/home/httpd/cgi-bin”,debian:“/usr/lib/cgi-bin”)。如果您使用的是Apache,那么在http.conf或默认站点中应该有一个scriptaalias指令,比如:
$ cat /etc/apache2/sites-available/default | grep 'cgi-bin' ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
找到新编译的mapserv可执行文件的安装路径。当您运行“make install”时会显示如下内容:
-- Installing: /usr/local/bin/mapserv -- Set runtime path of "/usr/local/bin/mapserv" to "/usr/local/lib:/usr/local/pgsql/91/lib"
您将要从CGI bin目录设置指向该可执行文件的符号链接:
# ln -s /usr/local/bin/mapserv /usr/lib/cgi-bin/mapserv
警告
确保链接到已安装的mapserv文件(运行“make install”之后),而不是源树中编译该文件的位置。
测试新安装¶
将mapserv文件放在此目录中,可以通过以下URL访问它:“http://yourhostname.com/cgi-bin/mapserv”。当通过Web客户机访问此URL时,如果一切正常,您应该期望得到以下输出:“没有要解码的查询信息。查询字符串已设置,但为空。“如果收到此消息,则说明已完成安装MapServer。
常见问题¶
文件权限¶
尝试安装二进制文件时最常见的问题是权限问题:
您没有写入Web服务器的CGI目录的权限。请您的网站管理员为您安装该文件。
Web服务器向您提供“403权限被拒绝”错误。确保Web服务器以“无人”身份运行的用户对二进制可执行文件具有执行权限。使文件世界可执行是完全正确和安全的:::
$ chmod o+x mapserv
阿帕奇错误¶
如果Web服务器配置不正确,也可能会收到一些不同类型的错误:
500内部服务器错误:这是一条非常普通的错误消息。它基本上告诉您的是Web服务器在运行程序时失败。您必须查阅Web服务器的错误日志以了解更多信息,并且可能需要获得您的网站管理员/系统管理员的帮助。Apache文档也有指针 setting up cgi-bin .
- ::
检查服务器日志$tail/var/log/apache2/error.log
一旦你把它编好了,你该去哪里?¶
这个 MapServer简介 文档提供了良好的MapServer入门介绍。