Pyechats json(geojson)格式地图绘制

需求描述: 在既有的区县、省市中,我们可能需要看两个省份、区县合并的地图,如大区:东北大区,东南大区之类的地图,目前Pyecharts不提供相关的数据地图,需我们自己合并。

一、环境、数据准备

  1. 电脑安装了python环境及pyecharts
  2. 地图数据
    关于地图数据,可用网上自己找到的地图数据json格式的,或者从[【阿里】]这个网站中下载获得(http://datav.aliyun.com/tools/atlas/#&lat=31.769817845138945&lng=104.29901249999999&zoom=4)

# 开始工作

python读取json格式文件,进行数据合并
2.1. 打开json文件

格式化的json数据如图,加入我想重庆、云南、四川三个省市合并,叫川渝地区,那么我们就需要新增一个节点的字段area(对三个省市都新增,好合并)

2.2 json数据新增字段

import pandas as pd
from pyecharts.globals import GeoType
from pyecharts.charts import Geo, Map
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
import json
import numpy as np
import os
# json数据文件目录文件夹
file_path = r'D:\Document\WeChat Files\wxid_uaapmxoytd8o22\FileStorage\File\2022-12\高德-工贸区县数据\全国地图_JSON'
os.chdir(file_path)
# json地图数据的构建
target_data = """{"type": "FeatureCollection","features": []}"""
target_data = json.loads(target_data)
# 将云川渝的数据节点传入target_data,并加入area节点
list_region = ['四川省.json', '重庆市.json', '云南省.json']
name_list = []
for lr in list_region:with open(lr, 'r', encoding='utf-8') as f:temp = json.load(f)temp = temp['features']for tp in temp:name = tp['properties']['name']# 将area加入tp节点并传入target_datatp['properties']['area'] = '云川渝'target_data['features'].append(tp)name_list.append((name, np.random.randint(100, 5000)))with open('G:\Download/test.json','w',encoding='utf-8') as f:f.write(json.dumps(target_data, ensure_ascii=False))

如图:

2.3 开始绘制地图-加载外部地图map:


region_name = 'region_name'
c = (Map()# 注册地图,test_01是注册的地图信息,尽量不要与pyecharts中的地图有任何重名.add_js_funcs("echarts.registerMap('test_O1', {});".format(target_data)).add(region_name, name_list, "test_O1").set_global_opts(title_opts=opts.TitleOpts(title=region_name), visualmap_opts=opts.VisualMapOpts(max_=5000)).render("G:\Download/输出.html")

输出如图:

用Geo输出如图:

g = Geo(init_opts=opts.InitOpts(width='1000px',height='600px',bg_color='#fff'
))
# 注册地图,记住一定不要重名,否则会导致加载出现问题
g.add_js_funcs("echarts.registerMap('test_01', {});".format(target_data))
# 加载注册的地图,并调制背景色
g.add_schema(maptype='test_01', itemstyle_opts=opts.ItemStyleOpts(color="#323c48",border_color="white"))
g.add(region_name, name_list, type_=GeoType.EFFECT_SCATTER, symbol_size=6)
g.set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter=JsCode(  # formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数"""function(params) {if ('value' in params.data) {return '';}}"""
), position='bottom', font_size=8))
g.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=False, min_=1, max_=5000),# min_ 颜色图最低标签# max_ 颜色图最高标签title_opts=opts.TitleOpts(title=region_name),
)
g.render("G:\Download/输出.html")

输出如图

# 去除市区边界线

3.1 任务完成了吗?好像省市合并了,但是实际上,省市的边界线没有去除,那么怎么去除边界线呢?
这里推荐用mapshaper https://mapshaper.org/ 进行地图编辑

输入

dissolve 'area' -o result.json

下载保存合并后的json文件,并将area改成name进行Pyecharts展示
Map展示

file_load_path = 'G:\Download/result.json'
target_data=''
with open(file_load_path, 'r', encoding='utf-8') as f:target_data = json.load(f)flag = target_data['features']name_list = []for fl in flag:name = fl['properties']['name']# name=name.split('市')[0]name_list.append((name, np.random.randint(100, 5000)))
region_name = '云川渝'
c = (Map()# 注册地图.add_js_funcs("echarts.registerMap('test_01', {});".format(target_data)).add(region_name, name_list, "test_01").set_global_opts(title_opts=opts.TitleOpts(title=region_name), visualmap_opts=opts.VisualMapOpts(max_=5000)).render("G:\Download/输出.html")
)


全部代码如下

import pandas as pd
from pyecharts.globals import GeoType
from pyecharts.charts import Geo, Map
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
import json
import numpy as np
import os
# json数据文件目录文件夹
file_path = r'D:\Document\WeChat Files\wxid_uaapmxoytd8o22\FileStorage\File\2022-12\高德-工贸区县数据\全国地图_JSON'
os.chdir(file_path)
# json地图数据的构建
target_data = """{"type": "FeatureCollection","features": []}"""
target_data = json.loads(target_data)
# 将云川渝的数据节点传入target_data,并加入area节点
list_region = ['四川省.json', '重庆市.json', '云南省.json']
name_list = []
for lr in list_region:with open(lr, 'r', encoding='utf-8') as f:temp = json.load(f)temp = temp['features']for tp in temp:name = tp['properties']['name']# 将area加入tp节点并传入target_datatp['properties']['area'] = '云川渝'target_data['features'].append(tp)name_list.append((name, np.random.randint(100, 5000)))
file_to_path='G:\Download/test.json'
with open(file_to_path, 'w', encoding='utf-8') as f:f.write(json.dumps(target_data, ensure_ascii=False))file_load_path = 'G:\Download/result.json'
target_data=''
with open(file_load_path, 'r', encoding='utf-8') as f:target_data = json.load(f)flag = target_data['features']name_list = []for fl in flag:name = fl['properties']['name']# name=name.split('市')[0]name_list.append((name, np.random.randint(100, 5000)))
region_name = '云川渝'
c = (Map()# 注册地图.add_js_funcs("echarts.registerMap('test_01', {});".format(target_data)).add(region_name, name_list, "test_01").set_global_opts(title_opts=opts.TitleOpts(title=region_name), visualmap_opts=opts.VisualMapOpts(max_=5000)).render("G:\Download/输出.html")
)c = (Map()# 注册地图.add_js_funcs("echarts.registerMap('test_01', {});".format(target_data)).add(region_name,[region_name], "test_01").set_global_opts(title_opts=opts.TitleOpts(title=region_name), visualmap_opts=opts.VisualMapOpts(max_=5000)).render("G:\Download/输出.html")
)
# c.render_notebook()g = Geo(init_opts=opts.InitOpts(width='1000px',height='600px',bg_color='#fff'
))
# 注册地图,记住一定不要重名,否则会导致加载出现问题
g.add_js_funcs("echarts.registerMap('test_01', {});".format(target_data))
# 加载注册的地图,并调制背景色
g.add_schema(maptype='test_01', itemstyle_opts=opts.ItemStyleOpts(color="#323c48",border_color="white"))
g.add(region_name, name_list, type_=GeoType.EFFECT_SCATTER, symbol_size=6)
g.set_series_opts(label_opts=opts.LabelOpts(is_show=True, formatter=JsCode(  # formatter为标签内容格式器{a}:系列名;{b}:数据名;{c}:数值数组也可以是回调函数"""function(params) {if ('value' in params.data) {return '';}}"""
), position='bottom', font_size=8))
g.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=False, min_=1, max_=5000),# min_ 颜色图最低标签# max_ 颜色图最高标签title_opts=opts.TitleOpts(title=region_name),
)
g.render("G:\Download/输出.html")

参考文档:

  • https://blog.csdn.net/qq_19816325/article/details/108520451
  • https://blog.csdn.net/weixin_41955254/article/details/118896870

Pyecharts 加载外部地图数据绘图相关推荐

  1. echarts asp mysql 源码_如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)...

    ECharts地图主要用于地理区域数据的可视化,展示不同区域的数据分布信息.ECharts官网提供了中国地图.世界地图等地图数据下载,通过js引入或异步加载json文件的形式调用地图. 本文将结合实例 ...

  2. 【THREE.JS学习(3)】使用THREEJS加载GeoJSON地图数据

    本文接着系列文章(2)进行介绍,以VUE2为开发框架,该文涉及代码存放在HelloWorld.vue中. 相较于上一篇文章对div命名class等,该文简洁许多. <template> & ...

  3. autocad 动态加载ARCGISONLINE地图数据

    我在公司以前开发过一个使用CAD加载GIS数据,并实现编辑以及渲染等功能的系统,应用于规委.原系统中数据 的刷新都是手动进行的.今天脑子一转,试试自动刷新数据的效率. 1. 要想自动刷新数据,首先要解 ...

  4. FGMap学习之--加载百度地图

    今天我们用FGMap来加载百度地图数据. 从目前国内的地图服务商提供的地图来看,地图瓦片切图规则只少分为三种.其中Google Map.Bing地图.MapABC.QQ地图是一类,而百度地图.搜狗地图 ...

  5. mui可否使用php网页,使用MUI框架如何加载外部网页或服务器数据

    下面我就为大家分享一篇浅谈MUI框架中加载外部网页或服务器数据的方法,具有很好的参考价值,希望对大家有所帮助. 我们很多同学在实施使用MUI框架的时候,在打开新的页面的时候常使用的方式是:mui.op ...

  6. 在奥维中如何加载星图地球数据云的地图?

    图源多.数据时效性高.数据精度高等方面的优势,使得星图地球数据云已经成为了国产在线地图的优秀选手. 对于从事数字地球相关开发的小伙伴们来说,如何成功调用在线地图才是真正关心的问题.本篇就简单讲解下奥维 ...

  7. flash cs4 java运行时_加载外部数据时Flash CS4 IDE内部缓存

    它们存储在您的系统's 1166699 cache (i.e. I.E.'缓存中 . 我有Firefox作为我的默认浏览器,但它们仍然存储在" AppData\Local\Microsoft ...

  8. 【百度地图】——利用三级联动加载百度地图

    [百度地图]--利用三级联动加载百度地图 HTML+CSS代码如下: <!DOCTYPE html> <html lang="en"><head> ...

  9. angular7中使用iframe来加载外部页面

    在angular7中使用echarts的线性地图的时候,发现出来缩成了一团,暂未找到解决方案.但是在普通的html中直接引入并使用是没有问题的.因此,转换了思路,使用iframe来加载外部的html, ...

最新文章

  1. xgboost进行分类具体实现
  2. 心形尺寸比例图解_0元图解建筑史-05 | 中国木构建筑的特征与详部演变(2)——斗栱、厅堂殿堂...
  3. Pixhawk之姿态解算篇(2)_mahony算法分析
  4. flex vue 垂直居中居上_推荐几种在移动端实现垂直居中的方法
  5. (转)《崩坏3》画面效果为何惊艳?看米哈游怎么做卡通渲染的你就明白了
  6. Unity 编辑器知识(—)如何绘制色块
  7. 空间权重矩阵构建(Stata代码)
  8. comsol 4.4 matlab,如何使用COMSOL with MATLAB的清单
  9. the JDBC Driver has been forcibly unregistered;tomcat总是memory leak问题 ,为了防止内存泄漏,jdbc驱动程序已强制取消注册
  10. [MATLAB App Designer] 在表(UITable)中设置下拉菜单
  11. 算法入门:日期计算(附蓝桥杯)
  12. Unity随机创造敌人
  13. 清华领军计划计算机试题,清华大学2017年自主招生领军计划笔试真题
  14. python urlencode函数 adb打开,Python urlencode和unquote函数使用实例解析
  15. 《软件测试---你必须掌握的100个问题》
  16. mysql 发生系统错误1067的解决方法
  17. STC89C52单片机实验 DAY1 LED模块
  18. TCP/IP相关的那些事儿
  19. 服务器设置header返回信息,http服务器header返回时间问题
  20. 单片机的基本构成及工作原理

热门文章

  1. 基于Java的出租车管理系统设计与实现
  2. 分辨率和清晰度的区别关系
  3. 视频转码 命令行 记录两则
  4. 2018年TalentQ的语言Verbal测试渣打、法国兴业、蔚来汽车网上测评(英文版)
  5. 51分布式电商项目 - Linux下安装ActiveMQ
  6. 揭开所谓种子搜索神器p2psearcher的面纱
  7. 关于jiaminghi 中Datav的数字翻牌器字体失效的解决方案
  8. 三国演义:责任链模式
  9. 【L2-036 网红点打卡攻略】
  10. 读书笔记写法--怎么做读书笔记