Echarts渲染行政区划,实现聚焦高亮交互

news2024/11/15 15:42:27

首先需要准备行政区划的JSON数据,可以在DataV获取省市区的JSON数据。

最终效果图
在这里插入图片描述

渲染地图

建立一个地图容器,注意要给宽高

<!-- 地图容器 -->
<div id="map"></div>

请求JSON数据,渲染地图

$(function() {
  var mapChart = null
  // 请求地图JSON
  function getGeo(level, adcode) {
    const url = `../map/${level}/${adcode}.json`;
    $.get(url, function (geoJson) {
      var seriesData = geoJson.features.map(function (item) {
        return {
          name: item.properties.name,
          value: item.properties.adcode,
          level: item.properties.level,
          childrenNum: item.properties?.childrenNum,
          parentCode: item.properties.parent.adcode,
        };
      });
    renderMap(seriesData, geoJson);
    });
  }
  getGeo("city", "52");
   // 渲染地图
  function renderMap(seriesData, geoJson) {
    echarts.registerMap("geo", { geoJSON: geoJson });
    mapChart = echarts.init(document.getElementById('map'))
    mapChart.setOption({
      // 阴影层,让地图有点立体效果
      geo: [
        {
          map: "geo",
          aspectScale: 0.75,
          zoom: 1.12,
          silent: true,
          itemStyle: {
            areaColor: '#072329',
            shadowColor: '#062025',
            shadowBlur: 0,
            shadowOffsetX: 2,
            shadowOffsetY: 6,
            borderColor: 'rgba(0, 0, 0, 0.7)',
            borderWidth: 0.5,
          },
        },
      ],
      series: [
        {
          type: "map",
          map: "geo",
          selectedMode: false,
          itemStyle: {
            borderWidth: 1,
            borderColor: "#417079",
            areaColor: {
              type: "linear",
              x: 0,
              y: 800,
              x2: 200,
              y2: 0,
              colorStops: [
                {
                  offset: 0.5,
                  color: "#37616b",
                },
                {
                  offset: 1,
                  color: "#0c2a31",
                },
              ],
              global: true,
            },
          },
          zoom: 1.1,
          label: {
            show: false,
            color: "#fff",
          },
          emphasis: {
            focus: true,
            label: {
              show: false,
            },
            itemStyle: {
              areaColor: "#4b8491",
            },
          },
          data: seriesData,
        }
      ]
    });
  }
})

在这里插入图片描述

绘制标注信息

标注信息是通过Echarts的散点绘制的,通过自定义图片实现

// 在请求JSON函数中,处理散点数据
function getGeo(level, adcode) {
  const url = `../map/${level}/${adcode}.json`;
  $.get(url, function (geoJson) {
    // 散点数据
    const coverData = geoJson.features.map((item) => {
      const { properties } = item;
      return {
        name: properties.name,
        value: properties.centroid,
        peopleNum: 10000,
        income: 50000
      };
    });

    var seriesData = geoJson.features.map(function (item) {
      return {
        name: item.properties.name,
        value: item.properties.adcode,
        level: item.properties.level,
        childrenNum: item.properties?.childrenNum,
        parentCode: item.properties.parent.adcode,
      };
    });
  renderMap(seriesData, geoJson, coverData);
  });
}

// 渲染地图中加入散点数据
function renderMap(seriesData, geoJson, coverData) {
 echarts.registerMap("geo", { geoJSON: geoJson });
 mapChart = echarts.init(document.getElementById('map'))
 mapChart.setOption({
   // 阴影层
   geo: [
     {
       map: "geo",
       aspectScale: 0.75,
       zoom: 1.12,
       silent: true,
       itemStyle: {
         areaColor: '#072329',
         shadowColor: '#062025',
         shadowBlur: 0,
         shadowOffsetX: 2,
         shadowOffsetY: 6,
         borderColor: 'rgba(0, 0, 0, 0.7)',
         borderWidth: 0.5,
       },
     },
   ],
   series: [
     {
       type: "map",
       map: "geo",
       selectedMode: false,
       itemStyle: {
         borderWidth: 1,
         borderColor: "#417079",
         areaColor: {
           type: "linear",
           x: 0,
           y: 800,
           x2: 200,
           y2: 0,
           colorStops: [
             {
               offset: 0.5,
               color: "#37616b",
             },
             {
               offset: 1,
               color: "#0c2a31",
             },
           ],
           global: true,
         },
       },
       zoom: 1.1,
       label: {
         show: false,
         color: "#fff",
       },
       emphasis: {
         focus: true,
         label: {
           show: false,
         },
         itemStyle: {
           areaColor: "#4b8491",
         },
       },
       data: seriesData,
     },
     {
       type: "scatter",
       coordinateSystem: "geo",
       symbol: function (value, params) {
         return "image://imgs/mark-line.png"; // 自定义图片
       },
       symbolSize: [38, 56],
       symbolRotate: -4,
       label: {
         show: true,
         offset: [-2, 0],
         position: "top",
         backgroundColor: "#204047",
         padding: [4, 8],
         borderRadius: 4,
         formatter: (param) => {
           return [
             "{name|" + param.name + "}",
             "{line|}",
             "{text|村民人数:"+ param.data.peopleNum +"人}",
             "{text|年均收入:"+ param.data.income +"元}",
           ].join("\n");
         },
         // 富文本给label添加样式
         rich: {
           name: {
             color: "#18f6df",
             padding: [0, 0, 4, 0],
           },
           line: {
             width: "100%",
             height: 0,
             borderWidth: 1,
             borderColor: "#18f6df",
           },
           text: {
             color: "#fff",
             padding: [6, 0, 0, 0],
           },
         },
       },
       emphasis: {
         focus: true,
         blurScope: "global",
       },
       z: 3,
       data: coverData,
     },
   ],
 });

在这里插入图片描述

地图块和标注高亮

只设置focus时发现,只有地图块会有聚焦效果,这里需要通过echartsdispatchAction方法来实现

mapChart.on("mouseover", function (param) {
  mapChart.dispatchAction({
    type: "highlight",
    name: param.name,
  });
});
mapChart.on("mouseout", function (param) {
  mapChart.dispatchAction({
    type: "downplay",
  });
});

在这里插入图片描述
这里感觉立体效果还是差点意思,我给地图设置了一点旋转

#map {
  transform: rotateX(32deg) rotateY(-6deg) scale(1.125);
}

在这里插入图片描述

完整示例代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>map</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    body {
      background-color: #000;
      overflow: hidden;
    }
    html, body, #map {
      width: 100%;
      height: 100%;
    }
    #map {
      transform: rotateX(32deg) rotateY(-6deg) scale(1.125);
    }
  </style>
</head>
<body>
  <div id="map"></div>
  <script src="./js/jqueyr.min.js"></script>
  <script src="./js/echarts.min.js"></script>
  <script>
    $(function() {
      var mapChart = null
      function getGeo(level, adcode) {
        const url = `../map/${level}/${adcode}.json`;
        $.get(url, function (geoJson) {
          // 散点数据
          const coverData = geoJson.features.map((item) => {
            const { properties } = item;
            return {
              name: properties.name,
              value: properties.centroid,
              // 显示数据
              peopleNum: 10000,
              income: 50000
            };
          });

          var seriesData = geoJson.features.map(function (item) {
            return {
              name: item.properties.name,
              value: item.properties.adcode,
              level: item.properties.level,
              childrenNum: item.properties?.childrenNum,
              parentCode: item.properties.parent.adcode,
            };
          });
        renderMap(seriesData, geoJson, coverData);
        });
      }
      getGeo("city", "52");
       // 渲染地图
      function renderMap(seriesData, geoJson, coverData) {
        echarts.registerMap("geo", { geoJSON: geoJson });
        mapChart = echarts.init(document.getElementById('map'))
        mapChart.setOption({
          // 阴影层
          geo: [
            {
              map: "geo",
              aspectScale: 0.75,
              zoom: 1.12,
              silent: true,
              itemStyle: {
                areaColor: '#072329',
                shadowColor: '#062025',
                shadowBlur: 0,
                shadowOffsetX: 2,
                shadowOffsetY: 6,
                borderColor: 'rgba(0, 0, 0, 0.7)',
                borderWidth: 0.5,
              },
            },
          ],
          series: [
            {
              type: "map",
              map: "geo",
              selectedMode: false,
              itemStyle: {
                borderWidth: 1,
                borderColor: "#417079",
                areaColor: {
                  type: "linear",
                  x: 0,
                  y: 800,
                  x2: 200,
                  y2: 0,
                  colorStops: [
                    {
                      offset: 0.5,
                      color: "#37616b",
                    },
                    {
                      offset: 1,
                      color: "#0c2a31",
                    },
                  ],
                  global: true,
                },
              },
              zoom: 1.1,
              label: {
                show: false,
                color: "#fff",
              },
              emphasis: {
                focus: true,
                label: {
                  show: false,
                },
                itemStyle: {
                  areaColor: "#4b8491",
                },
              },
              data: seriesData,
            },
            {
              type: "scatter",
              coordinateSystem: "geo",
              symbol: function (value, params) {
                return "image://imgs/mark-line.png";
              },
              symbolSize: [38, 56],
              symbolRotate: -4,
              label: {
                show: true,
                offset: [-2, 0],
                position: "top",
                backgroundColor: "#204047",
                padding: [4, 8],
                borderRadius: 4,
                formatter: (param) => {
                  console.log('param: ', param);
                  return [
                    "{name|" + param.name + "}",
                    "{line|}",
                    "{text|村民人数:"+ param.data.peopleNum +"人}",
                    "{text|年均收入:"+ param.data.income +"元}",
                  ].join("\n");
                },
                rich: {
                  name: {
                    color: "#18f6df",
                    padding: [0, 0, 4, 0],
                  },
                  line: {
                    width: "100%",
                    height: 0,
                    borderWidth: 1,
                    borderColor: "#18f6df",
                  },
                  text: {
                    color: "#fff",
                    padding: [6, 0, 0, 0],
                  },
                },
              },
              emphasis: {
                focus: true,
                blurScope: "global",
              },
              z: 3,
              data: coverData,
            },
          ],
        });
        // 联动高亮
        mapChart.on("mouseover", function (param) {
          mapChart.dispatchAction({
            type: "highlight",
            name: param.name,
          });
        });
        mapChart.on("mouseout", function (param) {
          mapChart.dispatchAction({
            type: "downplay",
          });
        });
      }
    })
  </script>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 20版本将动态ip修改为静态ip时,ping 不通网络

问题描述&#xff1a; 在对Ubuntu 20版本将动态ip修改为静态ip时&#xff0c;ping www.baidu.com ping不通了 火狐浏览器没有了网路&#xff0c;下载不了东西 一直卡在这里不动 问题出在哪里还是配置ip dns 网关的问题 如果我们在当初安装ubuntu 时&#xff0c;将网络设置成…

24年专转本想要成功我们一个怎样做

23年转本报名人数创造高峰&#xff0c; 24年转本的同学们 如何脱颖而出&#xff0c;成功转本呢&#xff1f;一、明确转本目的 转本是一场重要的考试&#xff0c;有人把转本比喻为第二次高考。面对这唯一的进入本科院校学习的机会&#xff0c;考还是不考&#xff1f; 很多同…

小六壬学习笔记

小六壬学习笔记 简介前置知识:十二地支和十二时辰适用范围起课&#xff1a;月令日时卦象 疑问&#xff1a;遇到闰月怎么办&#xff1f;禁忌数字起课法手机计算器取余数 简单解卦 简介 马前课&#xff0c;又名&#xff1a;小六壬。 小六壬历史渊源&#xff1a;https://m.sohu.c…

RXJava2的基本概念与常见操作符使用实例解析

RXJava2是什么&#xff1f;可以简单介绍一下其特点和应用场景吗&#xff1f; RXJava2是基于观察者模式和链式编程思想的异步编程库&#xff0c;它可以用来优雅地处理异步操作&#xff0c;比如网络请求、数据库查询、文件I/O等操作&#xff0c;减少了回调嵌套&#xff0c;提高了…

【LeetCode】剑指 Offer 68. 二叉树中两个节点的最低公共祖先 p326 -- Java Version

1. 题目介绍&#xff08;68. 二叉树中两个节点的最低公共祖先&#xff09; 面试题68&#xff1a;二叉树中两个节点的最低公共祖先&#xff0c; 一共分为两小题&#xff1a; 题目一&#xff1a;二叉搜索树的最近公共祖先题目二&#xff1a;二叉树的最近公共祖先 2. 题目1&#x…

目标检测 pytorch复现SSD目标检测项目

目标检测 pytorch复现SSD目标检测项目 0、简介1、模型整体框架&#xff08;以VGG16为特征提取网络&#xff09;3、默认框&#xff08;default box&#xff09;的生成--相当于Faster-RCNN中生成的anchor4、预测层的实现原理&#xff1a;5、正负样本的选取6、损失的计算原理6、以…

SpringCloud-9、Sleuth+Zipkin

先吐槽下csdn&#xff0c;编辑器不知道怎么回事&#xff0c;快捷键一下就没有&#xff0c;现在用起来糟心 --- - 这些都用不了&#xff0c;求帮助。 基本介绍 Sleuth:分布式服务跟踪组件 /ZipKin Sleuth/ZipKin-搭建链路监控实例 官网&#xff1a;GitHub - spring-cloud/s…

【移动端网页布局】移动端网页布局基础概念 ⑦ ( 在 PhotoShop 中使用 Cutterman 切二倍图 | 使用二倍图作为背景图像 )

文章目录 一、在 PhotoShop 中使用 Cutterman 切二倍图二、使用二倍图作为背景图像 一、在 PhotoShop 中使用 Cutterman 切二倍图 参考 【CSS】PhotoShop 切图 ③ ( PhotoShop 切图插件 - Cutterman | 下载、安装、启动、注册、登录 Cutterman - 切图神奇 插件 | 使用插件进行切…

selenium应用之抓取b站黑马视频目录建立学习计划Excel

需求故事&#xff1a; 最近时间一下子多了起来&#xff0c;用来学习Java是最合适不过了&#xff0c;但是去b站看视频难免会没有自制力&#xff0c;于是决定用selenium来抓取b站黑马Java视频的目录创建一个学习计划的Excel&#xff0c;便于进行学习进度的管理。 注&#xff1a;纯…

【无模型自适应】基于紧格式动态线性化的无模型自适应控制matlab代码

例题来源&#xff1a;侯忠生教授的《无模型自适应控制&#xff1a;理论与应用》&#xff08;2013年科学出版社&#xff09;。 对应书本 4.2 单输入单输出系统(SISO)紧格式动态线性化(CFDL)的无模型自适应控制(MFAC) 例题4.1 题目要求 matlab代码 clc; clear all;%% 期望轨迹…

【opencv】图像数字化——矩阵的运算( 5 乘法运算)

5 乘法运算 5.1使用“*”运算符 对于Mat对象的乘法&#xff0c;两个Mat只能同时是float或者double类型&#xff0c;对于其它数据类型的矩阵乘法会报错src1的列数等于src2的行数mn * npmp #include <opencv2/core/core.hpp> #include<iostream> using namesp…

Android程序员向音视频进阶,有前景吗

随着移动互联网的普及和发展&#xff0c;Android开发成为了很多人的就业选择&#xff0c;希望在这个行业能获得自己的一席之地。然而&#xff0c;随着时间的推移&#xff0c;越来越多的人进入到了Android开发行业&#xff0c;就导致目前Android开发的工作越来越难找&#xff0c…

【博学谷学习记录】超强总结,用心分享 | 架构师 MinIO学习总结

文章目录 MinIO对象存储的概念计算机数据存储系统-架构模式对象存储的优势常见的对象存储系统/服务&#xff08;Object Storage Service&#xff0c;OSS&#xff09; MinIO简介特点高级特性小结 MinIO部署基于 linux Binary 部署 MinIO ServerMinIO数据组织结构MinIO Client**基…

【论文精读】Emergent Abilities of Large Language Models

1. Emergence 涌现&#xff08;emergence&#xff09;或称创发、突现、呈展、演生&#xff0c;是一种现象&#xff0c;为许多小实体相互作用后产生了大实体&#xff0c;而这个大实体展现了组成它的小实体所不具有的特性。 水分子聚集后组成了雪花是一个物理上的创发现象 扩大&…

C++ 类和对象(上)

类 面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a; 之前在数据结构初阶中&#xff0c;用C语言方式实现的栈&#xff0c;…

springboot入门和yaml数据格式和读取yaml型数据和多环境配置和命令行启动参数设置

springboot入门 搞掉了手动的spring&#xff0c;mybatis&#xff0c;springmvc配置类&#xff0c;只需要创建一个控制类即可 控制类&#xff1a; package com.itjh.controller;import org.springframework.web.bind.annotation.*;RestController RequestMapping("/book…

KDYZ-YM压敏电阻测试仪

一、概述 晶闸管的伏安特性是晶闸管的基本特性&#xff0c;这项特性的好坏&#xff0c;直接影响到器件在整机上的正常使用。因此&#xff0c;检测晶闸管的伏安特性在晶闸管器件的生产、经销及使用过程中都是十分重要的。 该测试仪的测试方法符合国标JB/T7624-94《整流二极管测试…

AI:人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略

AI&#xff1a;人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略 导读&#xff1a;由于ChatGPT、GPT-4近期火爆整个互联网&#xff0c;掀起了人工智能相关的二次开发应用的热潮&#xff0c…

MySQL 的 Replace into 与 Insert into on duplicate key update 真正的不同之处

相同点&#xff1a; &#xff08;1&#xff09;没有key的时候&#xff0c;replace与insert .. on deplicate udpate相同。 &#xff08;2&#xff09;有key的时候&#xff0c;都保留主键值&#xff0c;并且auto_increment自动1。 不同点 有key的时候&#xff0c;replace是dele…

Python数据结构与算法-RAS算法(p96)

一、RSA加密算法简介 1、加密算法概念 传统密码: 加密算法是秘密的 现代密码系统:加密算法是公开的&#xff0c;密钥是秘密的&#xff1b;&#xff08;密钥可能是随机生成的&#xff0c;与他人不一致&#xff09; 对称加密—加密和解密用的同一个密钥 非对称加密—加密和解密用…