![](/img/trans.png)
[英]Ruby on rails geocoder gem reverse-geocoding produces significant error
[英]Ruby on Rails - Geocoder Better Forward and Reverse Geocoding
我正在使用Ruby Geocoder gem同時執行正向和反向地理編碼,但遇到了一些問題。 我有一個包含經度和緯度字段以及地址字段的位置模型。 在控制器中,我允許用戶以兩種不同的方式創建位置,第一種是通過提供地址並讓 Geocoder 計算出經度和緯度,第二種是通過提供坐標並讓 Geocoder 確定地址。 下面是 Locations 模型中執行這些任務的代碼:
class Location < ActiveRecord::Base
validates :name, :presence =>true
geocoded_by :address
reverse_geocoded_by :latitude, :longitude
after_validation :geocode, :reverse_geocode
end
此代碼直接取自 Ruby Geocoder gem 網站,但效果不佳。 當我使用地址創建位置時,它似乎仍會執行 reverse_geocode。 這會從原始地址生成經度和緯度,然后重新生成通常不正確的地址。 我是 Ruby on Rails 的新手,想知道是否有更好的方法來做到這一點。 也許有一種方法可以使用after_validation
回調,並且有條件僅在提供地址時才進行地理編碼,並在提供坐標時才進行反向地理編碼? 謝謝您的幫助。
在這個鏈接中有一個關於這個主題的很好的教程: Geocoder: Display Maps and Find Places in Rails
使geocoder
和reverse_geocoder
在同一模型中工作的一點是:
[...]
after_validation :geocode, if: ->(obj){ obj.address.present? and obj.address_changed? }
after_validation :reverse_geocode, unless: ->(obj) { obj.address.present? },
if: ->(obj){ obj.latitude.present? and obj.latitude_changed? and obj.longitude.present? and obj.longitude_changed? }
[...]
如果不提供或修改坐標並執行正向和反向地理編碼,它解決了反向地理編碼的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.