Ubantu Linux系统安装MapServer

Ubantu Linux系统安装MapServer

由于网上linux下安装mapserver的帖子较少,官方文档的详细性不够,自己是小白,走了很多弯路,特写此文记录以及为大家提供一些参考。文末有我下好的安装包,百度网盘打开即可,但不保证使用的是最新版本。特别注意:不同版本的ubantu可能有差异,也有可能你之前某些库安装好了,还有可能你是天命之子不会出错!总而言之,因机而异

一:安装简介和心得体会
下面是安装过程中的一些心得体会,大可以花几分钟仔细阅读,对完整的安装过程有一定了解和心理准备:

1.在LINUX上安装mapserver是一个很费劲的事情,如果可能的话,可以选择在Windows上进行安装。Linux系统上的安装会很繁琐,甚至头疼,但是运行应该会比Windows更稳定。
2.Uantu Linux是i386架构,下载相应的的库时,需要注意架构不同可能带来问题。
3.装Mapserver,需要装很多的库,繁琐之处体现在此。linux “库库相套”的情况非常常见,尤其是我新装的ubantu,往往装一个库需要额外安装一两个库甚至更多,安装相应的库压缩包首选是在开发文档中的官方超链接,然后是Ubantu PACKAGE点击前往网站的库下载,还有百度搜索帖子下载。

5.有一个很好的建议就是把自己整个安装过程记录下来,我用的txt,很方便,可以比较明确地知道自己下一步要干什么。
4.一些常见的压缩文件解压格式:debian的压缩包应该是不能用于ubantu的(我没试成功)
1 ).tar.xz格式解压为xz -d xx.tar.xz //生成了.tar文件 再tar -xvf xx.tar
2) .tar.gz 格式解压为 tar -zxvf xx.tar.gz
3).tar.bz2 格式解压为 tar -jxvf xx.tar.bz2
5.有一个很好的建议就是把自己整个安装过程记录下来,我用的txt,很方便,可以比较明确地知道自己下一步要干什么。

6.此贴是在装完mapserver几天之后,由一位20岁即椎间盘膨出的小白写的。(希望大家注意身体,久坐需要多动一动,以免步后尘!!!)不一定完全适用所有的情况,当时的具体细节可能遗忘,仅供参考,欢迎指正,可在评论区进行交流。
7.共享文件夹:共享文件夹是用来连通windows和虚拟机的文件存储的。如果你的uabntu不能联网,请百度找到联网方法,实在不行也没事,设置好共享文件夹(如sharefile)即可。linux的共享文件夹在目录/mnt/hgfs/下,在windows下好压缩包到sharefile中,在linux的此目录下即可找到压缩包。

8.复制压缩包、新建文件夹可能会遇到权限问题,在终端输入命令nautilus即可用更高权限使用文件操作。
9.一般在指定安装目录后,例如./configure --prefix=/usr/sqlite4,使用完make install后,会在sqlite4文件夹中生成四个文件夹bin,lib,include,share,其中bin文件夹里的是 lib文件夹里的是库文件,.so文件;include文件夹里的是 ;share文件夹里的是文档说明之类的文件。可能会遇到没有share或者bin文件夹的情况,不要慌,除非后续报错,不然就是这个库不需要这个文件夹。

官网很重要!官网很重要!官网很重要!建议先熟悉官网的各种内容分布,有时候遇到问题没解决,官网可能给出了答案,但是位置比较偏僻。
官网的安装说明在此(最重要的安装说明!!!)Mapserver Unix下的编译
同时我也参考了很多博客,如下:Ubantu下的Mapserver安装
linux安装mapserver 安装mapserver
由于这些帖子是比较古老的帖子,所以实际上参考价值还是比较小的,需要多摸索才能解决实际遇到的问题。下面详细介绍mapserver的安装。

二:详细安装——库安装

装库有个秘诀,缺什么装什么,不要担心error太多,可能都是一类错误,解决了一个就解决了一大堆错误。

  1. 下载Mapserver压缩包,我的是7.6.1的版本,官网下载即可。

  2. Mapserver需要很多的支持包/支持库才能运行起来,此过程是最繁琐的过程,需要细心。官网说明的必要的包如下:

GDAL PROJ libpng Free Type libjpeg zlib

可选的包如下:

GEOS libxml libpq giflib FastCGI CAIRO KML support HarfBuzz Mysql

我没有安装 Mysql,因为我用到的是postgresql,因为有配套的空间函数Postgis,对于地图操作来说是更适合的。有些库表面是可选库,其实还是属于必须的库(库库相套),在安装过程中就会发现此规律。其中还有很多的服务端,比如WMS、WFS、WCS、SOS等等我都是默认的,并没有特意安装,如有需求可自行安装。

1)安装GDAL。GDAL是干什么的呢?简单地说,GDAL是一个操作各种栅格地理数据格式的库。包括读取、写入、转换、处理各种栅格数据格式等等。
安装GDAL需要先安装PROJ,而安装PROJ又需要安装sqlite(库库相套,让人无奈)。PROJ是;sqlite是。我当时参考的帖子如下GDAL安装参考
但是他安装的是PROJ6,我安装的是PROJ7过程并无太大差别。

这里详细介绍sqlite4的安装过程:下好安装包后,在usr目录下新建文件夹sqlite4,将gz压缩包复制到sqlite4,再使用命令tar -zxvf sqlite4.xxx.xxx.tar.gz ,解压后用cd命令进入文件夹,再使用命令./configure --prefix=/usr/sqlite4,./configure是用来编译的,–prefix是确定’安装目录’;完成后,再使用make命令,最后是使用make install,如果安装成功的话,则会在你刚刚确定的安装目录下生成四个文件夹lib,include,bin,share。sqlite4安装完成后如图:sqlite3

安装完sqlite4后之后,开始安装PROJ7,过程与上述的类似。先在官网下好PROJ7适用于ubantu liunx的版本,在目录/usr/下新建目录/proj7/,把压缩包复制到/usr/proj7/下,再打开终端使用解压缩命令解压, 解压后用cd命令进入文件夹,再使用命令./configure --prefix=/usr/proj7再依次序使用make命令,make install命令完成安装。如果在安装中遇到问题,仔细阅读,一般是缺少其他库的依赖。我遇到的是找不到tiff库,直接使用命令sudo apt-get install libtiff5-dev,自动下载tiff库,解决此问题。

那么到这里PROJ7已经安装成功了,接下安装GDAL。GDAL与上述库的安装如出一辙,不再详述,参考贴很详细。make install的过程很久,耐心等待吧。安装完成后,就距离我们的目标近了一大步因为已经知道安装库的基本方法以及遇到问题如何解决。PROJ7安装完成后如图:PROJ7

2)安装freetype。这个库主要是。安装freetype库,还是使用安装库的那一套方法。比较简单,freetype不需要安装其他库,且安装完之后没有bin文件夹(确实没有,可能本来就不需要)。freetype安装完成后如图:freetype

3)安装libjpeg。这个库主要是为了加载jpeg格式的图片。安装libjpeg库,还是老一套安装方法,四个文件夹都有。libjpeg安装完成后如图:在这里插入图片描述

4)安装geos库。这个库主要是。安装geos库,还是老一套安装方法,这里是没有share文件夹的,需要等待很久。

5)安装zlib库。这个库主要是。安装zlib库,还是老一套安装方法,比较简单,无bin文件夹。

6)安装libpng。这个库主要是加载png格式的图片。安装libjpeg库,老一套安装方法。

装完上述库之后,大可以休息一会儿,当时我不知道装了多久,毕竟是在摸索,挺难的。那么现在,需要来两个“大家伙”了,postgresql和postgis。postgresql是现在非常流行的数据库(简称pg数据库),使用比率逐年上升,有关数据库的使用大可百度。而postgis是与pg数据库相配套的空间函数,如point,StringLine等等都可以使用,(大可百度)。需要着重是说明的是,postgis是需要与pg数据库版本匹配的,我当时参考了很多的帖子,比较重要的是下面四个帖子:帖子1 帖子2 帖子3 帖子4

7)先装postgresql。我是直接用的命令行下载的。我是装的postgresql9.5版本, apt-get -y install postgresql,成功。同时在安装的时候一并装了libpq。使用sudo -u postgres psql进入数据库,它会显示版本号。如下图postgresql信息

8)安装postgis。装postgis ,首先用apt-cache search postgresql postgis查找最新的版本,再使用apt-get install postgresql-9.5-postgis-2.2(我的是9.5因此使用的这条命令,对应的postgis是2.2版本)。注意这个包只是postgis的包并不包含postgresql 它的含义是适合postgresql 9.5的postgis 2.2版本。如果你的pg数据库版本不是9.5,那么需要使用apt-get install postgresql-9.5-postgis-x.x,如下图
在这里插入图片描述

装好postgis后,需要安装postgis的扩展。使用sudo -u postgres psql进入数据库,然后输入下述命令:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION fuzzystrmatch;

使用命令/dx显示一下扩展模块,我的扩展模块如下:postgis扩展

使用命令SELECT ST_Point(1, 2) AS MyPoint;测试一下,在这里插入图片描述

至此,还早呢。

9)安装cairo2-dev,apt-get install -y libcairo2-dev,支持生成PDF和SVG输出。这里直接使用命令安装。

10)安装php7.4,源码安装(这里可能会出问题,由于时间比较久,安装的时候没做记录)

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.3

温馨提示:

虽然官方说明的库文件装的差不多了,但是实际上还需要其他库:(如果此时不装,之后一样可以装,只是在执行make命令时出现的错误更多,可能让人心态爆炸,没错我就炸了。)harfbuzz、FRIBIDI、ODBC、exempi、gif、protbuf。装完这五个基本上后面使用make时的错误会少很多。不装这些的话可以直接看第三步——mapserver安装。

尽量使用源码安装,后面make可以更方便:
11)harfbuzz安装。直接在csdn上搜索,找到源码安装的方式,在/usr/harfbuzz/下安装好即可。

12)HRIBIDI安装。我找了很久这个包,终于在ubantu官网找到了!点击前往 搜索你要的包即可,再使用源码安装即可(记得指定路径)。

13)ODBC安装。也是在ubantu PACKAGE上下的。

14)exempi安装。需要boost>=1.330,再下个boost,其中遇到了debian系统下的文件无法解压的问题(我下错版本了),从官网找到boost的压缩包,文章末尾有压缩包的。boost很大,安装了半个小时左右。安装完boost后,再装exempi,成功,但是出现很多警告(警告内容大多是某某某变量什么的没有被使用过),可能有隐患(我装好之后好像没出什么问题)。

15)gif安装。前文提到的mapserver官方文档中的可选库有libgif的官网下载地址。

  1. protobuf安装。我参考的是protobuf安装。使用-2.6.1版本,直接configure,不带路径装。同时安装protobuf-c,带路径安装。

17)装libxml2。源码安装。

18)再装svg 接着装svgcairo,还是用源码指定路径装。

我安装的库如图:基本上要求安装的库文件已经安装完毕,但是后面才是真正的挑战!
在这里插入图片描述

三:详细安装——mapserver安装
1.mapserver简介:MapServer可以看作 是两个独立模块的统称:MapServer CGI模块和MapScript模块。在服务器端可以使用任一模块,编写WebGIS程序。MapServer程序本身仅包含一个文件,即“ mapserv”二进制文件可执行文件。 这是一个CGI可执行文件,由自己的计算机调用并运行网络服务器。我们的目标是:得到mapserv可执行文件:如图 。在这里插入图片描述

2.安装

我们按官方文档的来:如图官方编译方法
前面的1、2、3、4步,我们已经完成,直接进入第五步。在/usr/文件夹下新建一个mapserver文件夹,将mapserver压缩包复制到该目录下。先解压:tar -zxvf mapserver-X.Y.Z.tar.gz。进入第六步,创建构建目录并配置环境。

创建构建目录:即创建一个build文件夹,之后生成的目标文件mapserv可执行文件会生成在这个目录下。

$ cd mapserver-X.Y.Z
$ mkdir build
$ cd build  //进入build目录

这个时候我们可以试一下使用cmake ..命令了,惊不惊喜,意不意外!错误相当多,当时我的错误是280行!!!原地爆炸!!但是不要慌,仔细浏览错误之后(建议把输出的错误信息复制到notepad++里,方便查看),可以得到一个结论,大多数错误都是找不到库
我当时大概是这样(应该还不止):

1.protobufc library/component/dependency could not be found.
2.PROJ library/component could not be found and is a mandatory dependency//强制依赖
3.FRIBIDI library/component/dependency could not be found.
4.HARFBUZZ library/component/dependency could not be found.
5.ODBC library/component/dependency could not be found.
6.GEOS library/component/dependency could not be found.
7.POSTGIS library/component/dependency could not be found.
8.GDAL library/component could not be found and is a mandatory dependency
9.RSVG library/component/dependency could not be found.
10.LIBXML2 library/component/dependency could not be found.
11.GIF library/component/dependency could not be found.
12.EXEMPI library/component/dependency could not be found.
13.Could NOT find SWIG (missing: SWIG_EXECUTABLE SWIG_DIR)
Could NOT find POSTGRESQL (missing:  POSTGRESQL_LIBRARY POSTGRESQL_INCLUDE_DIR) 
CMake Error at CMakeLists.txt:91 (message):
  POSTGIS library/component/dependency could not be found.

    HINTS:
    - disable POSTGIS support by adding -DWITH_POSTGIS=0
    - add the POSTGIS install directory to the CMAKE_PREFIX_PATH variable (-DCMAKE_PREFIX_PATH="/path/to/POSTGIS-install-dir;/path/to/other/dirs"
Call Stack (most recent call first):
  CMakeLists.txt:599 (report_optional_not_found)


-- Could NOT find PY_setuptools (missing:  PY_SETUPTOOLS) 
-- CMake Version: 3.5
-- Build Type: Release
-- Python MapScript output directory: /usr/mapserver/mapserver-7.6.1/build/mapscript/python
-- Python Executable: /usr/bin/python
-- Python site packages: /usr/lib/python2.7/dist-packages
CMake Error at mapscript/php/CMakeLists.txt:46 (install):
  install TARGETS given no LIBRARY DESTINATION for module target
  "php_mapscript".


-- Could NOT find JNI (missing:  JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) 
-- Could NOT find Java (missing:  Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE) 
CMake Error at mapscript/java/CMakeLists.txt:7 (message):
  Could not find required Java components.  Try setting the JAVA_HOME
  environment variable (required on e.g.  Ubuntu)


CMake Error at mapscript/csharp/CMakeLists.txt:9 (MESSAGE):
  Could not find csharp compiler

那么怎么解决呢?它找不到需要的库,那么就想办法让它找到。使用cmake命令,让它到我们设定的目录下面去寻找我们安装好的相应库文件(虽然这一步可能会使人难受)。由于我们之前使用的库安装方法大多是源码编译安装,因此找目录还是比较方便的。使用如下命令之后(cmake后面有一个空格,..后面有一个空格), 再使用cmake ..命令错误会减少,减少是因为它根据我们指定的目录找到了它要的proj7、geos、gdal、harfbuzz、fribidi、odbc、exempi、gif、protobuff库。

cmake .. -DCMAKE_PREFIX_PATH="/usr/proj7/;/usr/geos/;/usr/gdal;/usr/harfbuzz/;/usr/fribidi/;/usr/odbc/;/usr/exempi/;/usr/gif/;/usr/protobuf"

看到这里基本上此类问题可以解决完成了,如果还有找不到库文件的错误,继续使用这个办法,缺什么补什么,再用cmake .. -DCMAKE_PREFIX_PATH="/usr/.."命令补充即可。
现在的问题已经比较少了,仔细阅读你使用make后的错误提示,按着错误提示来做,总会找到解决办法的。

我现在还有以下错误:

1.找不到RSVG的路径;
2.找不到Python的setuptools位置;Could NOT find POSTGRESQL (missing:  POSTGRESQL_LIBRARY 3.POSTGRESQL_INCLUDE_DIR)
4.postgresql、postgis的位置找不到;
5.java环境变量和路径问题;
6.缺少csharp编译环境
7.PHP找不到库的目的地。php_mapscript错误:CMake Error at mapscript/php/CMakeLists.txt:46 (install):
  install TARGETS given no LIBRARY DESTINATION for module target
  "php_mapscript".

1.装RSVG需要额外装4个额外包,我感觉RSVG不会用到(装起来还麻烦),因此设置不需要用到这个库:cmake .. -DMAKE_RSVG=0,RSVG错误消失;

2.在setupstools目录etupstools-19.6的python setup.py install,错误消失,原因是python工具的安装方法不一样。

3.解决命令:apt-get install libpq-dev postgresql-server-dev-all

5.关于JAVA_HOME的错误,安装JAVA环境并且设置好JAVA_HOME变量,这里可以参考ubantu装java,使用的是帖子里方法2的安装。配置环境变量的命令如下

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/libs/tools.jar:$JAVA_HOME/libs/dt.jar
export PKG_CONFIG_PATH=/usr/svg/lib/pkgconfig/:/usr/libxml2//lib/pkgconfig/

6.装csharp编译环境 sudo apt-get install mono-devel 查看mono版本 mono --version,成功减少csharp compiler错误

7.这里参考博客添加目的库
根据报错找到/mapscript/php/目录(相对于build目录,即/usr/mapserver/mapserver-7.6.1/build/mapscript/php)下的cMakeLists.txt文件的46行,

install(TARGETS php_mapscript DESTINATION ${PHP_EXTENSION_DIR})

添加 LIBRARY DESTINATION lib,即:

install(TARGETS php_mapscript DESTINATION ${PHP_EXTENSION_DIR} LIBRARY DESTINATION lib)

到这里为止,基本上使用cmake命令出现的错误都消失了,出现的结果如下图:
cmake-1
cmake-2

make和make install
好了到了这一步就可以使用make命令了!!
在make过程中也可能会出现错误,当时我前面出现的几个小错误容易解决。make的结果是会保留的,即假如当你完成了10%的进度后,前面生成的文件不用再次生成了。当时我的进度到了76%左右时,出现了很多php找不到库文件的错误,这个是因为很多php的头文件是写死的,它会引用其他的头文件,例如它可能是这样的 <…/xx.h>,而在我的实际目录中没有这个.h文件。想了个办法,把php目录下的所有include文件夹复制到/usr/include中,运行两次(它可能反应不过来,所以可以多试一下,没准就成功了),make成功!!!

在这里插入图片描述

接下来就是在/usr/mapserver/mapserver-x.x.x/build/目录下make install
安装成功。

试验一下:使用

 ./mapserv

如果输出以下内容则说明安装mapserver成功,生成了mapserv可执行文件。

This script can only be used to decode form results and
should be initiated as a CGI process via a httpd server.

make install

可喜可贺!!

找到cgi-bin目录,/ usr / lib / cgi-bin,你会发现里面是空的,你需要从cgi-bin设置到该可执行文件的符号链接 目录:

ln -s /usr/mapserver/mapserver-7.6.1/bin/mapserv /usr/lib/cgi-bin/mapserv

安装apache2
为了能让mapserv能运行我们自己写的mapfile文件我们需要安装阿帕奇服务器,使用命令安装

sudo apt-get update
sudo apt-get install apache2

在浏览器输入localhost或者127.0.0.1或者本机ip(ifconfig中inet addr)如果出现以下页面则说明安装成功:apache2安装成功

这里补充一句,apache2 ubantu的主配置文件为etc/apache2目录下的apache2.conf而不是httpd.conf,如果需要配置的话就在apache2,conf中配置。

然后在浏览器中输入127.0.0.1/cgi-bin/mapserv,如果看到以下消息,则说明你安装mapserver真正成功了!!!

No query information to decode. QUERY_STRING is set, but empty.

cgi-bin-mapserv

如果遇到403或者404错误等,应该是 Web服务器运行的用户没有执行二进制可执行文件的权限 。使用命令chmod o+x mapserv即可。

mapserver之路才刚刚开始…

mapserver所需要的库文件如下:
链接:https://pan.baidu.com/s/1iqm4budENsbSXs2s_i-h6w
提取码:map0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值