关于百度地图
Posted shinelh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于百度地图相关的知识,希望对你有一定的参考价值。
本篇文章主要记录js应用百度地图或者h5获取gps信息时在安卓手机、ios手机浏览器、微信以及app中的不同表现;
首先贴一下h5获取gps和百度地图获取gps信息的代码:
1.h5获取gps:
var position_option = {
enableHighAccuracy: false, //是否启用高精度设备 时间较长
maximumAge: 30000, //单位毫秒,告诉设备缓存时间
timeout: 20000 //单位毫秒,超时事件,获取位置信息时超出设定的这个时长,将会触发错误
};
function getGPSHandler(){
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(getPositionSuccess, getPositionError, position_option);
}else{
alert("当前浏览器不支持地理位置");
}
}
function getPositionSuccess( position ){
console.log(position);
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
alert("latitude:"+latitude + ";" + "longitude:"+longitude)
// var gpsPoint = new BMap.Point(longitude, latitude);
// console.log(gpsPoint)
// BMap.Convertor.translate(gpsPoint, 0, function (point) {
// var geoc = new BMap.Geocoder();
// geoc.getLocation(point, function (rs) {
// var addComp = rs.addressComponents;
// alert("经度:" + longitude +",纬度:"+ latitude +",经纬转换:"+addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
// });
// });
/*if(typeof position.address !== "undefined"){
var country = position.address.country;
var province = position.address.region;
var city = position.address.city;
alert(‘ 您位于 ‘ + country + province + ‘省‘ + city +‘市‘);
}*/
}
function getPositionError(error) {
switch (error.code) {
case error.TIMEOUT:
alert("连接超时,请重试");
break;
case error.PERMISSION_DENIED:
alert("您拒绝了使用位置共享服务,查询已取消");
break;
case error.POSITION_UNAVAILABLE:
alert("获取位置信息失败");
break;
}
}
2.百度地图获取gps
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
map.centerAndZoom(point,12);
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
var mk = new BMap.Marker(r.point);
map.addOverlay(mk);
map.panTo(r.point);
alert(‘您的位置:‘+r.point.lng+‘,‘+r.point.lat);
}
else {
alert(‘failed‘+this.getStatus());
}
},{enableHighAccuracy: true})
//关于状态码
//BMAP_STATUS_SUCCESS 检索成功。对应数值“0”。
//BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”。
//BMAP_STATUS_UNKNOWN_LOCATION 位置结果未知。对应数值“2”。
//BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”。
//BMAP_STATUS_INVALID_KEY 非法密钥。对应数值“4”。
//BMAP_STATUS_INVALID_REQUEST 非法请求。对应数值“5”。
//BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”。(自 1.1 新增)
//BMAP_STATUS_SERVICE_UNAVAILABLE 服务不可用。对应数值“7”。(自 1.1 新增)
//BMAP_STATUS_TIMEOUT 超时。对应数值“8”。(自 1.1 新增)
3.不同表现
(1)h5获取位置信息通常在http协议下会获取信息失败,在https下能正常获取到;
(2)无论是h5还是百度地图通过js获取位置信息在手机【微信】或手机【浏览器】打开页面链接时,都会出现提示是否同意获取您的位置信息,在安卓手机上每次打开页面都会提示,好处是用户每次都可以重新选择同意获取或不同意,不好的是,会让用户反感;在ios上,系统做了优化,如果用户两次点击了同样的选择(即两次都同意,或者两次都拒绝),那么以后再点开链接,将不再给出任何提示,永远是上一次用户的选择,并且没有任何入口可以更改用户的选择,这种不好的是,以后用户想更改选择的话,无法更改,如果用户没有连续两次相同的选择,那么系统会认为用户的选择不确定,就会一直作出提示,问用户是否同意获取您的位置信息。
(3)h5获取gps信息,如果用户不同意获取位置信息则用户无法拿到gps信息,同意则可以拿到;
(4)百度地图获取gps信息,如果用户不同意获取位置信息,实际上是可以取到一个不精确的位置信息,如果用户同意获取位置信息,则可以拿到精确的位置信息,差不多可以理解为,如果你在某学校,同意获取位置信息可以获取到教学楼的精度纬度,如果不同意可能拿到的就是这个学校所在的城市的某个位置的精度纬度。开发人员完全可以根据状态判断是否要拿gps值。
(5)当包含h5获取位置信息或者百度地图通过js获取位置信息的h5页面嵌套在【app】中时,ios的表现和在浏览器中相同,会提示至少2次,但是在安卓手机中,由于安卓的保护用户隐私的机制默认不同意获取位置信息,并且页面上没有任何提示,除非在安卓的app中做特定的设置,将访问位置的权限放开才可以。
以上是关于关于百度地图的主要内容,如果未能解决你的问题,请参考以下文章