前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Echarts地图省市县穿透及区域居中显示

Echarts地图省市县穿透及区域居中显示

作者头像
我只会写Bug啊
发布2024-07-05 15:18:07
120
发布2024-07-05 15:18:07
举报
文章被收录于专栏:Bug EngineerBug Engineer
代码语言:javascript
复制
<template>
  <div class="echart-bmap_wrapper">
    <div class="btn">
      <button  v-if="level !== 0" type="primary" @click="int" size="mini">
        河北省
      </button>
      <button v-if="level === 2" type="primary" @click="intCity" size="mini">
        {{ levelName }}
      </button>
    </div>
    <div class="bmap-box" id="bmapChartBox"></div>
  </div>
</template>
<script>
import * as echarts from "echarts";
import logo from '@/assets/img/jh.png';
// import axios from "axios";
export default {
  name: "echartBmap",
  data() {
    return {
      // 地图数据
      mapData: {
        河北省: require("./json/hebei.json"),
        //张家口市
        张家口市: require("./json/zjk/zjk.json"),
        桥西区: require("./json/zjk/qx.json"),
        宣化区: require("./json/zjk/xh.json"),
        桥东区: require("./json/zjk/qd.json"),

        //承德市
        承德市: require("./json/cd/cd.json"),
        双桥区: require("./json/cd/sq.json"),
        双滦区: require("./json/cd/sl.json"),


        //唐山市
        唐山市: require("./json/ts/ts.json"),
        曹妃甸区: require("./json/ts/cfd.json"),
        路南区: require("./json/ts/ln.json"),
        迁西县: require("./json/ts/qx.json"),
        迁安市: require("./json/ts/qa.json"),
        玉田县: require("./json/ts/yt.json"),
        路北区: require("./json/ts/lb.json"),
        丰南区: require("./json/ts/fn.json"),
        丰润区: require("./json/ts/fr.json"),
        乐亭县: require("./json/ts/lt.json"),
        遵化市: require("./json/ts/zh.json"),

        //秦皇岛市
        秦皇岛市: require("./json/qhd/qhd.json"),
        海港区: require("./json/qhd/hg.json"),
        北戴河区: require("./json/qhd/bdh.json"),
        山海关区: require("./json/qhd/shg.json"),

        //保定市
        保定市: require("./json/bd/bd.json"),
        徐水区: require("./json/bd/xs.json"),
        竞秀区: require("./json/bd/jx.json"),
        高碑店市: require("./json/bd/gbd.json"),
        涿州区: require("./json/bd/zz.json"),
        容城县: require("./json/bd/rc.json"),
        安新县: require("./json/bd/ax.json"),
        雄县: require("./json/bd/xx.json"),
        
        // 廊坊市
        廊坊市: require("./json/lf/lf.json"),
        广阳区: require("./json/lf/gy.json"),
        安次区: require("./json/lf/ac.json"),

        // 沧州市
        沧州市: require("./json/cz/cz.json"),
        黄骅市: require("./json/cz/hh.json"),
        任丘市: require("./json/cz/rq.json"),
        运河区: require("./json/cz/yh.json"),

        // 衡水市
        衡水市: require("./json/hs/hs.json"),
        桃城区: require("./json/hs/tc.json"),

        // 邢台市
        邢台市: require("./json/xt/xt.json"),
        信都区: require("./json/xt/xd.json"),

        // 邯郸市
        邯郸市: require("./json/hd/hd.json"),
        武安市: require("./json/hd/wa.json"),
        复兴区: require("./json/hd/fx.json"),
        邯山区: require("./json/hd/hs.json"),
        丛台区: require("./json/hd/ct.json"),

        //石家庄
        石家庄市: require("./json/sjz/sjz.json"),
        裕华区: require("./json/sjz/yhq.json"),
        正定县: require("./json/sjz/zdx.json"),
        辛集市: require("./json/sjz/xj.json"),
        鹿泉区: require("./json/sjz/lqq.json"),
        //雄安新区: require("./json/xaxq.json"),
      },
      level: 0, //自定义 河北省级0 市级1 区县级2
      levelName: "",
      option: {
        backgroundColor: "#fff", // 画布颜色
        tooltip: {
          triggerOn:"click", // hover改成点击
          enterable:true,// hover改成点击
          backgroundColor: "rgba(255,255,255,1)",
          borderColor: "#333",
          formatter: function (params) {
            console.log("2323", params.data);
            var result = "";
            result += params.data.name + "<br>";
            result += "<span>" + params.data.address + "</span><br>";
            result += "<span>" + params.data.phone + "</span><br>";
            result += "<span>" + params.data.workRule + "</span>";
            return result;
          },
        },
        //地理坐标系组件用于地图的绘制
        geo: [
          {
            map: "hebei",
            aspectScale: 1, // 这个参数用于 scale 地图的长宽比
            roam: false, // 是否允许缩放
            zoom: 1, // 当前视角的缩放比例
            center: [116.692385, 39.198286], // 河北省地图中心点坐标
            layoutSize: "100%", //地图的大小,支持相对于屏幕宽高的百分比或者绝对的像素大小。
            layoutCenter: ["50%", "50%"], //地图中心在屏幕中的位置
            label: {
              show: true, // 是否地图显示区域的文字,各省市的名字
              color: "#fff",
              fontSize:14,// 省市名称文字大小
            },
            itemStyle: {
              // 区域颜色
              areaColor: {
                type: "radial", //渐变方式
                x: 0.7,
                y: 0.5,
                r: 0.4,
                // 修改地图颜色 渐变效果
                colorStops: [
                  {
                    offset: 0,
                    color: "#0160AD", // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "#0160AD", // 100% 处的颜色
                  },
                ],
                global: false, // 缺省为 false
              },
              emphasis: {
                areaColor: "blue", // 鼠标移入区域背景颜色
                borderWidth: 0,
              },
              borderColor: "#FFFFFF",
              borderWidth: 1,
            },
            emphasis: {
              itemStyle: {
                areaColor: "#0160AD",
              },
              label: {
                show: 1,
                color: "#fff",
              },
            },
            zlevel: 3,
          },
        ],
        series: [
          {
            type: "scatter", // 图表类型
            coordinateSystem: "geo", // 坐标系  geo使用地理坐标系
            symbolSize:16, // 闪烁点的大小
            zlevel: 10, // 这里是关键,一定要放在 series中,显示层级,
            emphasis: {
              scale: true,
            },
            symbol:'image://' + logo,
            itemStyle: {
              // 点的颜色可以根据 params 参数里面的值去设定不通的颜色
              color: function () {
                return "white";
              },
              // shadowBlur: 10,
              // shadowColor: "#333",
            },
            data: [], // 点的数据,包含经纬度
          },
        ],
      },
      // 网点数据
      cityData: require("./json/position.json"),
    };
  },
   created() {
   
  },
  mounted() {
    console.log(this.position);
    this.drawMap(this.mapData["河北省"], 1, '河北省');
  },
  methods: {
    int() {
      this.level = 0;
      this.drawMap(this.mapData["河北省"], 1, '河北省');
    },
    intCity() {
      this.level = 1;
      console.log("this.levelName", this.levelName);
      this.drawMap(this.mapData[this.levelName], 1, this.levelName);
    },
    setMapCenterZoomData(data, zoom, center) {
      this.option.series[0].data = data;
      this.option.geo[0].zoom = zoom;
      this.option.geo[0].center = center;
      console.log('this.option', this.option)
    },
    drawMap(json, type = 0, city) {
      this.echarts = echarts;
      this.dom = document.getElementById("bmapChartBox");
      this.myChart = this.echarts.init(this.dom);
      this.echarts.registerMap("hebei", json);
      if (type == 1) {
        let data = this.cityData[city];
        console.log("data", this.cityData[city]);
        let mapCenter = this.mapData[city].features[0].properties.centroid;
        console.log("获取该区域中心点", mapCenter);
        this.setMapCenterZoomData(data, 1, mapCenter);
      } else {
        this.myChart.clear();
        this.setMapCenterZoomData([], 1, [116.713569, 39.527808]); // 河北省中心地带
      }

      this.myChart.setOption(this.option);
      this.myChart.off("click");
      this.myChart.on("click", (param) => {
        console.log("位置信息", this.cityData[param.name]);
        this.mapData[param.name] && this.myChart.clear();
        this.mapData[param.name] && this.drawMap(this.mapData[city], 1, city);
      });
    },
  },
};
</script>
<style lang="less" scoped>
.echart-bmap_wrapper {
  position: relative;
  .btn {
    position: absolute;
    left: 20px;
    top: 20px;
    z-index: 1;
    button{
      margin-right: 15px;
    }
  }
}
.bmap-box {
  width: 100%;
  height: 900px;
}
</style>

关于地图中心点显示在窗口的中心
  1. 获取地图中心点
代码语言:javascript
复制
地图数据中有一个features数组,以下结构可以获取地图的质点
请注意不是 center,而是centroid!
cityData.features[0].properties.centroid;
  1. 将地图中心点设置在窗口中心
代码语言:javascript
复制
 geo: [
          {
            layoutSize: "100%", //地图的大小,支持相对于屏幕宽高的百分比或者绝对的像素大小。
            layoutCenter: ["50%", "50%"], //地图中心在屏幕中的位置
            }
       ]
centroid(质心)的定义

centroid(质心)是一个几何学上的概念,它指的是一个形状中所有点的平均位置。对于多边形等复杂形状,质心通常位于形状内部,且是该形状的一个平衡点。

在FeatureCollection中的应用

当我们谈论FeatureCollection中的centroid时,我们实际上是在谈论如何计算或获取这个集合中每个地理特征的质心。 在许多地理信息系统和平台中,如GEE,提供了直接计算Geometry(几何形状)质心的方法,如ee.Geometry.centroid()。这个方法可以被应用于FeatureCollection中的每个Feature,以获取其几何形状的质心。

获取地图数据可点击此处

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于地图中心点显示在窗口的中心
  • centroid(质心)的定义
  • 在FeatureCollection中的应用
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档