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

ECharts地图数据压缩-ZigZag算法

ECharts地图数据压缩-ZigZag算法


开发过程中需要都echarts的地图数据进行压缩,经查找资料,发现echarts支持直接使用对GEOJson的coordinates进行 ZigZag压缩后的数据。
开始,尝试使用 mapshare-plus,但这个代码太老了,没有人维护,批量导出GEOJson格式文件的功能是坏的——可能大佬写着写着忘了。。。
在这里插入图片描述修改之后,发现导出地图文件载入ECharts后有地图图形丢失的情况。。。
本人不是专业前端,无奈只有将加密方法单独摘出,万幸测试通过,没有问题

function convert2Echarts(rawStr) {let json = JSON.parse(rawStr);// Meta tag 不能删除,ECharts会识别不到json.UTF8Encoding = true;let features = json.features;features.forEach(function (feature) {let encodeOffsets = feature.geometry.encodeOffsets = [];let coordinates = feature.geometry.coordinates;if (feature.geometry.type === 'Polygon') {coordinates.forEach(function (coordinate, idx) {coordinates[idx] = encodePolygon(coordinate, encodeOffsets[idx] = []);});} else if (feature.geometry.type === 'MultiPolygon') {coordinates.forEach(function (polygon, idx1) {encodeOffsets[idx1] = [];polygon.forEach(function (coordinate, idx2) {coordinates[idx1][idx2] = encodePolygon(coordinate, encodeOffsets[idx1][idx2] = []);});});}});return JSON.stringify(json);
}function encodePolygon(coordinate, encodeOffsets) {let result = '';let prevX = quantize(coordinate[0][0]);let prevY = quantize(coordinate[0][1]);// Store the origin offsetencodeOffsets[0] = prevX;encodeOffsets[1] = prevY;for (let i = 0; i < coordinate.length; i++) {let point = coordinate[i];result += encode(point[0], prevX);result += encode(point[1], prevY);prevX = quantize(point[0]);prevY = quantize(point[1]);}return result;
}function encode(val, prev) {// Quantizationval = quantize(val);// var tmp = val;// Deltaval = val - prev;// 估计是那时候浏览器的bug,我试了客户现场的浏览器,没发现这个问题,就删了,如果需要适配老机型的需要注意// if (((val << 1) ^ (val >> 15)) + 64 === 8232) {//WTF, 8232 will get syntax error in js code//	  val--;// }// ZigZagval = (val << 1) ^ (val >> 15);// add offset and get unicodereturn String.fromCharCode(val + 64);
}function quantize(val) {return Math.ceil(val * 1024);
}

压缩后的地图数据大概是这样:
在这里插入图片描述

最后记一个还有地图数据下载地址:阿里云GEOJson地图数据生成器

http://www.dtcms.com/a/511051.html

相关文章:

  • 垃圾分类抠像拍照系统-垃圾分类AR互动游戏-体感漫画拍照一体机
  • 2024年ESWA SCI1区TOP,大规模移动用户移动边缘计算中多无人机部署与任务调度的联合优化方法,深度解析+性能实测
  • 磁悬浮轴承非线性控制的挑战与难点剖析
  • 【开题答辩过程】以《自由绘画师管理系统的设计与实现》为例,不会开题答辩的可以进来看看
  • Spring AI与DeepSeek实战:打造企业级智能体
  • MFE: React + Angular 混合demo
  • CR0 控制位解释
  • 半成品网站周村网站制作哪家好
  • 自然语言处理NLP的数据预处理:从原始文本到模型输入(MindSpore版)
  • 清空显存占用
  • UNTER++模型简介
  • PHP Error 处理指南
  • Linux学习笔记(十)--进程替换与创建一个自己的简易版shell
  • go语言实现 基于 Session 和 Redis 实现短信验证码登录
  • 福建网站建设制作阿里巴巴旗下跨境电商平台有哪些
  • 潇洒郎:最佳完美——Windows防火墙与端口管理工具——支持ipv6、ipv4端口转发管理
  • Elastic MCP 服务器:向任何 AI agent 暴露 Agent Builder 工具
  • 小说网站建设详细流程游戏开发有前途吗
  • echarts tooltip数据太长导致显示不全
  • 用户选剧情,AI写故事:Trae Solo+GLM-4.6实现沉浸式小说创作体验
  • 【Linux】初始Linux和Linux下基本指令:ls pwd cd touch mkdir rmdir rm 指令
  • 《Linux系统编程之入门基础》【Linux基础 理论+命令】(下)
  • 农业网站建设招标书网站导航条内容
  • LLAMA Factory 微调Qwen2.0-VL-2B视觉大模型
  • 婚纱网站建设案例wordpress默认主题twenty
  • 网站访问者qq企业网站备案名称窍门
  • 个人网站源码下载有口皆碑的域名备案加急
  • 农用地转建设用地结果查询网站苏州品牌网站设计
  • 做外贸的网站怎么建立wordpress建网站主页
  • 建设部网站中天人建筑工程有限公司网站设计是怎么做的