在移动互联网时代,随着智能手机的广泛普及,地理位置相关的应用也越来越多,因此,获取定位信息已经成为移动应用开发的一个非常重要的功能。而在H5封装的APP中,获取定位信息也是经常会用到的功能之一。
下面我们来介绍一下在H5封装的APP中,如何获取定位信息。
## 原理
H5封装的APP通常是基于手机浏览器内核实现的,所以我们可以利用浏览器提供的定位API来获取定位信息。如下所示,通过调用navigator.geolocation.getCurrentPosition()方法即可获取定位信息。
```
navigator.geolocation.getCurrentPosition(
// 成功回调函数,获取到位置信息后会调用此函数
function(position) {
var latitude = position.coords.latitude; // 纬度
var longitude = position.coords.longitude; // 经度
var accuracy = position.coords.accuracy; // 精度
// ... 其他操作
},
// 失败回调函数,获取位置信息失败后会调用此函数
function(error) {
// ... 错误处理
}
);
```
getCurrentPosition()方法接受两个回调函数参数,第一个参数是成功回调函数,第二个参数是失败回调函数。成功回调函数中的position参数包含了当前位置的纬度、经度、精度等信息,而失败回调函数中的error参数则描述了错误信息。
定位API一般要求用户授权,以获得定位的权限。因此,在调用getCurrentPosition()方法之前,我们需要先判断一下用户是否授权了定位权限:
```
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
} else {
alert("定位功能不支持");
}
```
## 详细介绍
实现定位功能并不仅仅是调用getCurrentPosition()方法这么简单。下面我们来介绍一些常见的定位实现方式、注意事项等。
1. 精度控制
在实际应用中,获取位置信息的精度是非常关键的。我们可以通过getCurrentPosition()函数中的options参数来控制获取位置的精度。例如:
```
navigator.geolocation.getCurrentPosition(
function(position) {
// ...
},
function(error) {
// ...
},
// options 配置项
{
enableHighAccuracy:true, // 是否获取高精度位置信息
timeout:5000, // 超时时间(单位:毫秒)
maximumAge:3000 // 缓存时间(单位:毫秒)
}
);
```
2. 定位失败的处理
定位失败是很常见的情况,应用中一定要做好失败处理。在getCurrentPosition()函数中的失败回调函数中,我们可以获得定位失败的错误信息(包括错误码和错误描述):
```
function errorCallback(error) {
var errorCode = error.code;
var errorMessage = error.message;
// ... 错误处理
}
```
如果获取位置信息失败,通常的处理方式是弹出一个提示框,提示用户网络不稳定或不支持定位等信息,并提供重试功能。
3. 定位精度的显示
对于精度较高(15米以内)的定位结果,可以在地图上展示用户的位置。如果精度较低(15米以上),则可以只显示精度圆周。
```
// 精度小于等于 15 米,展示位置
if (position.coords.accuracy <= 15) {
// ... 在地图上显示用户位置
} else {
// 精度大于 15 米,显示精度圆周
var geolocationCircle = new BMap.Circle(
new BMap.Point(position.coords.longitude, position.coords.latitude),
position.coords.accuracy,
{
fillColor: "#888",
strokeColor: "#ddd",
strokeWeight: 1,
strokeOpacity: 0.5,
fillOpacity: 0.1
}
);
// ... 在地图上添加精度圆周
}
```
以上代码使用了百度地图API,通过判断定位精度是否小于等于15米,来决定是展示用户位置,还是展示精度圆周。
4. 高精度定位和缓存
为了提高定位精度,可以打开getCurrentPosition()函数中的enableHighAccuracy选项,并且通过设置maximumAge选项来缓存定位结果。缓存时间越长,定位速度越快,但精度也可能低一些。
```
navigator.geolocation.getCurrentPosition(
successCallback,
errorCallback,
{
enableHighAccuracy: true, // 获取高精度位置信息
timeout: 5000, // 超时时间
maximumAge : 5*60*1000 // 缓存时间(5分钟)
}
);
```
## 总结
通过上面的介绍,我们可以看出,在H5封装的APP中,获取定位信息并不复杂,只需要了解定位API的使用方法和一些注意事项即可。同时我们也看到了,定位功能是非常重要的一个功能,可以让应用更加智能化和个性化。