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

Reverse geocode can't find address using coordinates returned by geocode

我们在我们的应用程序中使用 Geocoder gem。在测试中,我们使用以下地址:

4 Cork Oak Rd, Welgevonden, Stellenbosch

对其进行地理编码 returns 以下坐标:

[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']}")
=> []

什么给了?!

据我所知 tell/remember,这个问题直到今天才出现。它在我的机器上每次都会中断,但在 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"...

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

刚刚看了 Geocoder 代码,我找到了 Geocoder.address() 函数,我尝试了你的坐标,Geocoder.address('-33.9023262, 18.851008') returns 我 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 请求之间做出选择。