赞
踩
pyecharts显示地图,地图数据可以安装pyecharts相关的地图数据包,也可以使用自定义的geojson文件,本文使用自定义geojson文件,自定义geojson文件相比于默认的地图数据能有更大的操作空间和自由度,由于本文不适用默认的地图数据,实现过程中不需要安装地图数据包。
目录
网站:www.naturalearthdata.com/downloads/
本文显示最简单的世界行政区划,选择 1:110m比例尺的 Cultural
只需要显示到国家,选择Admin 0 - Countries
下载得到zip压缩包
解压缩
网址:mapshaper.org
打开 mapshaper.org 网址,该网站是一个地图数据格式转换工具
点击“select”,打开刚刚解压后的文件夹,同时选择.dbf .prj .shp三个文件,导入
点击右上角“Export”按钮
导出的文件格式为GeoJSON, pyecharts显示地图需要用GeoJSON格式的文件,导出,本文导出后文件名为world06.json
网址:geojson.io
打开 geojson.io 网址,该网站是一个geojson文件查看工具
点击左上角的“Open”,选择刚刚导出的world06.json的geojson文件
左侧显示地图,右侧显示json文件的字段和值
json文件特征:
1)最顶级的键值为 type 和 features
2)features的值为数组,数组里每个元素里有 type geometry properties 三个键
3) 这里要关注 properties 里的“名称”键,名称键是显示该区域名称使用,pyecharts需要引用这个键值用以显示区域名称,即NAME,一些geojson文件用的是小写name, 本文是NAME
由于本文没有安装pyecharts默认的地图数据包,我们可以另辟蹊径。
网址:datav.aliyun.com/tools/atlas/#&lat=31.769817845138945&lng=104.29901249999999&zoom=4
这个网址有提供中国的geojson数据下载,也可以直接查看json文件,通过 geo.datav.aliyun.com/areas_v3/bound/geojson?code=100000_full 直接查看
这个文件的字段就和pyecharts默认的地图数据包文件差不多
pyecharts显示地图,本质上还是在网页上显示,要在PyQt5的项目中实现pyecharts的地图显示,需要在PyQt5中提供浏览器引擎,用于显示pyecharts生成的网页
1)安装PyQt5包
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
2)查看PyQt5的版本,安装相同版本的 PyQtWebEngine(没有相同版本就用最相近的版本尝试)
pip list 查看 PyQt5版本为5.15.7
pip install PyQtWebEngine==5.15.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
(没有5.15.7版本的PyQtWebEngine,所以安装相近版本5.15.6)
3) 安装pyecharts包
pip install pyecharts -i https://pypi.tuna.tsinghua.edu.cn/simple
在项目根目录下创建 data文件夹 html文件夹
data文件夹:放置地图geojson文件
html文件夹:放置pyecharts生成的html网页文件
- import sys,json
- from PyQt5 import QtWidgets
- from PyQt5.QtCore import QUrl, QFileInfo
- from PyQt5.QtWebEngineWidgets import QWebEngineView
-
- from pyecharts import options as opts
- from pyecharts.charts import Geo
- world_data = None
- with open('../data/world06.json', 'r', encoding='utf-8') as fr:
- world_data = json.load(fr)
-
- class Main_Window(QtWidgets.QMainWindow):
-
- def __init__(self):
- super().__init__()
- self.desktop = QtWidgets.QApplication.desktop()
- self.screenRect = self.desktop.screenGeometry()
- self.height = self.screenRect.height()
- self.width = self.screenRect.width()
-
- self.init_ui()
-
- def init_ui(self):
- self.setWindowTitle('简易世界地图显示')
- self.setGeometry(self.width / 4, self.height / 4, self.width / 2, self.height / 2)
-
- self.browser = QWebEngineView()
-
- layout = QtWidgets.QVBoxLayout()
- layout.addWidget(self.browser)
-
- center_widget = QtWidgets.QWidget()
- center_widget.setLayout(layout)
-
- self.setCentralWidget(center_widget)
-
- def draw_chart(self):
- world_geo = (Geo().add_js_funcs("echarts.registerMap('world00',{});".format(world_data))
- .add_schema(maptype='world00',name_property='NAME')
- .set_global_opts(title_opts=opts.TitleOpts(title="全球"))
- )
- world_geo.render("../html/world.html")
-
- temp_url = QUrl(QFileInfo("../html/world.html").absoluteFilePath())
- self.browser.load(temp_url)
-
-
- if __name__ == '__main__':
- app = QtWidgets.QApplication(sys.argv)
- window = Main_Window()
- window.draw_chart()
- window.show()
- sys.exit(app.exec_())
本文制作的geojson文件properties的名称的键为“NAME”,pyecharts默认的键名为“name”,所以在代码中要指定键名,不能使用默认的
pyecharts官方文档 pyecharts.org/#/zh-cn/intro
pyecharts官方实例 gallery.pyecharts.org/#/Geo/geo_chart_countries_js
echarts官网 echarts.apache.org/zh/index.html
echarts官方实例 echarts.apache.org/examples/zh/index.html#chart-type-map
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。