前端获取经纬度

H5获取

参考

geolocation 对象

下面的方法只能获取到粗精度

注意:无 GPS 模块的 PC 设备使用 Chrome 浏览器的时候,位置信息是连接谷歌服务器获取的,国内用户可能获取位置信息失败。

参考:JS获取本地经纬度

一个最简单的调用方法

window.navigator.geolocation.getCurrentPosition(function (position) {
    console.log(position.coords.latitude)
    console.log(position.coords.longitude)
})

封装好的代码如下:

function getPosition () {
  return new Promise((resolve, reject) => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function (position) {
        let latitude = position.coords.latitude
        let longitude = position.coords.longitude
        let data = {
          latitude: latitude,
          longitude: longitude
        }
        resolve(data)
      }, function () {
        reject(arguments)
      })
    } else {
      reject('你的浏览器不支持当前地理位置信息获取')
    }
  })
}

调用方法如下:

      // 获取当前经纬度座标
      getPosition().then(result => {
        // 返回结果示例:
        // {latitude: 30.318030999999998, longitude: 120.05561639999999}
        // 一般小数点后只取六位,所以用以下代码搞定
        let queryData = {
          longtitude: String(result.longitude).match(/\d+\.\d{0,6}/)[0],
          latitude: String(result.latitude).match(/\d+\.\d{0,6}/)[0],
          channelType: '00'
        }
        console.log(queryData)
        // 以下放置获取座标后你要执行的代码:
        // ...
      }).catch(err => {
        console.log(err)
      })

记得,这是一个异步操作,所以获取座标后需要执行的代码不能直接写在函数后面,而是应该写在then里面(参照注释所写的位置)

参考:移动端获取当前用户的经纬度

一、HTML5 geolocation的属性

if(navigator.geolocation){
  navigator.geolocation.getCurrentPosition(onSuccess , onError);
}else{
  alert("您的浏览器不支持使用HTML 5来获取地理位置服务");
}
//定位数据获取成功响应
function  onSuccess(position){
      alert('纬度: '          + position.coords.latitude          + '\n' +
      '经度: '         + position.coords.longitude         + '\n' +
      '海拔: '          + position.coords.altitude          + '\n' +
      '水平精度: '          + position.coords.accuracy          + '\n' +
      '垂直精度: ' + position.coords.altitudeAccura)
}
//定位数据获取失败响应
function onError(error) {
  switch(error.code)
  {
    case error.PERMISSION_DENIED:
    alert("您拒绝对获取地理位置的请求");
    break;
    case error.POSITION_UNAVAILABLE:
    alert("位置信息是不可用的");
    break;
    case error.TIMEOUT:
    alert("请求您的地理位置超时");
    break;
    case error.UNKNOWN_ERROR:
    alert("未知错误");
    break;
  }
}

二、百度地图api定位

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxxxxxxxxx"></script>
 <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
 <script>
    window.BMap = BMap;
    let BMap = window.BMap
    let geolocation = new BMap.Geolocation()

    geolocation.enableSDKLocation(); //允许SDK辅助
    geolocation.getCurrentPosition(function (r)
   {
        if(this.getStatus() == 0){
        console.log(r)
       }
  })
 </script>

在这里插入图片描述

HTML5获取地理经纬度并通过百度接口得到实时位置
百度地图api
百度地图鹰眼记录轨迹

三 、腾讯地图api定位

<iframe id="geoPage" width=0 height=0 frameborder=0  style="display:none;" scrolling="no"
    src="https://apis.map.qq.com/tools/geolocation?key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77&referer=myapp">
</iframe>
window.addEventListener('message', function(event) {
    // 接收位置信息
    var loc = event.data;
    console.log('location', loc);
}, false)       ;
setTimeout(function() {
    if (!_this.loc) {
       console.log('定位超时')
    }
}, 6000) // 6s为推荐值,业务调用方可根据自己的需求设置改时间,不建议太短

在这里插入图片描述
腾讯地图组件API
腾讯JavaScript API

实操

参考:vue使用腾讯地图定位

引入js包(注意:vue项目得在首页的index.html里面引入)

<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=yourkey"></script>
//这个是固定的用这个链接就可以
<script src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>

三步走

<template>
    <div id="container" style="width:600px;height:500px;"></div>
</template>

<script>
    export default{
        name:'news',
        data() {
            return {
                longitude:0,//经度
                latitude:0,//纬度
                city:''
            }
        },
        methods:{
  //第一部分
              //定位获得当前位置信息
            getMyLocation() {
                var geolocation = new qq.maps.Geolocation("yourkey", "yourkey名称");
                geolocation.getIpLocation(this.showPosition, this.showErr);
                //geolocation.getLocation(this.showPosition, this.showErr);//或者用getLocation精确度比较高
            },
            showPosition(position) {
                console.log(position);
                this.latitude = position.lat;
                this.longitude = position.lng;
                this.city = position.city;
                this.setMap();
            },
            showErr() {
                console.log("定位失败");
                this.getMyLocation();//定位失败再请求定位,测试使用
            },
//第二部分
        //位置信息在地图上展示
            setMap() {
                //步骤:定义map变量 调用 qq.maps.Map() 构造函数   获取地图显示容器
                //设置地图中心点
                var myLatlng = new qq.maps.LatLng(this.latitude,this.longitude);
                //定义工厂模式函数
                var myOptions = {
                  zoom: 13,               //设置地图缩放级别
                  center: myLatlng,    //设置中心点样式
                  mapTypeId: qq.maps.MapTypeId.ROADMAP  //设置地图样式详情参见MapType
                }
                // //获取dom元素添加地图信息
                var map = new qq.maps.Map(document.getElementById("container"), myOptions);
//第三部分
              //给定位的位置添加图片标注
                var marker = new qq.maps.Marker({
                    position: myLatlng,
                    map: map
                });
                //给定位的位置添加文本标注
                var marker = new qq.maps.Label({
                    position: myLatlng,
                    map: map,
                    content:'这是我当前的位置,偏差有点大,哈哈'
                });
            }
          },
        mounted() {
            this.getMyLocation();
            }
        }
</script>

在这里插入图片描述
小伙伴们用的时候可以一步一步去实现,保证每一步都实现后再进行下一步

在这里插入图片描述
在这里插入图片描述

vue使用腾讯地图(一)https://www.jianshu.com/p/130cdbd07394
vue使用腾讯地图(二)事件https://www.jianshu.com/p/0ce29aec5f47
vue使用腾讯地图(三)标注https://www.jianshu.com/p/eca4f20ee1cb
vue使用腾讯地图(四)定位实战qq.maps.Geolocation

申请key地址https://lbs.qq.com/console/mykey.html

官方文档
https://lbs.qq.com/tool/component-geolocation.html
https://lbs.qq.com/javascript_v2/guide-start.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章