用百度地图api获取用户的当前位置只有edge位置比较准确 chrome fierfox 2345 360浏览器偏差啊太大是怎么回事
使用百度api获取当前地理位置然后解码获取 省 市 区 街道
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title></title>
<script src="http://code.jquery.com/jquery-3.0.0.min.js"></script>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&s=1&ak=-----"></script>
</head>
<body>
<div>
<span id="load_geolocation">点击获取位置</span>
</div>
</body>
<script type="text/javascript">
$(function(){
$("#load_geolocation").text("正在获取位置......");
//创建百度地图控件
var geolocation = new BMap.Geolocation();
// 开启SDK辅助定位
geolocation.enableSDKLocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
//以指定的经度与纬度创建一个坐标点
var pt = new BMap.Point(r.point.lng,r.point.lat);
alert(r.point.lng);
alert(r.point.lat);
//创建一个地理位置解析器
var geoc = new BMap.Geocoder();
geoc.getLocation(pt, function(rs){//解析格式:城市,区县,街道
var addComp = rs.addressComponents;
$("#load_geolocation").text(addComp.province+","+ addComp.city + ", " + addComp.district + ", " + addComp.street);
});
}
else {
$("#load_geolocation").text('定位失败');
}
},{enableHighAccuracy: true})//指示浏览器获取高精度的位置,默认false
});
</script>
</html>
应该是edge对于本地环境默认使用的https协议,测试了下,对于发布后的http协议edge定位也不是准确的,但是本地机环境是准确的
无论是高德地图还是百度地图的定位现在都需要使用更安全的https协议才能准确的定位,这是因为浏览器的限制
定位有三层,首先是比较准确的浏览器定位,优先调用浏览器H5定位接口,但是需要https协议。浏览器定位后会使用IP定位,这个定位是城市级别的,会定位到城市中心,不是绝对的城市地图边界中心,差不多是市政府的位置,比如上面的龙奥南路
第三层是移动端的SDK辅助定位,这和pc端无关了