这篇文章部分内容已经过时,请参考 folium 地图加载速度提升让加载速度飞起来 加载本地资源
关于folium工具包
folium工具包是一个很好用的地图可视化工具,具体使用方法不是本文的重点内容,大家可以自行查阅其它相关文档进行学习。
关于folium生成的html加载速度的问题
folium生成的html引用了第三方的js脚本库和CSS库来进行页面效果的渲染,但如果在国内网络环境下使用时,由于js及CSS的服务器在国外,导致这些库文件的加载缓慢,效果无法保证,极端情况下,html出现打开失败的现象。
使用离线js/css库
如上所述,解决js/css服务链接速度慢的问题,可以通过使用离线js/css库的方式来处理。将js/css库下载到本地,然后在html文件内引用本地路径下的html文件,从而解决js/css库加载慢的问题,达到提升html文件打开速度和打开稳定性的目的。
js/css库文件
folium所引用的js/css库打包整理见folium html src.zip。下载后解压文件夹,将folium所生成的html文件与src文件夹放于同一路径下,配合以下所列的处理过程,html文件便可以引用离线js/css库文件。
处理html文件
folium生成的html文件默认使用在线js/css库,我们需要对所生成的html文件进行处理,以便使html文件使用离线的js/css库文件,避免加载在线库。
python函数
# 本函数的根本作用,是将folium所生成的html文件中的相关js/css引用链接,替换为本地的js/css路径。所使用的路径为相对路径,所以在打开html文件的时候,需要将html文件与src文件夹放置在同一个路径下
import os
def replaceJsRef(fileFullName):
replaceContents = [['''<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>''',
'''<script src="./src/jQuery/jquery-2.0.0.js"></script>'''],
['''<script src="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.js"></script>''',
'''<script src="./src/leaflet/leaflet.js"></script>'''],
['''<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>''',
'''<script src="./src/bootstrap-3.3.7/js/bootstrap.min.js"></script>'''],
['''<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>''',
'''<script src="./src/Leaflet.awesome-markers-2.0/dist/leaflet.awesome-markers.js"></script>'''],
['''<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.6.0/dist/leaflet.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/leaflet/leaflet.css"/>'''],
['''<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/bootstrap-3.3.7/css/bootstrap.min.css"/>'''],
['''<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/bootstrap-3.3.7/css/bootstrap-theme.min.css"/>'''],
['''<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/font-awesome-4.7.0/css/font-awesome.min.css"/>'''],
['''<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/Leaflet.awesome-markers-2.0/dist/leaflet.awesome-markers.css"/>'''],
['''<link rel="stylesheet" href="https://rawcdn.githack.com/python-visualization/folium/master/folium/templates/leaflet.awesome.rotate.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/leaflet.awesome.rotate/leaflet.awesome.rotate.css"/>'''],
['''<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/leaflet.markercluster.js"></script>''',
'''<script src="./src/leaflet.markercluster/dist/leaflet.markercluster.js"></script>'''],
['''<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/MarkerCluster.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/leaflet.markercluster/dist/MarkerCluster.css"/>'''],
['''<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.1.0/MarkerCluster.Default.css"/>''',
'''<link rel="stylesheet" type="text/css" href="./src/leaflet.markercluster/dist/MarkerCluster.Default.css"/>'''],
['''<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-dvf/0.3.0/leaflet-dvf.markers.min.js"></script>''',
'''<script src="./src/leaflet-dvf/leaflet-dvf.markers.min.js"></script>''']
]
with open(fileFullName, "r", encoding="utf-8") as f1, open("%s.bak" % fileFullName, "w", encoding="utf-8") as f2:
for line in f1:
for itm in replaceContents:
if itm[0] in line:
line = line.replace(itm[0], itm[1])
replaceContents.remove(itm)
f2.write(line)
os.remove(fileFullName)
os.rename("%s.bak" % fileFullName, fileFullName)