ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

地理位置

2021-07-18 18:34:30  阅读:224  来源: 互联网

标签:定位 map res 地理位置 let new BMap


地理定位

一、定位基础与原理

IP定位

运营商基站定位

GPS卫星定位

二、地理定位的实现

HTML5提供了地理定位API,允许用户将自己的位置暴露给web应用程序(前提允许web应用拥有该权限)。获取位置相关代码:

let geoloc = window.navigator.geolocation;
let success = function(data){} // 定位成功后回调
let error = function(msg){}  // 定位失败后回调
let options = {}  // 定位选项
geoloc.getCurrentPosition(success, [error, options]);

google chrome从50版本开始,地理定位API只允许提供给https的网站。所以普通网站拿不到定位信息。但是google提供了模拟器用于定位测试。

如果定位成功,getCurrentLocation将会返回定位信息,格式如下:

coords: GeolocationCoordinates
    accuracy: 150       精准度
    altitude: null      海拔高度
    altitudeAccuracy: null   海拔高度的精准度
    heading: null      
    latitude: 39.917406    纬度
    longitude: 116.397074  经度
    speed: null   当前客户端的瞬时速度
timestamp: 1625820505615   时间戳  毫秒值

案例:点击按钮,获取当前的位置信息

<body>
    <button id="btn">点我获取定位</button>
    <script>
        btn.onclick = function() {
            let geoloc = window.navigator.geolocation;
            // 参数:成功回调,失败回调,定位选项配置
            geoloc.getCurrentPosition((successmsg) => {
                console.log(successmsg);
            }, (errormsg) => {
                console.warn(errormsg);
            }, {
                timeout: 5000 // timeout: 5秒超时
            })
        }
    </script>
</body>

1. 接入第三方位置服务平台 - 百度地图、高德地图、腾讯地图

一旦接入了这些第三方平台,就可以方便的在自已网页中嵌入地图控件。引入这些第三方位置服务的js库后,还可以操作这些地图,访问他们提供的位置服务:查询公交线路、查询步行线路、驾车线路、地址查询、查询周边场所等等。

百度地图接入流程

进入百度地图开放平台: https://lbsyun.baidu.com/

选择开发文档 ---- JavascriptAPI ---- JavaScript API v3.0

2. 调用百度地图JS API修改地图显示效果

利用navigator.geolocation得到当前位置,创建一个point对象作为中心点参数

    geoloc.getCurrentPosition(
      (res)=>{
        let lat = res.coords.latitude; // 纬度
        let long = res.coords.longitude;  // 经度
        console.log(`lat: ${lat}  long: ${long}`)
        // 创建点坐标  
        let point = new BMap.Point(long, lat);
        // 设置中心点与缩放级别
        map.centerAndZoom(point, 15);
      },
      (err)=>{ console.log(err); });

地图对象(Map)除了centerAndZoom之外还有什么属性及方法?

面向对象API提供了什么功能就可以使用什么功能。

常用功能:

显示地图

设置地图的属性样式

为地图添加控件

为地图添加覆盖物

第三方位置服务

  1. 逆地址解析(通过经纬度返回地址详情字符串)
  2. 周边检索(通过经纬度,查询周边设施场所)
  3. 等等

demo:

<head>
  <!-- 1. 引入baidu jsAPI -->
    <script src="https://api.map.baidu.com/api?v=3.0&ak=ImUxp08DxBOdWifsi9WvqY3GkqV4eRHB"></script>
    <style>
        #container {
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
        }
    </style>
</head>

<body>
  <!-- 2. 提供容器 -->
  <div id="container"></div> 

  <!-- 3. 编写js初始化地图 -->
  <script type="text/javascript"> 
    // 创建地图实例  
    var map = new BMap.Map("container");
    // 获取当前位置的经纬度 然后设置地图
    let geoloc = window.navigator.geolocation;
    geoloc.getCurrentPosition(
      (res)=>{
        let lat = res.coords.latitude; // 纬度
        let long = res.coords.longitude;  // 经度
        console.log(`lat: ${lat}  long: ${long}`)
        // 创建点坐标  
        var point = new BMap.Point(long, lat);
        // 设置中心点与缩放级别
        map.centerAndZoom(point, 15);

        // 调用map的方法,设置地图的能力
        map.enableDragging();
        // 启用滚轮缩放 
        map.enableScrollWheelZoom();
        // 添加平移缩放控件
        let navCtrl = new BMap.NavigationControl();
        map.addControl(navCtrl);
        // 添加比例尺控件
        let scaleCtrl = new BMap.ScaleControl();
        map.addControl(scaleCtrl);
        // 添加定位控件
        let glCtrl = new BMap.GeolocationControl();
        map.addControl(glCtrl);

        // 添加覆盖物  Marker对象
        // let point = new BMap.Point(long, lat);
        let marker = new BMap.Marker(point);
        map.addOverlay(marker);
        // 添加事件
        marker.addEventListener('click', (e)=>{
          alert('marker被点击');
        });

        // LBS服务  逆地址解析
        let geoc = new BMap.Geocoder();
        geoc.getLocation(point, (res)=>{
          console.log(res);
          console.log(res.addressComponents.city);
        });
        // LBS服务  查询周边
        let localSearch = new BMap.LocalSearch(
          point,   // 当前位置点
          {        // options对象,指定搜索结束后的回调
            onSearchComplete: (res)=>{
              console.log(res);
            }
          }
        );
        localSearch.search('影院');


      },
      (err)=>{ console.log(err); });
  </script>
</body>

标签:定位,map,res,地理位置,let,new,BMap
来源: https://www.cnblogs.com/CarlaZhou/p/15027303.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有