在线查看ArcGIS API for JS的帮助文档时,经常被网络搞得抓狂。为了更高效的学习,将SDK进行本地部署。下载文件(API和SDK)并解压后,都会有一个部署的教程。API的本地部署倒还顺利,官方SDK的部署却要下载node.js、glob。结果我安装之后运行官方脚本失败。
通过阅读部署步骤,发现要想本地部署SDK的关键就是把Sample Code和sandbox文件里的引用路径换成本地即可,官方的解释:
这里使用Python实现修改。
在本地部署SDK之前,需要将API部署好。首先当然是要下载这两个文件,在官网https://developers.arcgis.com/downloads/apis-and-sdks中下载两个文件(需要登录账号)。网上有说网站打不开,无法登录账号的现象。该现象确实存在,但我使用校园网进行访问时是成功的。并借助迅雷,在迅雷的搜索框里输入网址,完成下载,解压。我这里下载了4.14版本(其他版本部署方式略有不同,但是思想一致)。打开api和sdk文件夹,里边都会有一个install.html文件,打开就是官方给出部署的方法。
接下来就是部署ArcGIS API for JS了。其实就是将
arcgis_js_api\library\4.14\dojo\dojo.js
和
arcgis_js_api\library\4.14\init.js
文件中的
https://[HOSTNAME_AND_PATH_TO_JSAPI]dojo
字符串替换成IIS服务器的地址。当然要把整个文件夹放在IIS服务器里才生效,如何打开windows的IIS服务器可以在网上搜索。网上有说先把文件放进IIS服务器,再修改字符串的。但有时候C盘的内容要较高权限才能修改,因此我采用先修改字符串,后放入IIS服务器的步骤。
这里我替换的的地址为(两个文件的替换字符串一样):
http://localhost/arcgis_js_api/library/4.14/dojo
也就是说,之后我会把arcgis_js_api整个文件夹放在我电脑的路径为
C:\inetpub\wwwroot\...
这里需要说明,我把原来文件里的 https 改为了http 。官方的文档是不需要这样的,但是我这边使用https却无法运行。
修改之后,把文件夹放入IIS服务器中。至此,ArcGIS API for JS就在本地部署成功(其他博客用更清晰的部署步骤,我这里只是简单的写一下)。
通过阅读官方的SDK本地部署的方案,发现只要将
..\arcgis_js_v414_sdk\arcgis_js_api\sdk\latest\sample-code\sandbox\index.html
和
..\arcgis_js_v414_sdk\arcgis_js_api\sdk\latest\sample-code\*\live\index.html
中CDN链接换成本地部署的API即可。星号(*)表示所有文件夹。
以我的电脑为例:
将每个文件中link标签的href中的:
https://js.arcgis.com/xxxxxxxx
替换为:
http://localhost/arcgis_js_api/library/xxxxxxx
将每个文件中script标签的src为:
https://js.arcgis.com/4.14/
替换为:
http://localhost/arcgis_js_api/library/4.14/dojo/dojo.js
实现代码如下:
import os
from bs4 import BeautifulSoup
#V4.14
#寻找到要改的文件的路径
rootpath='/sdk/latest/sample-code'
files=os.listdir(rootpath) #文件夹下所有目录的列表
for f in files:
indexpath=os.path.join(rootpath,f,'live','index.html')
if os.path.isfile(indexpath):
#修改内容
print('start:'+indexpath)
with open(indexpath,"r",encoding="utf-8") as f:
bsp=BeautifulSoup(f.read(), 'lxml')
linklist=bsp.find_all('link')
scrilist=bsp.find_all('script')
for link in linklist:
if link.get('href'):
if link['href'].find('https://js.arcgis.com/')!=-1:
link['href']=link['href'].replace('https://js.arcgis.com/','http://localhost/arcgis_js_api/library/')
else:
continue
else:
continue
for srci in scrilist:
if srci.get('src'):
if srci['src']=='https://js.arcgis.com/4.14/':
srci['src']='http://localhost/arcgis_js_api/library/4.14/dojo/dojo.js'
else:
continue
else:
continue
with open(indexpath, 'w',encoding="utf-8") as fnew:
fnew.write(bsp.prettify())
else:
continue
以上还漏掉了一个,即:
..\arcgis_js_v414_sdk\arcgis_js_api\sdk\latest\sample-code\sandbox\index.html
这个文件根据上方要求手动更改。
之后将sdk文件夹里的全部内容拷贝至IIS服务器中。
根据sdk中index.html的文件路径。我电脑中的路径是:
C:\inetpub\wwwroot\arcgis_js_sdk\4.14\sdk\index.html
在浏览器中输入:
http://localhost/arcgis_js_sdk/4.14/sdk/index.html
即可打开引导页:
查看事例:
sandbox:
在代码区可以看到link标签的href和script标签的src属性已经变为本地。
不同的版本的修改是由差别的。