vue 使用百度地图

引入 public /index 下

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <meta name="referrer" content="no-referrer">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=自己申请的ak"></script>
    <title><%= webpackConfig.name %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= webpackConfig.name %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

element ui

<div
              title="地图"
              :visible.sync="dialogMap"
              width="65%"
              :append-to-body="true">
                <div class="el-modal-body">
                    <template>
                      <div>
                        <el-row :gutter="10">
                          <el-col :span="2"><el-button type="primary" @click="fixedPos">定位</el-button></el-col>
                          <el-col :span="2" class="map-top-label">当前经度</el-col>
                          <el-col :span="3">
                            <el-input v-model="longitude" />
                          </el-col>
                          <el-col :span="2" class="map-top-label">当前纬度</el-col>
                          <el-col :span="3">
                            <el-input v-model="latitude" />
                          </el-col>
                          <el-col :span="10"><el-input v-model="keyWords" placeholder="请输入要搜索的地址" /></el-col>
                          <el-col :span="2"><el-button type="primary" @click="setPlace">搜 索</el-button></el-col>
                        </el-row>
                        <div id="map" ></div>
                      </div>
                    </template>
                </div>

              <span slot="footer" class="dialog-footer">
                <el-button @click="dialogMap = false">取 消</el-button>
                <el-button type="primary" @click="dialogMap = false">确 定</el-button>
              </span>
</div>

方法

export default {
     data() {
        return {
            map: null,//地图
            local: null,//地址
            mk: null,//标注
            latitude: '',//纬度
            longitude: '',//经度
            keyWords: '',//地图
         }
    },
      mounted() {
            this.initMap()
  },
  methods: {
           //地图
    initMap(){
     
      this.map = new BMap.Map('map')
      //设置初始地图显示在哪个地方,例如北京颐和园(116.278362,40.006076)
      let point = new BMap.Point(116.278362,40.006076)
      this.map.centerAndZoom(point, 10) //初始化地图,设置城市和地图级别
      this.map.addOverlay(new BMap.Marker(point));//定点坐标红点覆盖
      this.map.enableScrollWheelZoom(true) // 开启鼠标滚轮缩放
      this.map.addControl(new BMap.NavigationControl())
      var that=this
      //点击事件
      this.map.addEventListener("click", function(e){
        that.latitude=that.latitude
        that.longitude = that.longitude
      //获取地图上所有的覆盖物,
        var allOverlay = that.map.getOverlays();
        for(var i = 0;i<allOverlay.length;i++) {
        if(allOverlay[i].toString()=="[object Marker]"){
                          if (allOverlay[i].getPosition().lng == that.longitude && allOverlay[i].getPosition().lat == that.latitude) {
                              that.map.removeOverlay(allOverlay[i]);
                            }
                  }
                }
      //通过点击百度地图,可以获取到对应的point, 由point的lng、lat属性就可以获取对应的经度纬度
      that.latitude = e.point.lat
      that.longitude =  e.point.lng
      point = new BMap.Point(that.longitude, that.latitude)
      that.map.addOverlay(new BMap.Marker(point));//定点坐标红点覆盖
      

      })
      },
    // 点击定位-定位到当前位置
    fixedPos() {
      const _this = this
      const geolocation = new BMap.Geolocation()
      this.confirmLoading = true
      geolocation.getCurrentPosition(function(r) {
        if (this.getStatus() == BMAP_STATUS_SUCCESS) {
          _this.handleMarker(_this, r.point)
          let myGeo = new BMap.Geocoder()
          myGeo.getLocation(new BMap.Point(r.point.lng, r.point.lat), function(result) {
            _this.confirmLoading = false
            if (result) {
              _this.latitude = result.point.lat
              _this.longitude =  result.point.lng
        
            }
          })
        } else {
          _this.$message.error('failed' + this.getStatus())
        }
      })
    },


    // 搜索地址
    setPlace() {
      this.local = new BMap.LocalSearch(this.map, {
        onSearchComplete: this.searchPlace
      })
      this.local.search(this.keyWords)
    },
    searchPlace() {
      if (this.local.getResults() != undefined) {
        this.map.clearOverlays() //清除地图上所有覆盖物
        if (this.local.getResults().getPoi(0)) {
          let point = this.local.getResults().getPoi(0).point //获取第一个智能搜索的结果
          this.map.centerAndZoom(point, 18)
          this.handleMarker(this, point)
          console.log('经度:'+ point.lng + '--' + '纬度' + point.lat)
          this.latitude = point.lat
          this.longitude =  point.lng
         

        } else {
          this.$message.error('未匹配到地点!')
        }
      } else {
        this.$message.error('未找到搜索结果!')
      }
    },
    // 设置标注
    handleMarker(obj, point) {
      obj.mk = new BMap.Marker(point)
      obj.map.addOverlay(obj.mk)
      obj.mk.enableDragging() // 可拖拽
      obj.mk.addEventListener('dragend', function(e) { // 监听标注的拖拽,获取拖拽后的经纬度
        this.latitude = point.lat
        this.longitude =  point.lng

      })
      obj.map.panTo(point)
    },
        
    
    },
}

备注:
记得给map地图 长宽

<style lang="scss" scoped>
#map{
    height: 400px;
    width: 100%px;
  
</style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354