您的位置:首页 > 其它

百度地图中如何获取某个经纬度附近的地址

2018-04-01 13:47 274 查看
我们在网页版中使用百度地图的时候,可以发现点击一下定位以后会定位到现在自己这里的位置来,并且显示自己的位置大概是什么地方。
但是查阅api的时候,当我们调用定位api的时候却经常做不到这个,虽然返回值里面有街道级别。但是并不是我们想要的大概地址。
这个的原因是因为,我们查阅的是js的api http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html
我们以为的是,我们进行定位,然后返回一个地址,但是,实际上并不在这里。而是在 http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad
web服务的api中。。。
当我们传递一个定位经纬度,然后再返回这个经纬度对应的大致地址。。。
以前的时候使用过高德地图的时候有一个地图组件,可以实现通过一条url就跳转到外部的浏览器来实现地图功能,而这个的也是一个url,所以一开始的时候也会跟人感觉是跳到外面去。但是并不是这样的。
当我们调用这个url的时候,他会给我们返回数据,然后我们可以通过回调函数来获取这个数据。 // 逆地址解析
function _parseAddress(point) {
return new Promise((resolve) => {
// geoc.getLocation(point, (rs) => {
// resolve(rs.addressComponents)
// })
$window.renderReverse = function (rs) {
resolve(rs.result)
document.body.removeChild($script)
}
const $script = document.createElement('script')
$script.src = encodeURI(`https://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location=${point.lat},${point.lng}&output=json&pois=1&ak=${bMapAk}`)
document.body.appendChild($script)

})
}这个上面的代码中,我们通过定位获取到我们当前的百度坐标,传入函数。
随后异步加载script,加载完成后会返回一个json数据,并且调用我们的renderReverse回调函数。而我们这里使用了Promise,把状态设置成resolve,这里的难度其实不大。

但是问题的关键点在于,很多时候我们只会去web js的文档中去找解决方案。
而是百度地图的机制。现在jsonp用的越来越少了,看到这个代码有的时候会不是很懂。同样跟jsonp有关的还有白名单设置。以前的时候我一直不懂为啥要进行白名单设置,或者说这个白名单设置到底是怎么实现。因为我以为,用户在进行定位的时候,其实是像百度发送了一个请求,然后实现的定位。那么referrer永远是当前用户的ip,那么白名单就做不到限制了啊。
这里其实是因为我对这个的理解不对吧。用户进行定位的时候,其实访问的是加载好的js api脚本,而这个脚本的获取,是在服务器传递给用户的之前获取到的。
也就是说,当用户进入这个页面的时候,先向服务器进行请求,这个时候服务器想百度请求jsapi文件,随后把这个文件给用户,这样第一个referrer就永远是服务器的域名与地址,因此别人使用我们的key的时候,是从自己的域名或者ip上发送的请求,就获取不到api了。也就无法实现定位操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息