https://my.oschina.net/sannychan/blog/655447
最近项目上碰到需要在webview中获取当前位置的地方,最开始是通过在h5中使用navigator.geolocation定位的方式,发现在部分安卓手机上获取不了定位的经纬度。
调整了,由IOS或者安卓获取到经纬度,然后放到webview的url中。然后使用百度地图的JS API进行坐标转换获得当前的地址,但是发现总有偏差。 类似这儿的示例:http://developer.baidu.com/map/jsdemo.htm#a5_2
var convertor = new BMap.Convertor();
var pointArr = [];
pointArr.push(ggPoint);
convertor.translate(pointArr, 1, 5, translateCallback)
最近在测试的时候,发现这个确实个问题,就了解一下定位的经纬度,安卓使用百度定位sdk,返回的是GCJ-02坐标系,查了一下IOS定位坐标,貌似在国内使用的高德地图,也是返回的GCJ-02坐标。
但我在百度地图JS API的文档里面找,没有找到convertor.translate中的参数具体是指什么,在什么地方指定参数是什么坐标系。
最后看了一下WEB API,发现地址转换相当简单,使用如下地址就搞定了:http://api.map.baidu.com/geocoder/v2/?ak=qOgzH9SduWmfjSjMoHDMkSQ9tol4Zf9n&location=30.557046,104.071744&output=json&coordtype=gcj02ll
其中location是经纬度,output是返回格式,coordtype就是指定参数坐标系类型,并且结果相当精确。 终于解决了在webview中的定位问题,特此记录。
{
status: 0,
result: {
location: {
lng: 104.07823744785,
lat: 30.563013004601
},
formatted_address: "四川省成都市武侯区西蜀廊桥",
business: "",
addressComponent: {
adcode: "510107",
city: "成都市",
country: "中国",
direction: "",
distance: "",
district: "武侯区",
province: "四川省",
street: "西蜀廊桥",
street_number: "",
country_code: 0
},
poiRegions: [ ],
sematic_description: "成都远方之家连锁公寓新会展店北94米",
cityCode: 75
}
}