簡體   English   中英

Ruby on Rails - Geocoder 更好的正向和反向地理編碼

[英]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

使geocoderreverse_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM