vue3 使用百度地图 取两个经纬度的距离(走过的坑,特来分享)

https://lbsyun.baidu.com/

先注册百度地图开放平台 获取ak 

阿里云有免费的ssl 证书可以去申请一下

做好了上面的准备之后 看一下下面的效果图

谷歌浏览器 的注意了 可以换ie 查看

有bug 请看后面的注意事项

下面是代码了:

首先在vue3 目录下 引入https 的 百度地图链接。 ak 填写自己的 百度平台ak.

 <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=*****"></script>

其次vue3代码:getMyPoint 说的是获取当前的经纬度,非常重要。我出问题的点也是在这,由于现在的安全考虑,百度地图在https域名都获取不到精确的经纬度了。 getdistancefn 方法就是用来判断经纬度之间距离的,这个方法还是很不错的 没啥大问题。

    // 通过浏览器定位获得我的经纬度
    const getMyPoint = () => {
      // var self = this
      var geolocation = new BMap.Geolocation()
      geolocation.getCurrentPosition(function (res) {
        console.log(geolocation, '位置信息')
        pointA.value = new BMap.Point(res.point.lng, res.point.lat) // 通过浏览器获得我的经纬度
        console.log(pointA.value)
      })
    }
    // 测量百度地图两个点间的距离
    const getDistancefn = () => {
      var map = new BMap.Map('container')

      pointB.value = new BMap.Point(
        parseFloat('123.041951'),
        parseFloat('46.079287')
      ) // 店铺的经纬度
      map.centerAndZoom(pointB.value, 15)
      map.enableScrollWheelZoom(true) // 启用滚轮放大缩小
      console.log(pointA.value, 'a')
      console.log(pointB.value, 'b')
      let a = (map.getDistance(pointB.value, pointA.value) / 1000).toFixed(2)
      distanceour.value = a
      return a
      //  (
      // alert(a)
      // ).toFixed(2) // 保留小数点后两位
      // console.log(a, '距离')
    }

最后在使用的时候,进行一下,pointA的值验证一下是否为空。 我上面计算出来的 是距离多少公里,所以对比的时候也是使用的公里来进行的。

var arr: any = Object.getOwnPropertyNames(pointA.value)
      if (arr.length == 0) {
        Dialog.confirm({
          title: '信息',
          message: '还未获取当前定位请稍等',
        })
        getMyPoint()
        return
      }

 let distance: any = getDistancefn()
      if (distance > 5) {
        Dialog.confirm({
          title: '提示',
          message: '请距离五公里在进行签到,谢谢',
        })
        getMyPoint()
        return
      }

因为定位只能定位到市,所以这个bug改了好久,如果对您起到帮助请关注我一下吧,后面还会分享精品文章。

注意事项:

1.获取精准的经纬度,需要https,没有https,先去认证ssl

2.ie浏览器很精准,谷歌浏览器,获取不到精准定位,只能定位到市。

3.我当时做的时候是在微信内部浏览器,在电脑上的威信内置获取不到,手机端没问题

4.认证了https 后需要等一段时间 手机上才能获取到 不要心急。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,下面是详细的步骤: 1. 在 HTML 中地图容器和标记容器: ```html <template> <div class="map-container"> <div class="map" ref="map"></div> <div class="marker" ref="marker"></div> </div> </template> ``` 2. 在 `setup()` 函数中引入腾讯地图的 API 和样式文件,并创建地图和标记: ```javascript import { onMounted, ref } from "vue"; export default { setup() { // 引入腾讯地图 API 和样式文件 const script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://map.qq.com/api/js?v=2.exp&key=YOUR_KEY_HERE"; script.onload = () => { // 创建地图和标记 const map = new qq.maps.Map(document.getElementById("map"), { center: new qq.maps.LatLng(39.916527, 116.397128), zoom: 13, }); const marker = new qq.maps.Marker({ position: map.getCenter(), draggable: true, map: map, }); // 监听标记拖动结束事件 qq.maps.event.addListener(marker, "dragend", function (event) { // 获标记位置的经纬度信息 const latLng = marker.getPosition(); console.log("经度:" + latLng.getLng() + ",纬度:" + latLng.getLat()); }); }; document.head.appendChild(script); return {}; }, }; ``` 3. 在 `mounted()` 函数中获地图和标记容器的 DOM 节点: ```javascript import { onMounted, ref } from "vue"; export default { setup() { // ... onMounted(() => { // 获地图和标记容器的 DOM 节点 const mapContainer = document.getElementById("map"); const markerContainer = document.getElementById("marker"); // 设置地图和标记容器的宽度和高度 mapContainer.style.width = "100%"; mapContainer.style.height = "400px"; markerContainer.style.width = "32px"; markerContainer.style.height = "32px"; // 将标记容器作为标记的图标 marker.setIcon( new qq.maps.MarkerImage( "http://open.map.qq.com/doc/img/n_marker.png", null, null, null, new qq.maps.Size(32, 32) ) ); marker.set("offset", new qq.maps.Size(0, 0)); marker.set("iconAnchor", new qq.maps.Point(16, 16)); marker.set("shadow", new qq.maps.MarkerImage(null, null, null, null, new qq.maps.Size(0, 0))); markerContainer.appendChild(marker.get("container")); }); return {}; }, }; ``` 4. 最后在 CSS 中设置地图容器的样式: ```css .map-container { position: relative; } .map { position: relative; z-index: 1; } .marker { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 2; } ``` 这样就完成了使用腾讯地图拖动标记获经纬度的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值