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.dll
、QtCore4.dll
、QtGui4.dll
、QtNetwork4.dll
、QtSvg4.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.qgs
或map=xxx
也都是失敗的。因為沒有相關的文檔和源碼,這個還需要繼續測試。