最近项目上碰到须要在webview中获取当前位置的地方,最开始是经过在h5中使用navigator.geolocation定位的方式,发如今部分安卓手机上获取不了定位的经纬度。web
调整了,由IOS或者安卓获取到经纬度,而后放到webview的url中。而后使用百度地图的JS API进行坐标转换得到当前的地址,可是发现总有误差。 相似这儿的示例:http://developer.baidu.com/map/jsdemo.htm#a5_2json
var convertor = new BMap.Convertor(); var pointArr = []; pointArr.push(ggPoint); convertor.translate(pointArr, 1, 5, translateCallback)
最近在测试的时候,发现这个确实个问题,就了解一下定位的经纬度,安卓使用百度定位sdk,返回的是GCJ-02坐标系,查了一下IOS定位坐标,貌似在国内使用的高德地图,也是返回的GCJ-02坐标。api
但我在百度地图JS API的文档里面找,没有找到convertor.translate中的参数具体是指什么,在什么地方指定参数是什么坐标系。测试
最后看了一下WEB API,发现地址转换至关简单,使用以下地址就搞定了: http://api.map.baidu.com/geocoder/v2/?ak=qOgzH9SduWmfjSjMoHDMkSQ9tol4Zf9n&location=30.557046,104.071744&output=json&coordtype=gcj02llurl
其中location是经纬度,output是返回格式,coordtype就是指定参数坐标系类型,而且结果至关精确。 终于解决了在webview中的定位问题,特此记录。code
{ 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 } }