当前位置: 首页 > news >正文

前端/python脚本/转换-使用天地图下载的geojson(echarts4+如果直接使用会导致坐标和其他信息不全)

解决echarts4+如果直接使用天地图下载的geojson会导致坐标和其他信息不全

解决方法是使用python脚本来补全其他信息:center,level,adcode等内容

前提是必须有一个之前使用的json文件(需要全一点的数据供echarts使用)

公司是因为可能用之前的旧版本的地图数据可能会导致侵权或者是没显示重要内容,天地图里面的地图绝对是很正确的(国内地图)
天地图下载网址:https://cloudcenter.tianditu.gov.cn/administrativeDivision/

python脚本:

import jsonimport jsondef load_json(file_path):with open(file_path, 'r', encoding='utf-8') as f:return json.load(f)def save_json(data, file_path):with open(file_path, 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)def merge_properties(geojson, json_data):# 建立name到feature的索引,json_data中的名称较短name_to_feature = {feature['properties']['name']: feature for feature in json_data['features']}for geo_feature in geojson['features']:geo_name = geo_feature['properties']['name']for name, json_feature in name_to_feature.items():if name in geo_name:# 更新geojson中的properties,排除geometry字段geo_properties = geo_feature['properties']json_properties = json_feature['properties']# 打印调试信息print(f"Updating properties for {geo_name}")# 仅更新properties字段for key, value in json_properties.items():geo_properties[key] = valuebreak
def main(geojson_path, json_path, output_path):geojson_data = load_json(geojson_path)json_data = load_json(json_path)merge_properties(geojson_data, json_data)save_json(geojson_data, output_path)# 输入文件路径
geojson_path = 'china5.geojson'
#json_path = 'China4.json'
json_path = 'chinabak.json'output_path = 'xczxMap.json'main(geojson_path, json_path, output_path)

实现方案

china5.geojson(下载的天地图)中的北京是
{"geometry": {"type": "MultiPolygon","coordinates": [地图中的坐标]},"type": "Feature","properties": { "name": "北京市", "gb": "156410000" }   }
China4.json(原来使用的echarts的地图)中的北京是	
{
"type": "FeatureCollection","features": [{"type": "Feature","properties": {"adcode": 110000,"name": "北京","center": [116.405285, 39.904989],"centroid": [116.41995, 40.18994],"childrenNum": 16,"level": "province","parent": { "adcode": 100000 },"subFeatureIndex": 0,"acroutes": [100000]},"geometry": {"type": "MultiPolygon","coordinates": []  
}
  • 读取China4.json和china5.geojson文件。
  • 遍历China4.json中的每个feature,并检查china5.geojson中是否存在对应的name。
  • 如果存在,则将China4.json中feature的properties补充到china5.geojson的对应feature中。
  • 保存修改后的china5.geojson文件。
  • 过滤掉coordinates中的信息,不替换天地图中的坐标
  • name会保存为之前的echarts的名称(缩写)
    python目录
    在这里插入图片描述

前端调用地图代码

地图调用
function loadChinaMap() {
$.getJSON(//china5.geojson'@/../static/plugins/chinese-map/static/map/updated_china5.geojson',function(geoJson) {//获取当前地图数据值api.接口().then((res) => {let data = res.data ? res.data.data : [];let unitName = res.data ? res.data.unitName : ''; //单位let date = res.data ? res.data.date : ''; //日期_this.maps.bigNum = 0;for (let i = 0; i < d.length; i++) {d[i].value > _this.maps.bigNum? (_this.maps.bigNum = d[i].value): ''; //获取最大值}console.log(d);mapdata = data ;//注册地图echarts.registerMap('china', geoJson);//绘制地图renderMap('china', data, unitName, date);});}
);
}
地图渲染
<div class="m1_echarts1" id="m1_echarts1"></div>设置地图
import echarts from '@/../static/plugins/echarts/echarts.js';function renderMap(map, data, unitName, date) {
let chart = echarts.init(document.getElementById('m1_echarts1'));option.visualMap.max = _this.maps.bigNum + 5;option.title.subtext = map;option.tooltip.formatter = date(这个是日期) + ': {c}' + unitName(这个是单位);option.series = [{name: map,type: 'map',mapType: map,roam: true,zoom: 2.7,center: [104.46, 35.92],nameMap: {china: '中国',},label: {normal: {show: true,textStyle: {// color:'#EFF7FF',color: '#000',fontSize: 13,},},emphasis: {show: true,textStyle: {color: '#640000',fontSize: 13,},},},itemStyle: {normal: {// borderColor: 'rgba(147, 235, 248, 1)',borderColor: '#9c978b',borderWidth: 1,areaColor: {type: 'radial',x: 0.2,y: 0.2,r: 0.9,colorStops: [{offset: 0,color: 'rgba(255, 255, 255, 0)', // 0% 处的颜色},{offset: 1,color: 'rgba(255, 255, 255, .1)', // 100% 处的颜色},],globalCoord: false, // 缺省为 false},},emphasis: {areaColor: '#ffdf33',borderWidth: 0,},},data: data,},];//初始化绘制全国地图配置
var option = {title: {show: false,text: '',subtext: '',left: 'center',textStyle: {color: '#121212',fontSize: 16,fontWeight: 'normal',fontFamily: 'Source Han Sans CN',},subtextStyle: {color: '#121212',fontSize: 13,fontWeight: 'normal',fontFamily: 'Source Han Sans CN',},},grid: {//设置canvas内部表格的内距x: 50,y: 50,x2: 50,y2: 0,borderWidth: 10,},tooltip: {show: true,trigger: 'item',formatter: '{b}: {c}家',},toolbox: {show: false,orient: 'vertical',left: 'right',top: 'top',iconStyle: {normal: {color: '#fff',},},feature: {mark: {// '辅助线开关'show: true,},saveAsImage: {//保存为图片。show: true, //是否显示该工具。type: 'png', //保存的图片格式。支持 'png' 和 'jpeg'。name: 'pic1', //保存的文件名称,默认使用 title.text 作为名称backgroundColor: '#ffffff', //保存的图片背景色,默认使用 backgroundColor,如果backgroundColor不存在的话会取白色title: '中国地图',pixelRatio: 1, //保存图片的分辨率比例,默认跟容器相同大小,如果需要保存更高分辨率的,可以设置为大于 1 的值,例如 2},// dataView: {readOnly: false},},},animationDuration: 1000,animationEasing: 'cubicOut',animationDurationUpdate: 1000,visualMap: {min: 0,max: 150,right: '0',bottom: '2px',text: ['高', '低'],calculable: true,inRange: {color: ['#ebdecb', '#8aa87d', '#7d97a8'],},show: true,textStyle: {color: ['#DCE5F5'],},},
};//渲染地图chart.setOption(option, true);//地图点击事件chart.off('click');chart.on('click', function(params) {});}

数据格式:
在这里插入图片描述
最终样式:
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询
  • 安全防御----防火墙综合实验2
  • 图论---匈牙利算法求二分图最大匹配的实现
  • pdf只要前几页,pdf中只要前几页怎么处理
  • pytorch-pytorch之LSTM
  • DockerCompose介绍,安装,使用
  • 【错题集-编程题】四个选项(DFS + 剪枝 + 哈希表)
  • 利用 AI 解放双手:把“贾维斯”带进现实 | 开源专题 No.64
  • 拥抱UniHttp,规范Http接口对接之旅
  • 基于JavaSpringBoot+Vue+uniapp微信小程序校园宿舍管理系统设计与实现
  • wxml与标准的html的异同
  • NLP任务:情感分析、看图说话
  • 防御第二次作业完成接口配置实验
  • 如何在PostgreSQL正确的 使用UUID 作为主键
  • 虚幻引擎ue5游戏运行界面白茫茫一片,怎么处理
  • 【RocksDB】TransactionDB源码分析
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CSS实用技巧干货
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Fundebug计费标准解释:事件数是如何定义的?
  • HTML5新特性总结
  • HTML-表单
  • iOS编译提示和导航提示
  • isset在php5.6-和php7.0+的一些差异
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • JS数组方法汇总
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • react-native 安卓真机环境搭建
  • React-Native - 收藏集 - 掘金
  • XForms - 更强大的Form
  • 计算机在识别图像时“看到”了什么?
  • 看域名解析域名安全对SEO的影响
  • 正则学习笔记
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #{}和${}的区别?
  • #数学建模# 线性规划问题的Matlab求解
  • (6)STL算法之转换
  • (Matlab)使用竞争神经网络实现数据聚类
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十六)一篇文章学会Java的常用API
  • (四) Graphivz 颜色选择
  • (未解决)macOS matplotlib 中文是方框
  • (转)平衡树
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .net core 依赖注入的基本用发