萬研新 劉鑫 王作兵
摘? 要:采用美國Esri公司地理信息系統(tǒng)二次開發(fā)工具包ArcGIS API for JavaScript,加載ArcGIS Serve地圖服務時,常出現(xiàn)瀏覽器端不能顯示地圖的問題,針對該問題,本文從瀏覽器控制臺調(diào)試信息入手,采用敏感信息關聯(lián)法,結合客戶端、服務器端和瀏覽器端各自特點進行了深入分析和研究,得出當使用HTTPS協(xié)議訪問服務器時,自簽名證書不能通過瀏覽器安全驗證是導致問題的主要原因,基于該分析通過采用HTTP協(xié)議和禁止瀏覽器警告的方法解決了問題,并針對三款主流瀏覽器給出了具體的方法和步驟。
關鍵詞:Esri;ArcGIS;地理信息系統(tǒng);JavaScript;地圖
中圖分類號:TP274? ? ?文獻標識碼:A
Abstract:When adopting the ArcGIS API For Javascript,which is the second development kit of the geographic information system from American ESRI company,to load the ArcGIS Server map service,the problem that the browser cannot display the map often occurs.In order to solve this problem,this paper starts with the debugging information of browser console,uses the sensitive information association method,considers the characteristics of the client,the server and the browser,and conducts in-depth analysis and studies.It is concluded that when using the HTTPS protocol to access the server,the main cause for the problem is that the self-signed certification cannot pass the browser security verification.Based on this analysis,this paper solved the problem by using the HTTP protocol and forbidding browser warning.Specific methods and steps are given for three mainstream browsers.
1? ?引言(Introduction)
ArcGIS API for JavaScript是ESRI根據(jù)JavaScript技術實現(xiàn)的調(diào)用ArcGIS Server REST API接口的一組腳本,通過ArcGIS API for JavaScript可以將ArcGIS Server提供的地圖資源嵌入到Web應用中,使地圖在瀏覽器上顯示。但在ArcGIS Server單機部署開發(fā)環(huán)境下,往往會遇到web瀏覽器端不顯示地圖的問題。本文針對該問題首先從ArcGIS API for JavaScript語言本身和HTTPS協(xié)議對簽名證書的要求兩方面進行了原因分析,并基于不同原因給出了客戶段、瀏覽器端和服務器端的解決辦法[1-3]。
2? ?原因分析(Reason analysis)
通過ArcGIS API for JavaScript加載發(fā)布在ArcGIS Server上的地圖資時,導致瀏覽器不顯示地圖的原因是多方面的,這里僅對幾個典型的隱蔽的原因加以分析。
2.1? ?視圖顯示參數(shù)設置不當導致的不顯示
要使發(fā)布在ArcGIS Server上的地圖資顯示在瀏覽器上,需要對視圖顯示屬性如范圍(extent)、中心點(center)和縮放(zoom)等參數(shù)進行正確設置,否則將會導致地圖在視圖中看不見,這類錯誤調(diào)試窗口不會有任何提示,因為程序本身沒錯,很難找到原因[4]。
范圍(extent)屬性,決定了地圖在瀏覽器視圖中顯示的范圍,有四個參數(shù)xmin、ymin、xmax、ymax,單位為投影坐標(米),設置時必須弄清地圖實際投影坐標大小,四個參數(shù)大小必須在實際投影坐標范圍內(nèi),否則地圖將不能正確顯示。
中心點(center)和縮放(zoom)一般同時設置,中心點確定了地圖在瀏覽器視圖中的位置,縮放確定了地圖在視圖中的大小。中心點坐標設置不在地圖實際坐標范圍內(nèi)或者縮放比例太小將會導致地圖在視圖中不顯示。
為了避免此類錯誤,在不確定地圖實際坐標范圍的情況下,最好不要設置這些參數(shù),視圖在默認情況下也能正確顯示。
2.2? ?圖層與對應的地圖服務不對應導致的不顯示
圖層是承載服務的載體,ArcGIS for Server將GIS資源作為服務發(fā)布出來,要想在瀏覽器端看到這些服務,就必須將圖層和服務關聯(lián)起來,不同的服務對應不同的圖層類型,弄錯了這種對應關系,瀏覽器加載地圖服務時將不會顯示[5]。比如MapImageLayer圖層,對應 ArcGIS for Server發(fā)布的2D動態(tài)地圖服務,TileLayer圖層對應ArcGIS for Server發(fā)布的2D緩存地圖服務,如果程序中錯誤用TileLaye圖層加載發(fā)布的動態(tài)地圖服務,將不會有任何顯示,調(diào)試窗戶顯示如圖1所示。
②瀏覽至計算機→[計算機名稱]→sslcertificates。
③單擊 ArcGIS Server正在使用的證書并單擊導出。將文件保存到計算機上的某個位置。
④打開證書管理器??赏ㄟ^單擊開始按鈕,在搜索框中輸入certmgr.msc,并按 Enter鍵執(zhí)行此操作。
⑤在證書管理器窗口中,單擊受信任的根證書頒發(fā)機構并單擊證書。
⑥在頂部菜單中單擊操作并選擇所有任務→導入。
⑦在證書導入向?qū)υ捒蛑?,單擊下一步,然后按照向?qū)е械恼f明導入證書。
完成上述步驟后在Internet Explorer瀏覽器打開加載ArcGIS Server地圖服務的網(wǎng)頁,地圖已能在瀏覽器中正常顯示。
3.2.3? ?Google Chrome
在Google Chrome瀏覽器中使用自簽名證書連接到 ArcGIS Server 站點時,會顯示連接不受信任的警告。如圖6所示。
運行采用ArcGIS API for JavaScript編寫的網(wǎng)頁腳本程序加載地圖服務時,瀏覽器無任何顯示,控制臺調(diào)試信息如圖7所示。
從控制臺調(diào)試信息可以看出,地圖不顯示原因是瀏覽器無法通過自簽名證書安全驗證,訪問請求被阻止。從調(diào)試信息分析來看,Google Chrome不能通過自簽名證書安全驗證的原因是ArcGIS Server默認創(chuàng)建的自簽名證書格式不符合Google Chrome瀏覽器的要求,沒有指定“使用者可選名稱”。因此必須重新創(chuàng)建自簽名證書并將證書導入到OS證書存儲中。具體步驟如下:
①登錄到ArcGIS Server管理員目錄
②瀏覽至計算機(Machines)→[計算機名稱]→
sslcertificates。
③單擊生成(generate)將打開一張表格如圖8所示。
帶*號是必填項,按要求或者默認內(nèi)容填寫即可,特別要注意的是最后一項Subject Alternative Name(主題備選名稱)用于驗證所訪問網(wǎng)站所提供的SSL證書是否針對該網(wǎng)站頒發(fā)。ArcGIS Server默認創(chuàng)建的自簽名證書中該項是空白的,導致生成的自簽名證書沒有“使用者可選名稱“這一項,Google Chrome瀏覽器無法驗證提供的自簽名證書是否是針對該網(wǎng)站頒發(fā)的,從而阻止訪問。因此手動新建自簽名證書時該項必須要填寫,填寫要求如下:
如果服務器主要通過https://www.esri.com進行訪問,則SAN參數(shù)應設置為DNS:www.esri.com。如果將在公共網(wǎng)絡中使用https://www.esri.com并在組織的LAN(局域網(wǎng))中使用https://gisserver.esri.com訪問服務器,則SAN參數(shù)應設置為DNS:www.esri.com,DNS:gisserver.esri.com。填寫好后點擊generate便可生成證書。
證書生成后還需要配置ArcGIS Server以使用該證書,步驟如下:
①登錄到ArcGIS Server管理員目錄https://gisserver.domain.com:6443/arcgis/admin。
②瀏覽至計算機→[計算機名稱]。
③單擊編輯。
④在Web服務器SSL證書字段中鍵入要使用的證書名稱。
⑤單擊保存編輯內(nèi)容以應用更改。
⑥ArcGIS Serve站點自動重新啟動,配置完成,新的證書已經(jīng)啟用。
配置好ArcGIS Server啟用新生成的證書后,還必須安裝服務器證書作為受信任的證書,步驟同上。
完成上述步驟后在Google Chrome瀏覽器打開ArcGIS Serve Manager網(wǎng)頁已無警告信息,運行加載ArcGIS Server地圖服務的程序,地圖已能在瀏覽器中正常顯示。
4? ?結論(Conclusion)
通過ArcGIS API for JavaScript編程,使用HTTPS協(xié)議加載發(fā)布在ArcGIS Server上的地圖服務時,出現(xiàn)瀏覽器端地圖不顯示問題原因是多方面的,在排除語言本身的原因后,應重點考慮自簽名證書的問題,故為避免此類問題,在開發(fā)環(huán)境搭建時首先應按本文所述的方法采用自簽名證書配置好ArcGIS Server和主流瀏覽器。
參考文獻(References)
[1] Yingjie Hu,Krzysztof Janowicz,Sathya Prasad.Metadata Topic Harmonization and Semantic Search for Linked-Data-Driven Geoportals:A Case Study Using ArcGIS Online[J].Transactions in GIS,2015,19(3):398-416.
[2] Hu Y,Janowicz K,Prasad S,et al.Metadata Topic Harmonization and Semantic Search for Linke-Data-Driven Geoportals:A Case Study Using ArcGIS Online[J].Transactions in Gis,2015,19(3):398-416.
[3] Abulizi N,Kawamura A,Tomiyama K,et al.Measuring and evaluating of road roughness conditions with a compact road profiler and ArcGIS[J].Journal of Traffic & Transportation Engineering,2016,3(5):16-29.
[4] Durumeric Z,Kasten J,Bailey M,et al.Analysis of the HTTPS certificate ecosystem[C].Proceedings of the 2013 conference on Internet measurement conference.ACM,2013,1(10):291-304.
[5] 黃茹芬,農(nóng)強.基于證書的任意指定驗證人簽名方案[J].太原師范學院學報(自然科學版),2012(3):70-73.
[6] 王洪偉,張立朝,張海東,等.分布式ArcGIS Server體系結構的研究與開發(fā)[J].測繪科學技術學報,2007,24(2):110-113.
作者簡介:
萬研新(1971-),男,碩士,高級工程師.研究領域:地理信息,地圖開發(fā).
劉? 鑫(1989-),男,碩士,工程師.研究領域:自動控制.
王作兵(1981-),男,本科,工程師.研究領域:電子信息,軟件開發(fā).