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

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

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

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

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

python脚本:

import json

import json


def 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] = value

                break
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) {
	});

}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/791444.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对controller层进行深入学习

目录 1. controller层是干什么的&#xff1f;1.1 controller原理图1.2 controller层为什么要存在&#xff1f;1.2.1 分离关注点1.2.2 响应HTTP请求1.2.3 数据处理与转换1.2.4 错误处理与状态管理1.2.5 流程控制1.2.6 依赖注入与测试 1.3 controller层的优点1.3.1 多端支持1.3.2…

Github 2024-07-11 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Solidity项目1Python项目1frp: 一个开源的快速反向代理 创建周期:2946 天开发语言:Go协议类型:Apache License 2.0Star数量:75872 …

【链表】- 环形链表 II

1. 对应力扣题目连接 环形链表 II 2. 实现思路 a. 链表图示&#xff1a; b. 检测链表中是否存在环&#xff0c;即&#xff1a;会相交 思路&#xff1a; 使用 Floyd 的龟兔赛跑算法&#xff08;Floyd’s Tortoise and Hare algorithm&#xff09;&#xff0c;即快慢指针法&…

ChatGPT提问获取高质量答案的艺术PDF下载书籍推荐分享

ChatGPT高质量prompt技巧分享pdf&#xff0c; ChatGPT提问获取高质量答案的艺术pdf。本书是一本全面的指南&#xff0c;介绍了各种 Prompt 技术的理解和利用&#xff0c;用于从 ChatGPTmiki sharing中生成高质量的答案。我们将探讨如何使用不同的 Prompt 工程技术来实现不同的目…

AI网络爬虫021:下载m3u8视频文件

文章目录 一、介绍二、输入内容三、输出内容一、介绍 要下载m3u8视频文件,首先得找到m3u8地址,按下F12键,看网络-fetch/xhr,然后找网址中包括m3u8的地址,再预览或者看下相应 https://1304688195.vod2.myqcloud.com/9d058fb7vodtranscq1304688195/1194c6da1253642699220090…

CDGA|数据治理:如何建立健全数据伦理和隐私保护机制?

随着数字化时代的到来&#xff0c;数据已成为推动社会进步和企业发展的重要资源。然而&#xff0c;随之而来的数据伦理和隐私保护问题也日益凸显。建立健全的数据治理体系&#xff0c;特别是强化数据伦理和隐私保护机制&#xff0c;已成为当务之急。 数据治理的重要性 数据治理…

完美解决AttributeError: ‘list‘ object has no attribute ‘shape‘的正确解决方法,亲测有效!!!

完美解决AttributeError: ‘list‘ object has no attribute ‘shape‘的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决AttributeError: ‘list‘ object has no attribute ‘shape‘的正确解决方法&#xff0c;亲测有效&#xff0…

详细分析Java中的@EventListener事件监听器(附Demo)

目录 前言1. 基本知识2. Demo 前言 Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;Spring框架从入门到学精&#xff08;全&#xff09; 1. 基本知识 用于标注一个方法为事件监听器 事件监听器方…

不坑盒子是干啥的?

不坑盒子是一款专为提升办公效率设计的插件&#xff0c;它兼容Microsoft Office和WPS Office&#xff0c;支持Word、Excel、PPT等常用办公软件。这款插件自2024年初开始受到关注&#xff0c;其主要目的是为了让用户在日常办公中能够更加便捷地完成任务&#xff0c;从而提高工作…

【UNI-APP】阿里NLS一句话听写typescript模块

阿里提供的demo代码都是javascript&#xff0c;自己捏个轮子。参考着自己写了一个阿里巴巴一句话听写Nls的typescript模块。VUE3的组合式API形式 startClient&#xff1a;开始听写&#xff0c;注意下一步要尽快开启识别和传数据&#xff0c;否则6秒后会关闭 startRecognition…

MapReduce底层原理详解:大案例解析(第32天)

系列文章目录 一、MapReduce概述 二、MapReduce工作机制 三、Map&#xff0c;Shuffle&#xff0c;reduce阶段详解 四、大案例解析 文章目录 系列文章目录前言一、MapReduce概述二、MapReduce工作机制1. 角色与组件2. 作业提交与执行流程1. 作业提交&#xff1a;2. Map阶段&…

六、数据可视化—Echars(爬虫及数据可视化)

六、数据可视化—Echars&#xff08;爬虫及数据可视化&#xff09; Echarts应用 Echarts Echarts官网&#xff0c;很多图表等都是我们可以 https://echarts.apache.org/zh/index.html 是百度自己做的图表&#xff0c;后来用的人越来越多&#xff0c;捐给了orange组织&#xf…

Django项目创建的准备工作【3】

【 一 】建立数据库 创建库: 命令&#xff08;指定编码&#xff09; 创建用户: 并授权 用户: luffy: 密码xxxxxx , 只授予luffy库权限 使用mysql创建lufy数据库 root账号和密码--->万一泄露---》整个数据库就不安全了。 创建个用户&#xff0c;这个用户只对当前项目 库 有…

不同材质酒店智能开关的功能特点详解

在当今的酒店行业中&#xff0c;智能开关已成为提升客户体验和管理效率的重要设备。而不同材质的智能开关&#xff0c;不仅在外观上各具特色&#xff0c;其功能特点也有所差异。 玻璃材质智能开关&#xff1a; 玻璃材质的智能开关给人一种时尚、简约且高端的感觉。其表面光滑&a…

前端面试39(关于git)

针对前端开发者的Git面试题可以覆盖Git的基础概念、常用命令、工作流程、团队协作、以及解决冲突等方面。以下是一些具体的Git面试 Git基础知识 什么是Git&#xff1f; Git是一个分布式版本控制系统&#xff0c;用于跟踪计算机文件的更改&#xff0c;并协调多个人共同在一个项…

tensorflow张量生成以及常用函数

张量tensor&#xff1a;多维数组&#xff08;列表&#xff09; 阶&#xff1a;张量的维数 维数 阶 名字 例子 0-D 0 标量 scalar s 1&#xff0c; 2&#xff0c; 3 1-D 1 向量 vector…

JS进阶-原型

学习目标&#xff1a; 掌握原型 学习内容&#xff1a; 原型constructor属性对象原型原型继承原型链综合案例 原型&#xff1a; 构造函数通过原型分配的函数是所有对象所共享的。 JavaScript规定&#xff0c;每一个构造函数都有一个prototype属性&#xff0c;指向另一个对象&…

vscode c++可以找到声明却无法自动补全

这个问题折磨了我将近一个月&#xff0c;今天终于被解决了&#xff0c;特此记录 情景再现 事情的起因是我在学习华为的Ascend C算子&#xff0c;需要编写C代码。关于怎么下载库文件怎么编译之类的不是本文的重点&#xff0c;重点是自动补全。 我已经拿到库文件了&#xff0c…

力扣题解(设计跳表)

1206.设计跳表 已解答 不使用任何库函数&#xff0c;设计一个 跳表 。 跳表 是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树&#xff0c;其功能与性能相当&#xff0c;并且跳表的代码长度相较下更短&#xff0c;其设计思想与链表相似。 …