【folium】pyqt调用显示地图

folium文档链接:folium

folium安装方式:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple folium

由于网上加载显示地图大多都是在jupyter上运行的,我的需求是嵌入到pyqt中显示,提供一种思路:将地图保存成.html网页文件,然后用pyqt调用网页。如果想要实时在地图上做标记,可以设置一个定时器,每隔一段时间更新加载地图。

pyqt中显示地图,使用QWebEngineView类(老版本没有这个类),可以安装

pip install PyQtWebEngine -i https://pypi.douban.com/simple/

安装完相关库之后,就可以编写脚本显示地图了;pyqt调用显示地图脚本如下:

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
import sys
import os
import folium

# 调用高德地图http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}
Map = folium.Map(location=[34.2634, 109.0432],
                 zoom_start=16,
                 control_scale=True,
                 tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
                 attr='default')

Map.add_child(folium.LatLngPopup())                     # 显示鼠标点击点经纬度
Map.add_child(folium.ClickForMarker(popup='Waypoint'))  # 将鼠标点击点添加到地图上

# 标记一个实心圆
folium.CircleMarker(
    location=[34.2634, 109.0432],
    radius=1,
    popup='popup',
    color='#DC143C',      # 圈的颜色
    fill=True,
    fill_color='#6495E'  # 填充颜色
).add_to(Map)
Map.save("save_map.html")


class MainWindow(QMainWindow):
    def __init__(self):
        super(QMainWindow, self).__init__()
        self.setWindowTitle('地图显示')
        self.resize(1000, 640)
        # 新建一个QWebEngineView()对象
        self.qwebengine = QWebEngineView(self)
        # 设置网页在窗口中显示的位置和大小
        self.qwebengine.setGeometry(20, 20, 960, 600)
        # 在QWebEngineView中加载网址
        path = "file:\\" + os.getcwd() + "\\save_map.html"
        path = path.replace('\\', '/')
        self.qwebengine.load(QUrl(path))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())

效果如下:
在这里插入图片描述

使用pyinstaller打包的过程中遇到问题,参考链接
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\natha\AppData\Local\Temp_MEI309082\branca_cnames.json’
解决方案:
找到库文件中以下文件:
\ folium \ folium.py, \ folium \ raster_layers.py, \ branca \ element.py 并对这三个文件作如下修改:

# 注释掉这一行的ENV配置
# ENV = Environment(loader=PackageLoader('branca', 'templates')) 

# 然后添加以下代码 三个文件均作此处理
import os, sys
from jinja2 import FileSystemLoader
if getattr(sys, 'frozen', False):
        # we are running in a bundle
    templatedir = sys._MEIPASS
else:
    # we are running in a normal Python environment
    templatedir = os.path.dirname(os.path.abspath(__file__))
ENV = Environment(loader=FileSystemLoader(templatedir + '\\templates'))

再对 *.spec 文件中作如下修改:
在这里插入图片描述
最后运行打包命令:

pyinstaller -F XXX.spec

注意:pyinstaller打包时,有时候第一次打包成功了,但是exe打不开,可以再重新运行一下打包命令。【经验之谈】

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值