0. 简述

关于QGIS Server相关的文档很少,我也没有找到其源码在哪里,所以有些问题也不知道怎么解决,只能慢慢摸索。

这里只记录了在windows 10上安装使用的过程,在linux下过程也差不多,但是简单多了,很多缺失的东西可以直接命令安装。

我这里使用了最高版本的,但是最好还是使用长期版本,没有这么多问题。

参考:

1. 下载QGIS桌面64位版本

也可以不下载,使用OSGeo4W在线安装程序,只安装qgis-server但我测试这个安装不全。我安装是最新的3.2.3版本。



使用在线安装的时候,下载站点最好选择http://download.osgeo.org,这个网站下载最快。

下载地址: https://qgis.org/downloads/QGIS-OSGeo4W-3.2.3-1-Setup-x86_64.exe

安装的时候最好不要安装在C盘(win10下会很多地方有权限问题),安装路径中也最好不要有空格,原因后面会提到。

2. 下载安装QGIS Server程序

下载地址:http://download.osgeo.org/osgeo4w/x86_64/release/qgis/qgis-server/

这里没有找到32位版本程序的下载,只能下载64位版本。下载的版本要与桌面版本一致。

下载之后解压到QGIS的安装目录即可,压缩包内的目录结构与QGIS安装目录结构是对应的。

然后复制一份httpd.d目录下的httpd_qgis.conf.tmpl文件,改名为httpd_qgis.conf

然后编辑这个新文件

  • 将里面的@osgeo4w@替换为QGIS的安装目录
  • @grassversion@替换为grass的版本号
  • @windir@替换为windows的目录。

    或者直接运行一下QGIS安装目录下的etc/postinstall下的qgis-server.bat脚本即可。

    修改的结果大致如下:

3. 下载安装Apache服务器

qgis server实质上是一个cgis程序,所以需要Apache服务器来调用。

Apache下载地址:https://www.apachelounge.com/download/

下载后直接解压即可,注意不要解压到有空格的目录。

解压之后修改conf目录下在httpd.conf

首先修改最前面的SVRROOT变量值

Define SRVROOT "C:/Apache24"
ServerRoot "${SRVROOT}"

然后在最后位置,把httpd_qgis.conf包含进去

include "C:/Program Files/QGIS 3.2/httpd.d/*.conf"

因为qgis server是一个fastcgi程序,所以这里需要下载apache的fastcgi模块

下载地址:https://www.apachelounge.com/download/

注意要下载与apache对应的版本。

下载之后解压到apache目录下的modules目录下即可。

4、使用及问题处理

完成上面的步骤之后,可以启动apache安装目录下的bin/httpd.exe程序了。

如果没有报错,则可以获取一下GetCapabilities试试



这里我在httpd.conf中修改了端口,所以访问的是8080端口。

Forbidden

You don't have permission to access /qgis/qgis_mapserv.fcgi.exe on this server.

这里可以看到,返回了403错误,这里说明这个文件是存在的,只是被apache禁止访问了。

这里修改下apache的httpd.conf文件

<Directory />
AllowOverride none
Require all denied
</Directory>

修改为

<Directory />
AllowOverride none
Require all granted
</Directory>

或者修改httod_qgis.conf文件,添加Require all granted即可。

重启httpd.exe后继续测试,这时候发现返回的错误码变成了503

这时候可以打开apache的日志看看错误的原因。

这里可以看到,还是这个路径中有空格的原因。

这个问题两个解决办法

  • 一是把qgis_mapserv.fcgi.exe程序文件复制到Apache安装目录下的cgi-bin目录中,然后访问http://127.0.0.1:8080/cgi-bin/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
  • 二是重新安装qgis到没有空格的路径中去。

然后继续测试,还可以遇到问题。

如下:



这个问题也很好解决,这是因为qgis_mapserv.fcgi.exe编译的时候依赖的这些动态库并没有打包到里面来,需要自己去下载过来。同样缺失的还有QtXml4.dllQtCore4.dllQtGui4.dllQtNetwork4.dllQtSvg4.dll,这些dll在QGIS2.18的安装目录下可以找到。我这里打包上传一下,地址在这里qgis_mapserv.fcgi.exe-depends.7z。也可以使用OSGeo4W在线安装程序下载。

继续测试,这里还会碰到问题:



offscreen插件是Qt用于离屏渲染的,在Qt5.1版本才提供。

打开httpd_qgis.conf文件,可以看到在定义Qt插件路径变量QT_PLUGIN_PATH的值的时候,里面对应路径是qt4的,这里只需要把4改为5即可。

修改完成之后,重启httpd.exe继续测试。

经过上面处理之后,qgis_mapserv.fcgi.exe确实能够被调用运行了,这个通过ProcessMinitor可以监测到调用过程。

按照网上一些资料的说法,将QGIS的工程文件xxx.qgs放入qgis_mapserv.fcgi.exe所在目录,就可以用于提供默认的服务,不必指定map选项参数。但是我测试GetCapabilities的结果没有成功,程序执行后返回500错误,也就是qgis_mapserv.fcgi.exe程序没有正确返回对应的XML内容,在请求的时候添加map=xxx.qgsmap=xxx也都是失败的。因为没有相关的文档和源码,这个还需要继续测试。

QGIS Server使用记录的更多相关文章

  1. CentOS 5.5 下安装Countly Web Server过程记录

    CentOS 5.5 下安装Countly Web Server过程记录 1. 系统更新与中文语言包安装 2. 基本环境配置: 2.1. NodeJS安装 依赖项安装 yum -y install g ...

  2. oracle 、mysql、 sql server使用记录

    oracle .mysql. sql server使用记录 mysql常用命令: mysqld --启动mysql数据库 show databases; -- 查看数据库 use database; ...

  3. 使用SQL Server Audit记录数据库变更

        最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更.在SQL Server中这类工作如果不事前捕获记录的话,无法做到.对于捕获变更来说,可以考虑的选择包括Trace,CDC. ...

  4. SQL Server转发记录指针的坏味道

    什么是转发记录指针? 转发记录指针是堆表中特有的数据存储机制. 当你修改了某个数据页中的一行时,如果该行所在的数据页已经无法存放其修改后的行, SQL Server会把这行数据移动到一个新的数据页上面 ...

  5. Sentry Server 日志记录分析服务

    原文地址:http://blog.shanbay.com/archives/998 或许你不太会喜欢异常,特别是那些发生后继而沉默在应用日志里那些,你不知道从何开始,因为它们看起来并非那么平易近人,但 ...

  6. SQL Server之记录筛选(top、ties、offset)汇总

    一.TOP 筛选 如果有 ORDER BY 子句,TOP 筛选将根据排序的结果返回指定的行数.如果没有 ORDER BY 子句,TOP 筛选将按照行的物理顺序返回指定的行数. 1. 返回指定数目的行 ...

  7. Windows Server 脚本记录Apache、Mysql 每分钟并发数

    打开windows server 计划任务管理器.定时执行如下的Bat脚本即可. 在D盘新建一个monitor文件夹,创建ApacheMysql.bat文件.内容如下: 在monitor文件夹中新建m ...

  8. SQL Server 表,记录 死锁解决办法

    我自己的数据库表记录死锁后的 根据以下资料的 解决方案: 1. 先根据以下语句 查询 哪些表被 死锁,及 死锁的  spid SELECT request_session_id spid,OBJECT ...

  9. nginx多server配置记录

    直接在配置文件(/etc/nginx/nginx.conf)中添加如下代码: server { listen 8080; server_name 192.168.100.174:8080; root ...

随机推荐

  1. <%= %>、<% %>、<%@ %>和<%# %>的区别

    轉至http://blog.csdn.net/wildfeng04/article/details/7290126 <%=%> 里面放的变量名 <% %> 中间一般放函数或者方 ...

  2. Python 2 和 3 的区别记录

    Python 2 和 3 的区别记录 print 2:关键字,可以 print a,也可以 print(a) 3:内置函数,必须带(),print(a) reload() 2:内置函数,可以直接使用 ...

  3. 用Java进行大数处理(BigInteger)-hdu1042

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目描述: 代码实现: import java.util.Scanner; import jav ...

  4. springcloud(六):配置中心git示例

    随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多.某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错.配置 ...

  5. PTA 5-3 解题报告

    GitHub 问题描述 解题思路 代码 问题描述 5-3 计算平均值 (50分) 现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式 ...

  6. 在用UEditor往后台传数据写入数据库时,出现错误:从客户端(NewsContent="<p><img src="http://...")中检测到有潜在危险的 Request.。。。

    解决办法: 把传数据的方式换了一下,加上 [ValidateInput(false)]就不报错了. 建议看看这个:http://www.360doc.com/content/10/0521/15/46 ...

  7. 2018.12.1 Test

    目录 2018.12.1 Test A 串string(思路) B 变量variable(最小割ISAP) C 取石子stone(思路 博弈) 考试代码 B C 2018.12.1 Test 题目为2 ...

  8. 2110 ACM Crisis of HDU 母函数

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2110 题意:分出1/3的价值,有几种可能? 思路:母函数 与之前的题目2079相似,复习笔记再来写代码: ...

  9. 2545 ACM 博客 比较树的路径长短

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2545 题意:比较树的路径长短 思路:利用数组存入父节点的值, 例如: 5 2 1 2 1 3 3 4 3 ...

  10. python高级——垃圾回收机制

    GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用.GC彻底把程序员从资源管理的重担中解放出来,让他们有更多的时间放在 ...