在pyecharts中自定义geojson创建地图

背景

客户要求使用地图展示全省用电量,这里自然是想到了使用pyecharts来做地图,然后渲染数据;然而一切进展的很坎坷,在展示杭州地图时因为在2021年杭州重新调整了行政区域,pyecharts中也没有及时的更新相关数据,所以导致生成出来的杭州地图行政划分是错的。

解决方案

自己生成一份最新的geojson数据,然后手动注册地图;具体步骤如下:

1、在阿里云数据可视化平台 中选择要显示的区域,然后点击复制选中城市的json数据

阿里云数据可视化平台

2、在http://geojson.io/#map=9/30.2353/122.2587 网站中粘贴在步骤1中复制的数据,网站会自动转成geojson格式的数据

geojson数据格式化

3、在工程中新建json文件“hangzhou_geojson.json”,并将步骤2中转化好的geojson数据复制到“hangzhou_geojson.json”中保存

创建hangzhou_geojson.json

4、编写python代码创建我们自定义地图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os
import random

from pyecharts.charts import Map
from pyecharts import options as opts


def values(rge, start: int = 20, end: int = 150) -> list:
ar = [random.randint(start, end) for _ in range(rge)]
print(ar)
return ar


if __name__ == '__main__':

hangzhou = ["滨江区", "淳安县", "富阳区", "拱墅区", "建德市", "临安区", "临平区", "钱塘区", "上城区", "桐庐县", "西湖区", "萧山区", "临平区", "余杭区"]
print("正在导出{}地图...")
html_path = "./html/map_hangzhou.html"
if os.path.exists(html_path):
os.remove(html_path)
geojson_path = "./geojson/hangzhou_geojson.json"
with open(geojson_path, "r", encoding="utf-8") as file:
stream = file.read()
Map().add_js_funcs("echarts.registerMap('杭州市',{});", stream) \
.add("商家A", [list(z) for z in zip(hangzhou, values(len(hangzhou), 20, 150))], "杭州") \
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-{}地图".format("杭州")),
visualmap_opts=opts.VisualMapOpts()
) \
.render(html_path)
print("{}地图导出完成,文件路径:{}".format("杭州", html_path))

5、运行代码结果

运行结果

完整工程代码

工程代码在github 需要的可以自提

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信