vue-使用Baidu(百度地图)实现输入位置获取定位经纬度

这篇具有很好参考价值的文章主要介绍了vue-使用Baidu(百度地图)实现输入位置获取定位经纬度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 开发中我们需要地图定位,就是用户输入位置,自动定位获取经纬度,传递给后端存在数据库

  • 找了一圈发现千篇一律,最后也是使用element的搜索输入款配合原生百度地图实现这个功能

  • 点击地图需要逆地址解析,输入地址时调用百度地图渲染在下拉框,选择传输地址,经纬度

  • 一般是在添加时加载地图,可能会因为网络原因加载地图实例失败,所以需要一直加载到实例

  • 在项目中工具文件形式引入,相当于创建了一个<script>标签引入地图资源,挂在在全局上

效果图

获取经纬度

代码实现-直接复制需要申请AK-主页文章有

1.在工具文件下建立utils/loadBMap.js-内容如下

export default function loadBMap (ak) {
  return new Promise(function (resolve, reject) {
    if (typeof window.BMap !== 'undefined') {
      resolve(window.BMap)
      return true
    }
    window.onBMapCallback = function () {
      resolve(window.BMap)
    }
    const script = document.createElement('script')
    script.type = 'text/javascript'
    script.src =
      'https://api.map.baidu.com/api?v=3.0&ak=' +
      ak +
      '&callback=onBMapCallback'
    script.onerror = reject
    document.head.appendChild(script)
  })
}

2.在页面中使用-注意没有写AK-需要换

<template>
  <div class="conter">
    <el-button type="primary" size="small" @click="addbaidu"
      >添加信息</el-button
    >
    <el-dialog title="地图定位" :visible.sync="dialogVisible" @close="close" width="30%">
      <el-form ref="form" :model="form" label-width="100px">
        <el-form-item label="归属地址:" prop="building">
          <el-autocomplete
            style="width: 100%"
            v-model="form.building"
            :fetch-suggestions="querySearchAsync"
            :trigger-on-focus="false"
            placeholder="请先搜索地址"
            clearable
            @select="handleSelect"
          >
            <template slot-scope="{ item }">
              <i class="el-icon-search fl mgr10" />
              <div style="overflow: hidden">
                <div class="title">{{ item.title }}</div>
                <span class="address ellipsis">{{ item.address }}</span>
              </div>
            </template>
          </el-autocomplete>
        </el-form-item>
        <el-form-item label="地图定位:">
          <div id="map-container" style="width: 100%; height: 300px" />
        </el-form-item>
        <el-form-item label="经度:">
          <el-input v-model="form.longitude" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="维度:">
          <el-input v-model="form.latitude" autocomplete="off"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="dialogVisible = false"
          >确 定</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
​
<script>
// 引入第三方工具包
import loadBMap from '@/utils/loadBMap.js'
export default {
  name: 'Baidu',
  data() {
    return {
      // 地图实例
      map: null,
      // Marker实例
      mk: null,
      // 定时器
      initMapeq: null,
      // 表单开关
      dialogVisible: false,
      // 表单
      form: {}
    }
  },
  created() {},
  mounted() {
    // 页面加载完之后,加载百度地图
    // 加载引入BMap
    loadBMap('你的AK')-需要申请主页文章有
  },
  methods: {
    close(){
     this.form = {}
    },
    // 添加开关
    addbaidu() {
      // 打开表单
      this.dialogVisible = true
      // 加载地图
      this.getbaidu()
    },
    // 加载地图方法
    getbaidu() {
      this.showDialog = true
      this.initMapeq = setInterval(() => {
        if (this.initMap()) {
          clearInterval(this.initMapeq)
        }
      })
    },
    // 百度地图封装方法
    // 初始化地图
    initMap() {
      try {
        var that = this
        // 1、挂载地图
        // 创建地图实例
        this.map = new BMap.Map('map-container')
        // 设置中心经纬度  这里我们使用BMapGL命名空间下的Point类来创建一个坐标点。Point类描述了一个地理坐标点,其中120.872845表示经度,32.021089表示纬度。(为南通濠河风景区坐标) 作者:星银色飞行船
        var point = new BMap.Point(
          this.form.longitude || 116.41338729034514,
          this.form.latitude || 39.910923647957596
        )
        // 3.在创建地图实例后,我们需要对其进行初始化,BMapGL.Map.centerAndZoom()方法要求设置中心点坐标和地图级别。 地图必须经过初始化才可以执行其他操作
        this.map.centerAndZoom(point, 14)
        // 滚轮缩放
        this.map.enableScrollWheelZoom()
        // 3、设置图像标注并绑定拖拽标注结束后事件
        this.mk = new BMap.Marker(point, { enableDragging: true })
        this.map.addOverlay(this.mk)
      } catch (err) {
        return false
      }
      // 4、添加(右上角)平移缩放控件
      this.map.addControl(
        new BMap.NavigationControl({
          anchor: BMAP_ANCHOR_TOP_RIGHT,
          type: BMAP_NAVIGATION_CONTROL_SMALL
        })
      )
      // 7、绑定点击地图任意点事件
      this.map.addEventListener('click', function (e) {
        console.log('点击了', e)
        that.getAddrByPoint(e.point)
      })
      return true
    },
    // 2、逆地址解析函数 根据坐标点获取详细地址  point   百度地图坐标点,必传
    getAddrByPoint(point) {
      var that = this
      var geco = new BMap.Geocoder()
      geco.getLocation(point, function (res) {
        // console.log(res);
        that.mk.setPosition(point)
        that.map.panTo(point)
        that.form.building = res.address
        that.form.longitude = res.point.lng
        that.form.latitude = res.point.lat
      })
    },
    // 8-1、地址搜索
    querySearchAsync(str, cb) {
      // 根据状态码
      var options = {
        onSearchComplete: function (res) {
          var s = []
          if (local.getStatus() == BMAP_STATUS_SUCCESS) {
            for (var i = 0; i < res.getCurrentNumPois(); i++) {
              s.push(res.getPoi(i))
            }
            cb(s)
          } else {
            cb(s)
          }
        }
      }
      var local = new BMap.LocalSearch(this.map, options)
      local.search(str)
    },
    // 8-2、选择地址
    handleSelect(item) {
      this.form.building = item.address + item.title
      console.log(item);
      this.form.longitude = item.point.lng
      this.form.latitude = item.point.lat
      console.log('lng', item.point.lng)
      console.log('lat', item.point.lat)
      this.map.clearOverlays()
      this.mk = new BMap.Marker(item.point)
      this.map.addOverlay(this.mk)
      this.map.panTo(item.point)
    }
  }
}
</script>
​
<style lang="scss" scoped>
.conter {
  // 去除百度地图的图标
  ::v-deep .anchorBL {
    display: none !important;
  }
}
</style>

总结:

经过这一趟流程下来相信你也对 vue-使用Baidu(百度地图)实现输入位置获取定位经纬度 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕文章来源地址https://www.toymoban.com/news/detail-602173.html

到了这里,关于vue-使用Baidu(百度地图)实现输入位置获取定位经纬度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (2023进阶版)vue+h5 通过高德地图(原生) 获取当前位置定位

    前言:因为也是用的上一个版本的代码,为了描述清楚所以就直接复制文章来更改了,这一版更加完善简洁,高德地图精确度也更高 (2021年写过的一版上线了挺长时间,2023年突然被应用市场下架,说流程走不通,就卡在获取定位失败。改了之后已上线运行 经抓包发现,在 本

    2024年02月11日
    浏览(36)
  • uniapp - [安卓|苹果]实现App端引入高德地图,详细获取当前用户手机定位、两个地点的路线规划及相关示例代码,uniapp安卓Android平台软件下使用高德地图,获取当前位置信息及规划路线

    在uniapp安卓app端 | 苹果app端开发中,详细完成APP端引入使用高德地图插件,提供可直接复制的示例,例如获取当前定位及取到当前城市位置信息,规划两个位置的路线(规划城市2个点的路线轨迹及在地图上显示)等示例。 新手跟着教程一步步来,轻松实现此功能。 首先,

    2024年02月22日
    浏览(63)
  • vue获取+设置光标位置 光标定位 选择输入框文本

    版本:vue2、vant2 在vue是用ref、 r e f s 获取 d o m 的,在 v a n t 框架里 v a n − f i e l d 是输入框组件,它不支持直接设置光标的方法 s e t S e l e c t i o n R a n g e ( ) ,所以通过 t h i s . refs获取dom的,在vant框架里van-field是输入框组件,它不支持直接设置光标的方法setSelectionRange(),所

    2024年02月16日
    浏览(42)
  • vue 使用百度地图记录

    参考文档 https://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/infowindow https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference_3_0.html#a0b0 参考链接:https://api.map.baidu.com/library/MarkerClusterer/1.2/docs/symbols/BMapLib.MarkerClusterer.html 下载这个js

    2024年02月13日
    浏览(29)
  • vue中使用百度地图

    3.在页面使用 4.百度地图初始化函数及批量生成自定义图标点 5.需求1:切换中心点 6.需求2:鼠标滑过自定义图标改变 需求3:鼠标滑过展示信息窗口

    2024年02月14日
    浏览(31)
  • vue3使用高德地图实现点击获取经纬度以及搜索功能

     话不多说直接上干活 在此之前你需要有高德地图的 key,这个自己去申请即可 1,首先需要在终端安装 2,准备一个容器 3,在需要使用的页面引入刚才安装的 4, 5,绑定input框 最后附上css代码 ​​​​​​​这个时候就已经可以了

    2024年02月12日
    浏览(36)
  • uniapp微信小程序获取当前位置信息、经纬度转换、导航地图实现

    1、调用接口,官网文档是这样写的 2、将经纬度转化为位置信息 需要开通腾讯位置服务,开发者每天有一万次的免费转化次数。开通地址  记住当前申请的key值,然后下载微信小程序JavaScriptSDK 然后安全域名设置,在小程序管理后台 - 开发 - 开发管理 - 开发设置 - “服务器域

    2024年02月11日
    浏览(42)
  • vue3 中使用百度地图

    最近一个项目要用到地图,因为微信小程序用的也是百度地图,所以想着网页端也用百度地图,在网上查了很多方法,包括引入百度地图第三方库,还是有问题,发现最简单的方法就是在index.html中引入script,然后直接在相关页面肝就完事。 在百度开发者平台上面申请,其他

    2023年04月17日
    浏览(40)
  • vue项目中使用百度地图(一)

    vue+百度地图的基础使用。 首先,第一步申请key,保存好这个密钥。 链接:jspopular | 百度地图API SDK (baidu.com) 使用百度地图有两种方式:1.javaScript API    2.直接引用组件。 以2.0版本为例。 方法1:百度地图javaScript API 引入方式有两种。 方法1:index.html中引用 在想要展示地图的

    2024年02月12日
    浏览(29)
  • vue3使用百度地图(详)

    提示:该博客vue采用vue3,使用百度地图通过组件 vue-baidu-map-3x : 组件官网:https://map.heifahaizei.com/doc/baidu-map.html 下面会从头开始介绍如何使用百度地图以及常用组件功能(附带遇到的问题和解决方案) 步骤:1. 进入百度地图开放平台 | 百度地图API SDK | 地图开发 2.打开顶部控制

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包