反向地理编码无法使用地理编码返回的坐标找到地址
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()
如果您想要关于该地点的完整信息,您可以使用 Geocoder.search(Geocoder.address('-33.9023262, 18.851008'))
,但它是发送到 Google 服务器的两个 HTTP 请求。
在我看来,最佳解决方案是四舍五入到 6 位小数并且只发送一个请求,你只会损失 43.496 mm 的精度.
您必须在绝对精度或发送两个 HTTP 请求之间做出选择。
我们在我们的应用程序中使用 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()
如果您想要关于该地点的完整信息,您可以使用 Geocoder.search(Geocoder.address('-33.9023262, 18.851008'))
,但它是发送到 Google 服务器的两个 HTTP 请求。
在我看来,最佳解决方案是四舍五入到 6 位小数并且只发送一个请求,你只会损失 43.496 mm 的精度.
您必须在绝对精度或发送两个 HTTP 请求之间做出选择。