QGIS Server使用記錄


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也都是失敗的。因為沒有相關的文檔和源碼,這個還需要繼續測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM