成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Echarts 地圖如何點擊定位到自己的家鄉城市區縣

開發 架構
最近實現了通過Echarts地圖,定位到自己的家鄉,覺得挺有趣的,所以分享給大家,希望大家也可以實現一遍,在Echarts上定位到自己的家鄉看一看!

最近實現了通過Echarts地圖,定位到自己的家鄉,覺得挺有趣的,所以分享給大家,希望大家也可以實現一遍,在Echarts上定位到自己的家鄉看一看~

圖片圖片

地圖的繪制

地圖數據

地圖的數據我們可以通過網上提供的 API 來進行獲取

API URL:https://geo.datav.aliyun.com/areas_v3/bound/{mapCode}.json

圖片圖片

繪制地圖

首先需要一個 DOM 節點來進行 Echarts 的繪制。

圖片圖片

接著需要初始化 Echarts 實例,并進行配置,完成渲染。

圖片圖片

這樣就能把地圖渲染出來了。

圖片圖片

往下和往上定位

實現完整個地圖的渲染,我們還需要實現:

  • 點擊某個地區,進行往下定位
  • 點擊按鈕,進行往上定位

所以我們首先需要增加一個按鈕。

圖片圖片

圖片

接著我們需要:

1、監聽 Echarts 的點擊事件。

2、獲取點擊的是哪個地區,進行數據獲取并渲染。

3、維護一個地區數組,記錄點擊的鏈路。

圖片圖片

最終可以實現效果

圖片圖片

完整源碼

<template>
  <Button @click="back" type="primary" :loading="loading">返回上一級</Button>
  <Spin :spinning="loading">
    <div class="container" ref="echartsRef"></div>
  </Spin>
</template>

<script setup lang="ts">
import * as echarts from 'echarts';
import { ref, onMounted } from 'vue';
import { Button, Spin } from 'ant-design-vue';

// 最頂層地圖的代號
const ROOR_MAP_CODE = '100000_full';
const echartsRef = ref<HTMLDivElement | null>(null);
const echartInstance = ref<echarts.ECharts | null>(null);
const loading = ref(false);

// 請求地圖數據
const fetchMapJson = async (mapCode: string) => {
  const response = await fetch(`https://geo.datav.aliyun.com/areas_v3/bound/${mapCode}.json`);
  const result = await response.json();
  return result;
};

// 記錄點擊鏈路
const mapCodes: string[] = [];
// 初始化 Echarts 實例
const initInstance = () => {
  if (!echartsRef.value) return;
  echartInstance.value = echarts.init(echartsRef.value);
  echartInstance.value.on('click', params => {
    if (params.seriesType === 'map') {
      const { adcode, level } = params.data;
      const mapCode = level === 'district' ? adcode : adcode + '_full';
      // 防止重復點擊最后一層
      if (mapCodes[mapCodes.length - 1] === mapCode) return;
      mapCodes.push(mapCode);
      updateOptions(mapCode);
    }
  });
};

// 返回上一級
const back = () => {
  //   無法再往上了
  if (!mapCodes.length) return;

  mapCodes.pop();
  if (mapCodes.length) {
    // 取最后一個去渲染數據
    updateOptions(mapCodes[mapCodes.length - 1]);
  } else {
    // 沒了說明需要渲染最頂層了
    updateOptions(ROOR_MAP_CODE);
  }
};

// 生成 Echarts 配置
const generateOptions = (mapCode: string, mapData: any): echarts.EChartsCoreOption => {
  return {
    tooltip: {
      show: true,
      //   格式化 tooltip 信息
      formatter: function (params: any) {
        if (params && params.data) {
          const { name } = params.data;
          return name;
        }
      },
    },
    geo: {
      // 傳進來 code,echarts 會去讀取已注冊的地圖數據
      map: mapCode,
      label: {
        show: true,
      },
    },
    series: [
      // 傳進來 code,echarts 會去讀取已注冊的地圖數據
      {
        type: 'map',
        map: mapCode,
        roam: true,
        geoIndex: 0,
        select: false,
        data: mapData,
      },
    ],
  };
};

// 更新地圖 Echarts 配置
const updateOptions = async (mapCode: string) => {
  if (!echartInstance.value) return;
  loading.value = true;
  const mapResult = await fetchMapJson(mapCode);
  echarts.registerMap(mapCode, mapResult);
  const mapdata = mapResult.features.map((item: any) => {
    const { name, adcode, level } = item.properties;
    return {
      name, // 地名
      adcode, // 區域編碼
      level, // 層級
    };
  });
  const options = generateOptions(mapCode, mapdata);
  //   配置 Echarts
  echartInstance.value.setOption(options);
  loading.value = false;
};

onMounted(() => {
  // 初始化
  initInstance();
  updateOptions(ROOR_MAP_CODE);
});
</script>

<style scoped lang="less">
.container {
  width: 800px;
  height: 800px;
}
</style>


責任編輯:武曉燕 來源: 前端之神
相關推薦

2021-09-07 11:51:15

智能供電物聯網

2020-09-02 08:52:16

地圖Echarts可視化

2009-04-17 15:57:33

技術人才定位職場

2022-12-29 07:37:19

Java項目慢業務

2020-09-23 20:07:11

華為全聯接智慧城市

2020-01-17 11:20:30

5G物聯網智慧城市

2011-08-31 17:04:26

2019-01-02 08:41:57

物聯網空氣質量IOT

2021-06-09 19:05:29

VR智慧城市

2020-10-27 06:39:14

智慧城市智慧旅游物聯網

2018-12-10 12:30:05

2022-10-27 15:34:00

物聯網智慧城市工業4.0

2023-12-15 15:31:27

智慧城市數據驅動物聯網

2022-12-20 17:38:02

紫光云

2021-09-02 17:30:57

智慧城市物聯網

2025-04-16 05:00:00

2023-11-11 19:07:23

SilverblueLinux

2022-06-09 13:52:35

Vue協作開發項目

2021-03-31 11:52:47

智能數字城市智慧城市物聯網

2023-07-13 22:58:43

智慧城市物聯網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产传媒| 午夜理伦三级理论三级在线观看 | 亚洲人成在线播放 | 亚洲精品一区二区在线观看 | 精品自拍视频在线观看 | 国产乱xxav | 久久久久久久一区二区三区 | 一级a性色生活片久久毛片波多野 | 欧美激情精品久久久久久免费 | 日韩精品在线观看一区二区 | 中文在线视频 | 天天爱爱网 | 538在线精品 | www.蜜桃av.com| 亚洲一区二区久久 | 99日韩| 久久久久久久久国产成人免费 | 久久久91精品国产一区二区三区 | 精品欧美一区二区三区久久久小说 | 欧美在线视频a | 国产精品a久久久久 | 亚洲欧洲成人av每日更新 | 国产极品车模吞精高潮呻吟 | 久久国产精品久久久久久 | 男女免费在线观看视频 | 日本精品一区二区三区在线观看 | av国产精品 | 999在线精品| 国精产品一区二区三区 | 国产日韩欧美一区二区 | 国产一级黄色网 | 伊人狼人影院 | 午夜免费视频 | 国产精品一二三区 | 天天拍天天操 | 一区二区三区国产 | 亚洲欧美日韩精品久久亚洲区 | 日本中文字幕视频 | www.亚洲| 久草网址 | 亚洲国产精品久久 |