ArcGIS API For JavaScript无法加载ArcGIS Server地图服务的原因及对策
2020-03-20万研新刘鑫王作兵
万研新 刘鑫 王作兵
摘 要:采用美国Esri公司地理信息系统二次开发工具包ArcGIS API for JavaScript,加载ArcGIS Serve地图服务时,常出现浏览器端不能显示地图的问题,针对该问题,本文从浏览器控制台调试信息入手,采用敏感信息关联法,结合客户端、服务器端和浏览器端各自特点进行了深入分析和研究,得出当使用HTTPS协议访问服务器时,自签名证书不能通过浏览器安全验证是导致问题的主要原因,基于该分析通过采用HTTP协议和禁止浏览器警告的方法解决了问题,并针对三款主流浏览器给出了具体的方法和步骤。
关键词:Esri;ArcGIS;地理信息系统;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根据JavaScript技术实现的调用ArcGIS Server REST API接口的一组脚本,通过ArcGIS API for JavaScript可以将ArcGIS Server提供的地图资源嵌入到Web应用中,使地图在浏览器上显示。但在ArcGIS Server单机部署开发环境下,往往会遇到web浏览器端不显示地图的问题。本文针对该问题首先从ArcGIS API for JavaScript语言本身和HTTPS协议对签名证书的要求两方面进行了原因分析,并基于不同原因给出了客户段、浏览器端和服务器端的解决办法[1-3]。
2 原因分析(Reason analysis)
通过ArcGIS API for JavaScript加载发布在ArcGIS Server上的地图资时,导致浏览器不显示地图的原因是多方面的,这里仅对几个典型的隐蔽的原因加以分析。
2.1 视图显示参数设置不当导致的不显示
要使发布在ArcGIS Server上的地图资显示在浏览器上,需要对视图显示属性如范围(extent)、中心点(center)和缩放(zoom)等参数进行正确设置,否则将会导致地图在视图中看不见,这类错误调试窗口不会有任何提示,因为程序本身没错,很难找到原因[4]。
范围(extent)属性,决定了地图在浏览器视图中显示的范围,有四个参数xmin、ymin、xmax、ymax,单位为投影坐标(米),设置时必须弄清地图实际投影坐标大小,四个参数大小必须在实际投影坐标范围内,否则地图将不能正确显示。
中心点(center)和缩放(zoom)一般同时设置,中心点确定了地图在浏览器视图中的位置,缩放确定了地图在视图中的大小。中心点坐标设置不在地图实际坐标范围内或者缩放比例太小将会导致地图在视图中不显示。
为了避免此类错误,在不确定地图实际坐标范围的情况下,最好不要设置这些参数,视图在默认情况下也能正确显示。
2.2 图层与对应的地图服务不对应导致的不显示
图层是承载服务的载体,ArcGIS for Server将GIS资源作为服务发布出来,要想在浏览器端看到这些服务,就必须将图层和服务关联起来,不同的服务对应不同的图层类型,弄错了这种对应关系,浏览器加载地图服务时将不会显示[5]。比如MapImageLayer图层,对应 ArcGIS for Server发布的2D动态地图服务,TileLayer图层对应ArcGIS for Server发布的2D缓存地图服务,如果程序中错误用TileLaye圖层加载发布的动态地图服务,将不会有任何显示,调试窗户显示如图1所示。
②浏览至计算机→[计算机名称]→sslcertificates。
③单击 ArcGIS Server正在使用的证书并单击导出。将文件保存到计算机上的某个位置。
④打开证书管理器。可通过单击开始按钮,在搜索框中输入certmgr.msc,并按 Enter键执行此操作。
⑤在证书管理器窗口中,单击受信任的根证书颁发机构并单击证书。
⑥在顶部菜单中单击操作并选择所有任务→导入。
⑦在证书导入向导对话框中,单击下一步,然后按照向导中的说明导入证书。
完成上述步骤后在Internet Explorer浏览器打开加载ArcGIS Server地图服务的网页,地图已能在浏览器中正常显示。
3.2.3 Google Chrome
在Google Chrome浏览器中使用自签名证书连接到 ArcGIS Server 站点时,会显示连接不受信任的警告。如图6所示。
运行采用ArcGIS API for JavaScript编写的网页脚本程序加载地图服务时,浏览器无任何显示,控制台调试信息如图7所示。
从控制台调试信息可以看出,地图不显示原因是浏览器无法通过自签名证书安全验证,访问请求被阻止。从调试信息分析来看,Google Chrome不能通过自签名证书安全验证的原因是ArcGIS Server默认创建的自签名证书格式不符合Google Chrome浏览器的要求,没有指定“使用者可选名称”。因此必须重新创建自签名证书并将证书导入到OS证书存储中。具体步骤如下:
①登录到ArcGIS Server管理员目录
②浏览至计算机(Machines)→[计算机名称]→
sslcertificates。
③单击生成(generate)将打开一张表格如图8所示。
带*号是必填项,按要求或者默认内容填写即可,特别要注意的是最后一项Subject Alternative Name(主题备选名称)用于验证所访问网站所提供的SSL证书是否针对该网站颁发。ArcGIS Server默认创建的自签名证书中该项是空白的,导致生成的自签名证书没有“使用者可选名称“这一项,Google Chrome浏览器无法验证提供的自签名证书是否是针对该网站颁发的,从而阻止访问。因此手动新建自签名证书时该项必须要填写,填写要求如下:
如果服务器主要通过https://www.esri.com进行访问,则SAN参数应设置为DNS:www.esri.com。如果将在公共网络中使用https://www.esri.com并在组织的LAN(局域网)中使用https://gisserver.esri.com访问服务器,则SAN参数应设置为DNS:www.esri.com,DNS:gisserver.esri.com。填写好后点击generate便可生成证书。
证书生成后还需要配置ArcGIS Server以使用该证书,步骤如下:
①登录到ArcGIS Server管理员目录https://gisserver.domain.com:6443/arcgis/admin。
②浏览至计算机→[计算机名称]。
③单击编辑。
④在Web服务器SSL证书字段中键入要使用的证书名称。
⑤单击保存编辑内容以应用更改。
⑥ArcGIS Serve站点自动重新启动,配置完成,新的证书已经启用。
配置好ArcGIS Server启用新生成的证书后,还必须安装服务器证书作为受信任的证书,步骤同上。
完成上述步骤后在Google Chrome浏览器打开ArcGIS Serve Manager網页已无警告信息,运行加载ArcGIS Server地图服务的程序,地图已能在浏览器中正常显示。
4 结论(Conclusion)
通过ArcGIS API for JavaScript编程,使用HTTPS协议加载发布在ArcGIS Server上的地图服务时,出现浏览器端地图不显示问题原因是多方面的,在排除语言本身的原因后,应重点考虑自签名证书的问题,故为避免此类问题,在开发环境搭建时首先应按本文所述的方法采用自签名证书配置好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] 黄茹芬,农强.基于证书的任意指定验证人签名方案[J].太原师范学院学报(自然科学版),2012(3):70-73.
[6] 王洪伟,张立朝,张海东,等.分布式ArcGIS Server体系结构的研究与开发[J].测绘科学技术学报,2007,24(2):110-113.
作者简介:
万研新(1971-),男,硕士,高级工程师.研究领域:地理信息,地图开发.
刘 鑫(1989-),男,硕士,工程师.研究领域:自动控制.
王作兵(1981-),男,本科,工程师.研究领域:电子信息,软件开发.