vue 腾讯地图 实现拖拽/搜索改变中心标记位置

需求:拖拽地图的时候 ,搜索框内容变更时 腾讯地图中心标记点跟着改变

 

1,在index.html中引入 <script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=换成你申请的key"></script> 

key的申请可以点击这里https://lbs.qq.com/,流程大概是:登录->点击开发者信息->点击key管理,创建新密钥,填写相应信息即可

2,在需要使用的页面 html中 加入  <div id="map"></div>

参考链接:

腾讯地图

https://lbs.qq.com/javascript_v2/doc/geocoder.html

https://lbs.qq.com/webDemoCenter/javascriptV2/jsGuide/jsOverview

初版代码如下,加了注释,应该看得懂哈

<template>
  <div>
    <div class="hole">
      <input type="text" v-model="searchAdress" class="searPart" />
      <van-button type="primary" class="searPart" @click="updateDeviceAddress">确定</van-button>
    </div>
    <div id="map" style="width:100%" :style="{ height: centerHeight }"></div>
    <div id="centerDiv"></div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      searchAdress: '', // 搜索地址
      centerHeight: '', // 地图的高度
      geocoder: null, // 地址解析类。用于在地址和经纬度之间进行转换的服务。
      isDragend: false, // 标识地图  是拖拽 还是搜索
      deviceInfo: { Longitude: '', Latitude: '' }, // 设备原始信息
      marker: null
    }
  },
  methods: {
    // 确定更新机器位置
    updateDeviceAddress() {
      console.log(this.marker.position.lat)
      console.log(this.marker.position.lng)
    },
    init() {
      debugger
      const that = this
      //   初始化地图 设备信息没有经纬度时,设定公司经纬度
      if (that.deviceInfo.Longitude === '' || that.deviceInfo.Latitude === '') {
        that.deviceInfo.Longitude = '119.9690330000' // 经度
        that.deviceInfo.Latitude = '30.2212330000' // 纬度
      }
      //   中心点
var center = new qq.maps.LatLng(that.deviceInfo.Latitude, that.deviceInfo.Longitude) var map = new qq.maps.Map(document.getElementById('map'), { center: center, draggable: true, // 设置地图可拖拽 zoom: 13 })
// 标记点 that.marker
= new qq.maps.Marker({ position: center, map: map }) // 地址和经纬度之间进行转换服务 that.geocoder = new qq.maps.Geocoder() // 设置服务请求成功的回调函数 that.geocoder.setComplete(function(result) { map.setCenter(result.detail.location) if (!that.marker) { // 标记不存在 创建 that.marker = new qq.maps.Marker({ position: result.detail.location, map: map }) } else { // 标记已存在 更新 that.marker.setPosition(result.detail.location) } // 是拖拽的回调,更新搜索框内容
if (that.isDragend) { that.searchAdress = result.detail.address } }) qq.maps.event.addListener(map, 'dragend', function() { that.isDragend = true
var pt = map.getCenter() var latLng = new qq.maps.LatLng(pt.lat, pt.lng) // 经纬度解析成地址 that.geocoder.getAddress(latLng) }) }, // 获取设备信息 getDeviceInfo() { this.$store .dispatch('home/deviceInfo', { deviceid: 1540 }) .then(data => { this.deviceInfo = data.data this.init() }) .catch(e => {}) } }, watch: {
// 监听搜索框内容的变更 searchAdress(v) {
//防止拖拽回调更新searchAdress后,再次请求地图服务
if (!this.isDragend) { // 地址解析成经纬度 this.geocoder.getLocation(v) } this.isDragend = false } }, created() {}, mounted() { this.centerHeight = window.innerHeight - 70 + 'px' // 获取设备信息 this.getDeviceInfo() } } </script> <style lang="scss" scoped> .hole { // padding: 0 5px; width: 100%; text-align: center; .searPart { width: 98%; height: 30px; margin-top: 5px; } } </style> <style> /* 去除地图水印 开始 */ [title='到腾讯地图查看此区域'] { display: none !important; } #map div div div span { display: none !important; } /* 去除地图水印 结束 */ </style>

 

posted @ 2020-09-29 10:55  southPalace  阅读(1186)  评论(0编辑  收藏  举报