反向地理编码无法使用地理编码返回的坐标查找地址

时间:2015-06-29 11:31:58

标签: ruby-on-rails google-maps capybara semaphore rails-geocoder

我们在应用中使用了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"...

我想找到一种解决方案,它不需要在以前从未引起过问题的情况下改变精度。

1 个答案:

答案 0 :(得分:1)

刚观看了Geocoder代码,我找到了Geocoder.address()函数,我尝试了您的坐标,Geocoder.address('-33.9023262, 18.851008')返回了我Cork Oak Road, Stellenbosch。我也尝试了13个十进制纬度,它也适用

  • 如果您想从地址获取坐标,请使用Geocoder.search()
  • 如果您想从坐标获取地址,请使用Geocoder.address()

根据code available on GitHub

如果您需要有关该地点的完整信息,可以使用Geocoder.search(Geocoder.address('-33.9023262, 18.851008')),但这是向Google服务器发送的两个HTTP请求。

在我看来,最佳解决方案是来舍入到6位小数并且只发送一个请求,你只会失去 43.496 mm 的精度。

您必须在绝对精度或发送两个HTTP请求之间进行选择。