第 3 节:地图点击事件,点击获取经纬度

第 3 节:地图点击事件,点击获取经纬度

在第 2 节代码基础上新增功能:点击地图任意位置,拿到点击点的经度、纬度,页面展示 + 控制台打印。

天地图 V4:map.on('click', callback),事件对象e.lngLat就是坐标对象,lng经度,lat纬度。

完整代码(直接覆盖)

复制代码
<template>
  <div class="map-page">
    <h2>第3节:地图点击获取经纬度【修复版】</h2>
    <div style="margin-bottom:8px;">
      <span>点击地图获取坐标:{{ lngLatText }}</span>
    </div>
    <div id="map" class="map-container"></div>
  </div>
</template>

<script setup>
import { onMounted, onUnmounted, ref } from 'vue'

const TDT_KEY = '替换成你的tk'
let map = null
const lngLatText = ref('')

// 加载天地图JS
function loadTdtScript() {
  return new Promise((resolve, reject) => {
    if (window.T) {
      return resolve(window.T)
    }
    const script = document.createElement('script')
    script.src = `https://api.tianditu.gov.cn/api?v=4.0&tk=${TDT_KEY}`
    script.onload = () => resolve(window.T)
    script.onerror = err => reject(err)
    document.body.appendChild(script)
  })
}

async function initMap() {
  const T = await loadTdtScript()
  const mapDom = document.getElementById('map')
  if (mapDom.children.length > 0) return

  map = new T.Map('map')
  const center = new T.LngLat(116.404, 39.915)
  map.centerAndZoom(center, 10)
  map.enableScrollWheelZoom(true)

  // 缩放控件:右上角
  const zoomCtrl = new T.Control.Zoom({
    position: 'topright'
  })
  map.addControl(zoomCtrl)

  // 比例尺控件:左上角
  const scaleCtrl = new T.Control.Scale({
    position: 'topleft'
  })
  map.addControl(scaleCtrl)

  // ============ 修复后的地图点击事件 ============
  map.on('click', (e) => {
    // V4 是小写 lnglat!!!不是 lngLat
    if (!e || !e.lnglat) return
    const lng = e.lnglat.lng
    const lat = e.lnglat.lat
    lngLatText.value = `经度:${lng.toFixed(6)},纬度:${lat.toFixed(6)}`
    console.log('点击坐标:', lng, lat)
  })
  // ===========================================
}

onMounted(() => {
  initMap()
})

onUnmounted(() => {
  if (map) {
    const dom = document.getElementById('map')
    dom.innerHTML = ''
    map = null
  }
})
</script>

<style scoped>
.map-page {
  padding: 20px;
}
.map-container {
  width: 100%;
  height: 600px;
  border:1px solid #ccc;
}
</style>

✅ 本节测试

保存代码,刷新页面:

  1. 点击地图任意地方
  2. 页面上方文字会更新为当前点击的经纬度
  3. F12 打开控制台,可以看到打印出坐标
  4. 原有缩放按钮、比例尺功能正常,无报错
相关推荐
jktantan8 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
小大宇11 小时前
Vue知识点-ElementPlus-06 单选+多选+下拉+日期选择
前端·vue.js·elementui
小大宇13 小时前
Vue知识点-ElementPlus-05 输入框
前端·javascript·vue.js
软件技术NINI13 小时前
基于SpringBoot和Vue的摇滚乐鉴赏网站
vue.js·spring boot·后端·spring·html·毕业设计·毕设
计算机毕设定制辅导-无忧学长14 小时前
《基于物品协同过滤的闲置书换购微信小程序设计开发》
java·vue.js·spring boot·微信小程序·uniapp·闲置书换购微信小程序·物品协同过滤算法
Dwzun14 小时前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
她说可以呀1 天前
Vue插槽
前端·javascript·vue.js
qq_448011161 天前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
志尊宝1 天前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
兰亭妙微UI设计公司1 天前
兰亭妙微ui设计公司分享:B端组件命名如何支持团队协作
前端·javascript·vue.js