返回 导航

其他

hangge.com

ECharts - 获取地图点击位置的经纬度坐标(附:点击处添加散点)

作者:hangge | 2024-02-17 10:24
    当使用 ECharts 进行地图可视化展示时,常常需要获取地图鼠标点击位置的经纬度坐标,用于添加标记或进行一些其他交互。下面我通过样例演示如何实现该功能。

1,样例代码

   下面是一个在 Vue 中使用 ECharts 的样例代码,我们使用了 chart.on('click', function (params) {...}) 来监听地图的点击事件,获取点击位置的经纬度坐标。
<template>
  <div>
    <div>{{ longitude }}, {{ latitude }}</div>
    <!-- 地图容器 -->
    <div ref="mapContainer" style="width: 100%; height: 500px;"></div>
  </div>
</template>

<script>
// 引入echarts库
import echarts from 'echarts'

export default {
  data() {
    return {
      // 经度
      longitude: '',
      // 纬度
      latitude: '',
      // 导入江苏省地图的JSON数据
      jsMap: require("@/libs/mapJson/320000.json"),
      // ECharts的配置项
      chartOption: {
        geo: [
          {
            // 地图名称,这里为江苏省
            map: '江苏',
            // 地图缩放级别
            zoom: 1,
            // 地图上的标签配置
            label: {
              show: true,           // 是否显示标签
              fontSize: 13,         // 标签字体大小
              color: '#333',        // 标签字体颜色
              position: ['50%', '50%'],  // 标签位置
            },
            // 地图区域的样式配置
            itemStyle: {
              areaColor: '#5FC5C1',  // 地图区域颜色
              borderColor: '#fff',   // 地图区域边界颜色
              fontWeight: 700,       // 地图区域字体粗细
              borderWidth: 1,        // 地图区域边界宽度
              shadowColor: "rgba(0, 0, 0, 0.5)", // 阴影颜色
              shadowBlur: 10, // 阴影模糊度
            },
            // 地图区域在强调(hover)状态下的样式配置
            emphasis: {
              itemStyle: {
                label: {
                  color: '#222',       // 强调状态下的标签颜色
                  fontWeight: 700,     // 强调状态下的标签字体粗细
                },
                areaColor: '#2D8F8A',  // 强调状态下的地图区域颜色
                borderColor: '#fff',   // 强调状态下的地图区域边界颜色
              },
            },
          },
        ],
        series: [
          {
            name: "alarmScatter",
            type: "scatter",
            symbol: "pin",
            symbolSize: 45,
            coordinateSystem: "geo",
            data: [],
            label: {
              show: true,
              color: "#ffebdc",
              fontSize: 18,
              formatter: "{@value}"
            },
            itemStyle: {
              color: "#1F94E7",
              opacity: 0.9
            }
          }
        ]
      },
    }
  },
  mounted() {
    // 在组件挂载完成后初始化地图
    this.initChart()
  },
  methods: {
    // 初始化地图
    initChart() {
      // 注册江苏省地图
      echarts.registerMap("江苏", this.jsMap)
      // 初始化ECharts实例,并将地图挂载到指定的容器上
      this.chart = echarts.init(this.$refs.mapContainer)
      // 监听地图点击事件
      this.chart.on('click', this.mapClickHandler)
      // 设置ECharts的配置项
      this.chart.setOption(this.chartOption)
    },
    // 地图点击响应
    mapClickHandler(params) {
      // 从点击位置提取经度和纬度
      let [longitude, latitude] = this.chart.convertFromPixel('geo',
       [params.event.offsetX, params.event.offsetY]);
      this.longitude = longitude
      this.latitude = latitude

      // 在点击位置动态添加一个散点标记
      this.chartOption.series[0].data.push({
        value: [this.longitude, this.latitude, 16],
        name: "点击位置"
      })

      // 更新图表选项并设置到地图上
      this.chart.setOption(this.chartOption)
    }
  },
  beforeDestroy() {
    // 在组件销毁前,释放ECharts实例占用的资源
    if (this.chart) {
      this.chart.dispose()
    }
  },
}
</script>

2,运行效果

程序运行后,点击地图会获取并显示该位置的地理坐标(经度和纬度),同时会在点击位置添加一个散点标记。
评论

全部评论(0)

回到顶部