解决folium生成的html加载慢的问题,提升folium生成的html加载速度

17 篇文章 0 订阅
3 篇文章 0 订阅

这篇文章部分内容已经过时,请参考 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库文件。
解压的src文件需要和html文件在同一路径下

处理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)
  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团圆吧

1 分钱,求鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值