我们在应用中使用了Geocoder gem。在测试中,我们使用以下地址:
4 Cork Oak Rd,Welgevonden,Stellenbosch
对其进行地理编码会返回以下坐标:
[39] pry(main)> coord = Geocoder.search("4 Cork Oak Rd, Welgevonden, Stellenbosch")[0].geometry["location"]
=> {"lat"=>-33.9023262, "lng"=>18.851008}
但是当我反转地理编码那些确切的坐标时,我什么都没得到:
[46] pry(main)> Geocoder.search("#{coord['lat']}, #{coord['lng']}")
=> []
是什么给了什么?!
据我所知/记得,这个问题只发生在今天。它在我的机器上每次都会中断,但它在Semaphore上没有失败过一次。自周五以来没有发生任何配置变化。
如果我将坐标四舍五入到小数点后6位,我会得到所需的结果:
[55] pry(main)> Geocoder.search("#{coord['lat'].round(6)}, #{coord['lng'].round(6)}")
=> [#<Geocoder::Result::Google:0x0000011738bdd8
@cache_hit=true,
@data=
{"address_components"=>
[{"long_name"=>"Cork Oak Road"...
我想找到一种解决方案,它不需要在以前从未引起过问题的情况下改变精度。
答案 0 :(得分:1)
刚观看了Geocoder代码,我找到了Geocoder.address()
函数,我尝试了您的坐标,Geocoder.address('-33.9023262, 18.851008')
返回了我Cork Oak Road, Stellenbosch
。我也尝试了13个十进制纬度,它也适用
Geocoder.search()
。Geocoder.address()
如果您需要有关该地点的完整信息,可以使用Geocoder.search(Geocoder.address('-33.9023262, 18.851008'))
,但这是向Google服务器发送的两个HTTP请求。
在我看来,最佳解决方案是来舍入到6位小数并且只发送一个请求,你只会失去 43.496 mm 的精度。
您必须在绝对精度或发送两个HTTP请求之间进行选择。