google-code-prettify

星期三, 12月 20, 2017

【QGIS】將 QGIS Server 安裝在 windows 2016 的 IIS 10 手把手教學

口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!

環境:
Oracle VM VirtualBox 5.1.30
VM 作業系統:Windows 2016、Windows 2012
IIS 版本:10.0.14393、8.5(測試成功)7.x (理論上都一樣未試過)
qgis server:2.14.20 ltr
qgis desktop:2.14.20 ltr

狀況:
1. 台灣的代理商、經銷商,就像是水貨商一樣
賣你東西之前,說的他的東西有多好用…會飛天會遁地…
賣你東西之後,它錢收了爽完…就不理你了…就跟花錢玩的牛郎一樣(因該吧我也沒玩過)
2. 就是喜歡不一樣,要站在巨人的頭頂上(那裡風景好阿),不要塞在水貨商的屁眼裡!
在那兩個禮拜學會寫 python 的日子裡,看了 Mosky Liu youtube 影片 年會:群在故我在,你的簡單信念是什麼 ,為了讓那些像水貨商的代理商、經銷商去呷賽(吃屎、kiss ass hole),
為了著偉大的理想,發了一篇有極微貢獻的 blog 文章,讓 QGIS Server 因使用而產生價值!
更重要的是讓那些像水貨商的代理商、經銷商去呷賽
3. 實現奧卡姆剃刀原則
奧卡姆剃刀(英語:Occam's Razor, Ockham's Razor),又稱「奧卡姆的剃刀」,拉丁文為lex parsimoniae,意思是簡約之法則是由14世紀邏輯學家、聖方濟各會修士奧卡姆的威廉(William of Occam,約1287年至1347年,奧卡姆(Ockham)位於英格蘭的薩里郡)提出的一個解決問題的法則,而其中最流行的「若無必要,勿增實體」(Non sunt multiplicanda entia sine necessitate)
「切勿浪費較多東西,去做『用較少的東西,同樣可以做好的事情』。」
我深深的覺的QGIS SERVER做到了這點…

大綱:
1. 安裝基礎環境
2. QGIS LTR 安裝
2.1 下載 qgis server 安裝包
2.2 安裝程式
3. IIS 相關設定
3.1 在 IIS 安裝 fcgi
3.2 接下來設定系統變數吧
3.3 目錄權限設定
3.4 IIS 設定
4. 建立 qgis 地圖專案
5. 測試

概略說明:
在谷哥庇佑下,遍尋天下文章…找的安裝 QGIS Server 幾乎都是安裝在 Apache 下,
只有極少數的粗略說明,幾乎毫無幫助…
IIS 也一樣有提共網站服務阿,為什麼在 windows 下還要在裝 Apache?
基於奧卡姆剃刀原則,不因該拿牛刀殺雞雞…
我一定要找出方法…

安裝方法:
1. 安裝基礎環境
在 Windows 作業系統上,安裝 iis、DotFramework 2.x 3.x 4.x…

2. QGIS LTR 安裝
2.1 下載 qgis server 安裝包
去官網下載吧

下載存檔


2.2 安裝程式
執行安裝程式吧

選 Advenced Install

挑喜歡的安裝方式吧

下一步…

由於我選擇的是 Install from Internet ,所以要選擇安裝包的位置

下一步…

下一步…

挑選要裝的套件吧
基本上我只裝了 Desktop、Server

Desktop 選裝 2.14.21-1 ltr

Server 選裝 2.14.21-1 ltr

下一步…

下一步…

安裝中…

在經歷過無腦的下一步攻擊後,終於裝完


3. IIS 相關設定
3.1 在 IIS 安裝 fcgi
預設安裝好的 IIS 是沒有 FastCGI 的喔


開啟 伺服器管理員 > 新增角色及功能

下一步吧

選擇安裝類型 > 角色型或功能型安裝

下一步吧


將 CGI 勾選

我勾了這些

.NET Framework 我裝了這些

安裝

裝好啦

FastCGI 設定 出現啦

3.2 接下來設定系統變數吧
設定環境變數

系統變數 Path 增加:
C:\OSGeo4W64\bin
C:\OSGeo4W64\apps\qgis-ltr\bin
C:\OSGeo4W64\apps\grass\grass-@grassversion@\bin 
C:\OSGeo4W64\apps\grass\grass-@grassversion@\lib
(grass 沒裝應該不用設啦…)

2016 設定界面 長的不一樣…

新增系統變數QGIS_AUTH_DB_DIR_PATH、PYTHONHOME、PYTHONPATH、QGIS_PREFIX_PATH、QT_PLUGIN_PATH、GDAL_CACHEMAX、GDAL_DATA、GDAL_DRIVER_PATH、PDAL_DRIVER_PATH、PROJ_LIB

系統變數增加變數名稱為 QGIS_AUTH_DB_DIR_PATH
值為C:\OSGeo4W64\apps\qgis-ltr\resources

系統變數增加變數名稱為 PYTHONHOME
值為C:\OSGeo4W64\apps\Python27


系統變數增加變數名稱為 PYTHONPATH
值為C:\OSGeo4W64\apps\qgis-ltr\.\python;C:\OSGeo4W64\apps\qgis-ltr\.\python\plugins;C:\OSGeo4W64\apps\Python27\DLLs;C:\OSGeo4W64\apps\Python27\lib;C:\OSGeo4W64\bin;C:\OSGeo4W64\apps\Python27;C:\OSGeo4W64\apps\Python27\lib\site-packages;

系統變數增加變數名稱為 QGIS_PREFIX_PATH
值為 C:\OSGeo4W64\apps\qgis-ltr

系統變數增加變數名稱為 QT_PLUGIN_PATH
值為 C:\OSGeo4W64\apps\qgis-ltr\qtplugins;C:\OSGeo4W64\apps\qt4\plugins

 系統變數增加變數名稱為 GDAL_CACHEMAX
值為 64

 系統變數增加變數名稱為 GDAL_DATA
值為 C:\OSGeo4W64\share\gdal

 系統變數增加變數名稱為 GDAL_DRIVER_PATH
值為 C:\OSGeo4W64\bin

 系統變數增加變數名稱為 PDAL_DRIVER_PATH
值為 C:\OSGeo4W64\bin
(這是啥?我也不知道不要問我…我根據 Apache  環境設定抄來的,因該是沒作用吧)

系統變數增加變數名稱為  PROJ_LIB
值為 C:\OSGeo4W64\share\proj

接下來測試看看 QGIS Server 那隻 FastCGI 程式是否可以正常運作
開啟命令提示字元來測試吧…
基本上 path 設定完,不管在那都可以執行才對…
我測試時是先切換路徑到 qgis server 安裝路徑下,
路徑為 C:\OSGeo4W64\apps\qgis-ltr\bin
如果這隻qgis_mapserv.fcgi.exe,是會正常吐出 xml tag 那就成功一半了

3.3 目錄權限設定
將整個 qgis 安裝的目錄都設定iisuser權限給它
路徑為 C:\OSGeo4W64
使用者包含:IUSR、IIS_IUSRS

3.4 設定


新增虛擬目錄(其實直接新增應用程式也可以才對)

設定別名:qgis(可以隨便定,差別在於服務的網址路徑不同)
實體路徑:C:\OSGeo4W64\apps\qgis-ltr\bin

轉換成應用程式(好啦…我也違反奧卡姆剃刀原則,我當初測試畫面就是這樣嘛)

在 IIS 最根的那層,也就是電腦名稱那層,去設定 ISAPI及CGI限制
原因是底下都會繼承阿,就懶阿

先把 Active Server Page(ASP),限制設定為不允許

新增 ISAPI 或 CGI 限制
ISAPI 或 CGI 路徑:C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe
描述:QGISSERVER (其實有定義沒定義都沒差啦)

允許延伸路徑執行,要打勾

接下來設定 FastCGI

點選 【FastCGI 設定】

新增 FastCGI 應用程式
完整路徑:C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe

設定【處理常式對應】
點選 【處理常式對應】


新增模組對應
要求路徑:qgis_mapserv.fcgi.exe
(iis 收到要求的路徑或檔案來執行下列定義程式運算 也可叫wms*)

模組:FastCgiModule

執行檔:C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe

名稱:qgis_mapserv.fcgi.exe
(可自行定義 叫 wms,不過要給它一個叫wms的 fcgi 檔案,我是這麼幹的…)

2018-05-30 補充:
我額外設定了一組模組對應,要求路徑叫wms*,模組一樣設定為 FastCgiModule,
執行檔也設為 C:\OSGeo4W64\apps\qgis-ltr\bin\qgis_mapserv.fcgi.exe,
名稱則叫做 wms。
copy qgis_mapserv.fcgi.exe ,檔名叫 wms 。

這麼做是wms server網址,可以改成其他的:
http://192.168.15.62/qgis/wms?...


要求限制 > 對應(看上圖吧)

要求限制 > 指令動詞(看上圖吧)GET,HEAD,POST

要求限制 > 存取(看上圖吧)



接下來~測試是否成功…


見證奇蹟的時刻…看到wms 回應的 xml 囉

4. 建立 qgis 地圖專案
於qgis server 路徑下來建立專案檔
qgis server 所安裝路徑為 C:\OSGeo4W64\apps\qgis-ltr\bin

編輯地圖並儲存專案檔 .qgs
Save paths 設為絕對路徑 absolute (這樣只要把 專案檔與fcgi程式放一起即可)

 Project > Project Properties

圖資設定編好後,來發 wms 服務吧
點選【OWS Server】頁籤
(1) Service Capabilities 勾起來,內容就依實況設吧
(2) WMS Capabilities > Advertised extent 勾起來,Boundary 就讓它自己抓吧
把 Use Current Canbas Extent 按下去就行了
(3) CRS restrictions,可以手動加,懶的話就用 Used 按下去,坐標系統就會長出來了
(4) Exclude composers 勾起來
按下 確定 ,然後儲存專案吧

5. 測試
開一空白專案來測試一下發布成果吧

先建立一個 WMS 連結
Name:  local (隨便定的)
URL:http://192.168.15.62/qgis/qgis_mapserv.fcgi.exe?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
(192.168.15.62 因為從另一台機器去測試;qgis是剛剛設的應用程式)

連接wms server
根據剛才設定wms 連結 來 Connect連接
按下Add 將圖層加入qgis ,來測試顯示結果


結果
成功,圖例就是 QGIS 設定的

再來一發,網頁上也接的到…
這樣一來…該是讓那些像水貨商的代理商、經銷商去呷賽啦~
很重要~所以說三次…

PS:
如果裝完發布沒反應…考慮重啟 IIS 服務吧…
在系統管理員身份的命令提示字元下…iisreset 吧…

【參考文獻】
(1) QGIS Server on Windows 10/Server 2012
(2) QGIS Server在IIS 7.0及以上中配置 (廢…勿入)
(2) QGIS Server 2.8 on Windows Server 2012