在Unix上编译¶
- 作者
Howard Butler
- 联系方式
位于gmail.com的Hobu.inc
- 作者
托马斯堡
- 联系方式
gmail.com的thomas.bonfort
- 作者
Jeff McKenna
- 联系方式
jmckenna在gatewaygeomatics.com
- 最后更新
2020-01-17
介绍¶
明尼苏达大学的MapServer是一个开源的免费的网络地图绘制引擎。由于其开源特性,它可以在各种平台和操作系统上编译。我们将重点讨论如何在类Unix平台上获取、编译和安装MapServer。
注解
详细的配置选项保存在 INSTALL.CMAKE 打包在源目录根目录下的文件:
您也可以检查 MapServerCompilation 有关其他信息的wiki页面。
获取必要的软件¶
您可以从 下载 部分。
您还可以从 GitHub .
所需的外部库¶
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的强制依赖项。
可选外部库¶
GEOS :geos允许mapserver执行空间谓词和代数操作(in、touch等&union、difference、intersection)。
4.10 新版功能.
libxml :libxml必须使用 OGC SOS 支持MapServer
4.10 新版功能.
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库,该库位于:http://cairographics.org/snapshots/。您需要编译和安装cairo、libsvg和libsvg cairo。
SVG支持可以通过未维护的libsvg/libsvg cairo组合来启用,也可以通过librsvg(with_rsvg选项)来启用,但需要付出更多的依赖性。如果您的发行版为librsvg提供了一个包,请使用librsvg;如果编译librsvg依赖项的成本太重要,请返回libsvgcairo。
OGC 支持¶
MapServer为许多 OGC specifications. For an overview, see MapServer OGC规范支持.
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客户端 .
空间仓储¶
MapServer可以使用各种数据输入源。越来越受欢迎的解决方案之一是使用支持空间的数据库来存储数据,并直接使用它们来为Web绘制地图。
在这里,您将了解如何使MapServer能够与这些产品之一进行对话。有关如何使用这些文件的详细信息,请参阅mapfile参考。本节仅详细介绍如何编译MapServer以供使用。
PostGIS¶
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。有关如何设置此设置的详细信息,请参阅 如何将MapServer设置为通过HTTPS访问服务的客户端 .
编译/安装可选库。这些可能包括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版:WITH_WMS, WITH_FRIBIDI, WITH_HARFBUZZ, WITH_ICONV, WITH_CAIRO, WITH_FCGI, WITH_GEOS, WITH_POSTGIS, WITH_GDAL, WITH_OGR, WITH_WFS, WITH_WCS, WITH_LIBXML2, WITH_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
Apache 错误¶
如果Web服务器配置不正确,也可能会收到一些不同类型的错误:
500内部服务器错误:这是一条非常普通的错误消息。它基本上告诉您的是Web服务器在运行程序时失败。您必须查阅Web服务器的错误日志以了解更多信息,并且可能需要获得您的网站管理员/系统管理员的帮助。Apache文档也有 setting up cgi-bin .
- ::
检查服务器日志$tail/var/log/apache2/error.log
编译之后的下一步¶
这个 MapServer简介 文档提供了良好的MapServer入门介绍。