image.png

1.demo代码

  1. map-utils.js 文件 ```javascript /*
    • @description:
    • @author: 王浩
    • @Date: 2022-09-29 16:06:10
    • @Modified By:
    • @version: 1.0.0 */ // 省份对应的拼音 const nameToPinyin = { 安徽省: ‘安徽’, 澳门特别行政区: ‘澳门’, 北京市: ‘北京’, 福建省: ‘福建’, 甘肃省: ‘甘肃’, 广东省: ‘广东’, 广西壮族自治区: ‘广西’, 贵州省: ‘贵州’, 海南省: ‘海南’, 河北省: ‘河北’, 河南省: ‘河南’, 黑龙江省: ‘黑龙江’, 湖北省: ‘湖北’, 湖南省: ‘湖南’, 吉林省: ‘吉林’, 江苏省: ‘江苏’, 江西省: ‘江西’, 辽宁省: ‘辽宁’, 内蒙古自治区: ‘内蒙古’, 宁夏回族自治区: ‘宁夏’, 青海省: ‘青海’, 山东省: ‘山东’, 山西省: ‘山西’, 陕西省: ‘陕西’, 上海市: ‘上海’, 四川省: ‘四川’, 台湾省: ‘台湾’, 天津市: ‘天津’, 西藏自治区: ‘西藏’, 香港特别行政区: ‘香港’, 新疆维吾尔自治区: ‘新疆’, 云南省: ‘云南’, 浙江省: ‘浙江’, 重庆市: ‘重庆’ }

// 获取省份名称及地图矢量数据的地址 export function getProvinceMapInfo(arg){ // static/map/province 为各省份json数据 const path = ./province/${nameToPinyin[arg]}.json return{ key: nameToPinyin[arg], path: path } }

  1. 2. index中代码
  2. ```javascript
  3. <!--
  4. * @description:map地图
  5. * @author: 王浩
  6. * @Date: 2022-03-30 14:56:42
  7. * @Modified By:
  8. * @version: 1.0.0
  9. -->
  10. <template>
  11. <div style="width: 100%;height: 100%">
  12. <p style="cursor: pointer;" @click="revertMap()" v-if="isShow">
  13. 全网
  14. <span v-if="provinceData !== 'china'">
  15. {{ provinceData === "china" ? " " : "/ " + provinceData }}省
  16. </span>
  17. </p>
  18. <div class="ami-map-basic" ref="main"></div>
  19. </div>
  20. </template>
  21. <script>
  22. import chinaMapJson from "./Map/china.json";
  23. import geoChinaJson from "./Map/geo-china.json";
  24. import { getProvinceMapInfo } from "./Map/map-utils.js";
  25. import elementResizeDetectorMaker from "element-resize-detector";
  26. export default {
  27. name: "AmiMapBasic",
  28. props: {
  29. // 地图数据
  30. option: {
  31. type: Object,
  32. default: () => {
  33. return {};
  34. }
  35. },
  36. // 控制地图类型
  37. geoChina: {
  38. type: Boolean,
  39. default: false
  40. },
  41. // 开启地图下钻
  42. drillDown: {
  43. type: Boolean,
  44. default: true
  45. },
  46. // 开启缩略图
  47. roamShow: {
  48. type: Boolean,
  49. default: false
  50. },
  51. // 控制全网/省份显示隐藏
  52. isShow: {
  53. type: Boolean,
  54. default: true
  55. }
  56. },
  57. data() {
  58. return {
  59. line: null,
  60. provinceData: "china",
  61. options: {
  62. title: this.option.title, //标题
  63. grid: this.option.grid,
  64. legend: this.option.legend,
  65. visualMap: this.option.visualMap,
  66. tooltip: this.option.tooltip, // 提示框
  67. series: this.option.series, //数据
  68. geo: {
  69. select: this.option.geoSelect,
  70. itemStyle: this.option.geoitemStyle,
  71. label: this.option.geoLabel || {
  72. show: true
  73. },
  74. roam: this.roamShow,
  75. type: "map", // 类型
  76. map: "china"
  77. }
  78. }
  79. };
  80. },
  81. mounted() {
  82. this.initChart();
  83. },
  84. methods: {
  85. initChart() {
  86. this.line = echarts.init(this.$refs.main);
  87. // 注册地图类型
  88. if (this.geoChina) {
  89. echarts.registerMap("china", geoChinaJson);
  90. this.line.setOption(this.options, true);
  91. this.drillDown_type(this.drillDown);
  92. } else if (!this.geoChina) {
  93. echarts.registerMap("china", chinaMapJson);
  94. this.line.setOption(this.options, true);
  95. this.drillDown_type(this.drillDown);
  96. }
  97. // 适配屏幕
  98. window.addEventListener("resize", () => this.line.resize());
  99. elementResizeDetectorMaker({ strategy: "scroll" }).listenTo(
  100. this.line,
  101. () => {
  102. this.line.resize();
  103. }
  104. );
  105. },
  106. // 地图下钻
  107. drillDown_type(type) {
  108. if (type) {
  109. this.line.on("click", (params) => {
  110. // 基础地图下转
  111. if (!this.geoChina) {
  112. const provinceInfo = getProvinceMapInfo(params.name);
  113. if (provinceInfo.key !== undefined) {
  114. this.provinceData = provinceInfo.key; // 省份
  115. const mapJson = require(`./Map/province/${
  116. provinceInfo.key
  117. }.json`);
  118. // 注册地图
  119. echarts.registerMap(provinceInfo.key, mapJson);
  120. const changeOption = { geo: { map: provinceInfo.key } };
  121. this.line.setOption(changeOption);
  122. }
  123. // geoChina地图下转
  124. } else {
  125. // 判断是否是直辖市
  126. if (params.name == "南网" || params.name == "蒙东") {
  127. console.log("直辖市");
  128. this.$emit("changeCity", params);
  129. return;
  130. }
  131. this.provinceData = params.name; // 省份
  132. const changeOption = { geo: { map: params.name } };
  133. const mapJson = require(`./Map/province/${params.name}.json`);
  134. echarts.registerMap(params.name, mapJson);
  135. this.line.setOption(changeOption);
  136. }
  137. // 促发事件
  138. this.$emit("changeCity", params);
  139. });
  140. } else {
  141. this.line.off("click");
  142. }
  143. },
  144. // 回退
  145. revertMap() {
  146. if (this.geoChina) {
  147. echarts.registerMap("china", geoChinaJson);
  148. this.line.setOption(this.options, true);
  149. } else if (!this.geoChina) {
  150. echarts.registerMap("china", chinaMapJson);
  151. this.line.setOption(this.options, true);
  152. }
  153. this.provinceData = "china";
  154. }
  155. },
  156. watch: {
  157. option: {
  158. deep: true,
  159. handler() {
  160. this.initChart();
  161. }
  162. }
  163. }
  164. };
  165. </script>
  1. Json文件

https://share.weiyun.com/BoMioz3U

使用

  1. <template>
  2. <ami-button @click="revertMap">回退</ami-button>
  3. <ami-map-basic
  4. style="width: 100%;height: 100vh"
  5. ref="map"
  6. :geoChina="false"
  7. :option="option"
  8. ></ami-map-basic>
  9. </template>
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. option: {
  15. legend: {
  16. left: "5%",
  17. bottom: "5%",
  18. orient: "vertical", // 竖着排列
  19. data: ["一线城市", "二线城市", "三线城市"],
  20. },
  21. // 地图区域的样式
  22. geoitemStyle: {
  23. areaColor: "#2E72BF", // 地图整体区域的颜色
  24. borderColor: "#333", //地图边界线的颜色
  25. },
  26. geoLabel: {
  27. show: true,
  28. },
  29. visualMap: {
  30. type: "continuous",
  31. text: ["", ""],
  32. showLabel: true,
  33. left: "50",
  34. min: 0,
  35. max: 100,
  36. inRange: {
  37. color: ["#edfbfb", "#b7d6f3", "#40a9ed", "#3598c1", "#215096"],
  38. },
  39. splitNumber: 0,
  40. },
  41. tooltip: {
  42. //提示框
  43. show: true, //默认展示
  44. trigger: "item", //触发展示每一项
  45. formatter(parmas) {
  46. return `名称:${parmas.name} <br/>确诊人数:${parmas.value}`;
  47. },
  48. //弹窗样式
  49. padding: 3, //内边距
  50. borderColor: "#333",
  51. backgroundColor: "rgba(50,50,50,0.7)", //
  52. textStyle: {
  53. //文本样式
  54. color: "#fff",
  55. },
  56. },
  57. series: [
  58. {
  59. name: "", // 浮动框的标题(上面的formatter自定义了提示框数据,所以这里可不写)
  60. type: "map",
  61. geoIndex: 0,
  62. label: {
  63. show: true,
  64. },
  65. // 这是需要配置地图上的某个地区的数据,根据后台的返回的数据进行拼接(下面是我定义的假数据)
  66. data: [
  67. {
  68. name: "北京市",
  69. value: 100,
  70. },
  71. {
  72. name: "河南省",
  73. value: 60,
  74. },
  75. ],
  76. },
  77. ],
  78. geoSelect: {
  79. //选中设置
  80. itemStyle: {
  81. areaColor: "#0f2c66", //选中颜色设置
  82. },
  83. },
  84. },
  85. };
  86. },
  87. methods: {
  88. revertMap() {
  89. this.$refs.map.revertMap();
  90. },
  91. },
  92. };
  93. </script>

Attributes

参数 说明 类型 可选值 默认值
option echarts 配置项 object 详见 echarts 官网
option.geoSelect echarts 配置项 object echarts 中地图 geo 中 select 配置项
option.geoitemStyle echarts 配置项 object echarts 中地图 geo 中 itemStyle 配置项
option.geoLabel echarts 配置项 object echarts 中地图 geo 中 label 配置项,其中 show 控制文字显示隐藏
isShow 控制全网/省份显示隐藏 Boolean true / false true
geoChina 控制地图类型 Boolean true / false false
drillDown 是否开启地图下钻 Boolean true / false true
roamShow 是否开启缩略图 Boolean true / false false

Input Events

事件说明 说明 回调参数
changeCity 在值改变点击确定后触发(鼠标点击事件) params
revertMap 回退事件 ——