geolocation属性 H5新增地理定位

geolocation用来获取用户的地理位置信息 属于navigato下的一个属性

geolocation的相关方法:
 Geolocation.getCurrentPosition() : 确定设备的位置并返回一个携带位置信息的 Position 对象。
     getCurrentPosition(success, error, option);
            第一个参数:是一个函数, 获取位置信息成功的函数, 函数的参数  position 就是 位置信息对象
            第二个参数: 是一个函数, 获取位置信息失败的函数, 函数的参数 error是 失败的具体信息  
            第三个参数: 是一个对象, 获取位置信息的相关配置项

Geolocation.watchPosition() :注册一个位置改变监听器,每当设备位置改变时,返回一个 long 类型的该监听器的ID值。

 Geolocation.clearWatch() :取消由 watchPosition()注册的位置监听器。
 
   位置信息对象 position :  里边有一个属性 coords ,  该接口表示设备在地球上的位置和海拔,以及计算这些属性的精确度
                1. 纬度   latitude
                1. 经度   longitude
                2. 海拔高度 altitude (en-US)
                3. 位置精度 accuracy
                4. 海拔精确度 altitudeAccuracy (en-US)
                4. 速度 speed
                5. 方向  heading
     6. 时间戳 timestamp  返回一个时间戳DOMTimeStamp, 这个时间戳表示获取到的位置的时间。
  PositionError  接口表示当定位设备位置时发生错误的原因。

        PositionError.code (en-US) 只读   返回无符号的、简短的错误码。下列值是可能的:
     
        值              相关联的常量                       描述
        1      PERMISSION_DENIED              地理位置信息的获取失败,因为该页面没有获取地理位置信息的权限。
        2      POSITION_UNAVAILABLE         地理位置获取失败,因为至少有一个内部位置源返回一个内部错误。
        3     TIMEOUT                                     获取地理位置超时,通过定义PositionOptions.timeout 来设置获取地理位置的超时时
 PositionError.message (en-US) 只读
        返回一个开发者可以理解的 DOMString 来描述错误的详细信息。
案例1:
html:
1  <button class="btn">获取位置信息</button>
2     <div class="container">
3     </div>
4     <p class="x">失败原因: </p>

js:

 1 let container = document.querySelector('.container');
 2         let x = document.querySelector('.x');
 3         let btn = document.querySelector('.btn');
 4         // console.log(window.navigator.geolocation);
 5         btn.onclick = function () {
 6             getPosition()
 7         }
 8         function getPosition() {
 9             let html = '';
10             //  获取用户的地理位置信息
11             window.navigator.geolocation.getCurrentPosition(function (position) {
12                 // console.log(position);
13                 //  获取位置信息时, 有些获取不到的 
14                 let longitude = position.coords.longitude;  // 经度
15                 let latitude = position.coords.latitude;  // 纬度 
16                 let accuracy = position.coords.accuracy; // 位置精度
17                 let altitudeAccuracy = position.coords.altitudeAccuracy; // 海拔位置精度
18                 let altitude = position.coords.altitude; // 海拔  null  
19                 let speed = position.coords.speed; // 速度   null
20                 let heading = position.coords.heading; // 方向  
21                 let timestamp = position.timestamp; // 时间戳
22 
23                 html += ` <p>经度:${longitude} </p>
24                     <p>纬度 ${latitude}</p>
25                     <p>位置精度 ${accuracy}</p>
26                     <p> 海拔: ${altitude} </p>
27                     <p>海拔位置精度: ${altitudeAccuracy} </p>
28                     <p>速度: ${speed} </p>
29                     <p>方向: ${heading}</p>
30                     <p>时间戳: ${timestamp}</p>`
31                 container.innerHTML = html;
32 
33 
34             }, function (error) {
35                 console.log(error);
36                 //  PositionError 接口表示当定位设备位置时发生错误的原因。
37                 //  error.message  失败信息 
38                 switch (error.code) {
39                     case error.PERMISSION_DENIED:
40                         x.innerHTML += "User denied the request for Geolocation.  用户拒绝获取位置信息"; 
41                         break;
42                     case error.POSITION_UNAVAILABLE:
43                         x.innerHTML += "Location information is unavailable. 位置信息不可用 "
44                         break;
45                     case error.TIMEOUT:
46                         x.innerHTML += "The request to get user location timed out. 请求超时"
47                         break;
48                     default: 
49                         x.innerHTML += "An unknown error occurred. 未知错误信息"
50                         break;
51                 }
52             }, {
53                 //  布尔值用来表明应用是否使用其最高精度来表示结果   true ,同时设备能够提供一个更精确的位置,那么设备就会使用这个位置。注意,这会导致较慢的响应时间或者增加电量消耗(比如对于支持gps的移动设备来说) 如果值为false ,设备会通过更快响应以及/或者使用更少的电量等方法来尽可能的节约资源
54                 enableHighAccuracyL:false,  // 默认值 false
55                 // timeout 的值是一个正的 long 值。它表明的是设备必须在多长时间(单位毫秒)内返回一个位置。默认值是 Infinity,意思是获取到一个位置之后, getCurrentPosition() 才会返回一个值。
56                 timeout: 5000 , //  5s 
57                 //  是一个正的 long 值。它表明可以返回多长时间(即最长年龄,单位毫秒)内的可获取的缓存位置。如果设置为 0, 说明设备不能使用一个缓存位置,而且必须去获取一个真实的当前位置。如果设置为 Infinity ,那么不管设置的最长年龄是多少,设备都必须返回一个缓存位置。默认值:0。
58                 maximumAge: 0, 
59             })
60         }

 

地图开放平台:百度地图API,高德地图API,腾讯地图API
个人比较喜欢高德   文档相对详细  可以看懂 学习起来比较好理解
 
高德地图api 五分钟上手教程
        1. 注册成为开发者 : 申请秘钥  (需要进入)
        2. 创建应用  获取key值 和  秘钥
        3. 直接引入 js 脚本的形式:  引入js api 文件
          
  <script src = 'https://webapi.amap.com/maps?v=2.0&key=您申请的key值'></script>

 

        4. 创建指定大小的地图容器。
     需要设置宽和高 用来容纳地图大小
       <div id="container"></div>  // 必须通过id盒子才能显示出来

 

        5. 创建地图实例化对象
            // 第一个参数是 地图容器的id名 ,第二个参数 地图的相关配置项
           js:
1  let map = new AMap.Map('container',{
2             // 定义地图的中心点坐标,可以在高德地图api中开发支持中的坐标拾取点中获得经纬度坐标
3             center:[114.840524,34.065278],
4             //  地图缩放级别
5             zoom:16,
6         })

6.创建地理点标记 必须要有上面步骤才能执行下面的步骤:

js:

 1 //获取点标记的html对象
       let text = document.querySelector('.text')
 2 //  创建点标记
 3         let marker = new AMap.Marker({
 4             // 点标记的坐标
 5             position: [113.54377, 34.802228],
 6             // 要显示该marker的地图对象
 7             // map:map //没有在服务器上面打开的话会显示一直加载不出来的图片 服务器就是通过右键在浏览器中打开这个选项打开
 8             //  自定义点标记图标  
 9             icon: './image/f.png',
10             title: '河南省电子商务产业园',
11             //  自定义点标记的内容 html 字符串或者 html 对象
12             // content:'<h1>点标记的内容</h1>'
13             content: text, // 这一部分也是用来标记提示的 可有可无 和 map以及icon是同样的操作
14             //  点标记的位置 
15             anchor: 'top-center', // 设置锚点方位
16         })
17 
18         map.add(marker)

1.让多个地理点标记显示出来案例 与上面的样式无关:

html:

<div id="container"></div> // 需要给这个盒子设置宽高

js:

 1    <script src='https://webapi.amap.com/maps?v=2.0&key=fba13be7e4cd4c02ccbceed96eb165cf'></script> // 这个是引入的第三方链接
 2     <script src="./js/capitals.js"></script> // 这个js文件是从高德地图api里面拷贝过来的多个地理点标记的对象 eg: 北京 上海 南京...
 3     <script>
 4         let map = new AMap.Map('container', {
 5             center: [113.54377, 34.802228],
 6             zoom: 5
 7         })
 8 
 9         capitals.forEach(function (item, index) {
10             let marker = new AMap.Marker({
11                 position: item.center, // 让每个显示的城市 这个center是拷贝的center不是map里面的center
12                 map: map,
13                 icon: './image/f.png',
14                 title: item.name // 这个name也是拷贝过来的name
15             })
16         })
17 
18     </script>

 1.地图控件显示:

html:

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

js:

 1 <script src='https://webapi.amap.com/maps?v=2.0&key=fba13be7e4cd4c02ccbceed96eb165cf'></script>
 2     <script>
 3         let map = new AMap.Map('container', {
 4             center: [113.54377, 34.802228],
 5             zoom: 16
 6         })
 7 
 8         // 同时引入工具条插件,比例尺插件和鹰眼插件
 9         AMap.plugin([
10             'AMap.ToolBar',
11             'AMap.Scale',
12             'AMap.HawkEye',
13             'AMap.MapType',
14             'AMap.Geolocation',
15         ], function () {
16             // 在图面添加工具条控件,工具条控件集成了缩放、平移、定位等功能按钮在内的组合控件
17             map.addControl(new AMap.ToolBar());
18 
19             // 在图面添加比例尺控件,展示地图在当前层级和纬度下的比例尺
20             map.addControl(new AMap.Scale());
21 
22             // 在图面添加鹰眼控件,在地图右下角显示地图的缩略图
23             map.addControl(new AMap.HawkEye({ isOpen: true }));
24 
25             // 在图面添加类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
26             map.addControl(new AMap.MapType());
27 
28             // 在图面添加定位控件,用来获取和展示用户主机所在的经纬度位置
29             map.addControl(new AMap.Geolocation());
30         });

 



posted @ 2022-05-20 16:40  请善待容嬷嬷  阅读(287)  评论(0编辑  收藏  举报