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调用显示地图脚本如下:
fromPyQt5.QtCoreimport*fromPyQt5.QtWidgetsimport*fromPyQt5.QtWebEngineWidgetsimport*importsysimportosimportfolium# 调用高德地图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")classMainWindow(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'))# 然后添加以下代码 三个文件均作此处理importos,sysfromjinja2importFileSystemLoaderifgetattr(sys,'frozen',False):# we are running in a bundletemplatedir=sys._MEIPASSelse:# we are running in a normal Python environmenttemplatedir=os.path.dirname(os.path.abspath(__file__))ENV=Environment(loader=FileSystemLoader(templatedir+'\\templates'))再对 *.spec 文件中作如下修改:
最后运行打包命令:
pyinstaller-F XXX.spec注意:pyinstaller打包时,有时候第一次打包成功了,但是exe打不开,可以再重新运行一下打包命令。【经验之谈】