Hello, 我是 Weber,一位工程師,斜槓鼓手與行銷顧問。
今天是每日一套件的第 19 天,繼續跟著我一起認識 Rails 開發好用的 30 個套件,建立出自己的常用套件庫吧!
今天來介紹一個強大的 Ruby 套件 - Geocoder,它用於處理地理位置,讓你能在 Rails 中輕鬆使用地理位置資訊。它可以將地址轉換為經緯度坐標,或者反轉將經緯度坐標轉換為地址,並提供了各種有用的功能來處理位置資料。
它還有一些進階的功能,包含:
Custom Geocoding Services 自定地圖服務商:Geocoder 還可以讓你選擇使用不同的 API provider,如 Google Maps、Bing Maps 等。
Multiple Geocoding Fields 多地理座標轉換:如果你需要處理不同類型的地理位置資料,也可以同時處理多筆位置資料。
Map Integration 地圖整合:Geocoder 可以與地圖庫,如Google Maps、Leaflet等整合,顯示地理數據、位置標記和路線等。
Internationalization Support 國際化:可以支援不同國家和地區的地址,雖然我還沒實作過,不過這感覺很猛~
起手式:
bundle add geocoder
接下來,在 Model 中加入以下:
(假設 Model 名 "Location")
class Location < ApplicationRecord
geocoded_by :address
after_validation :geocode, if: :will_save_change_to_address?
end
在 Location 有一個為 address
,用於存地址資料。geocoded_by
是 Geocoder 的方法,對 :address
進行座標轉換。after_validation
在地址更改後執行座標轉換。
接著就可以使用啦,我提供一些範例:
location = Location.new(address: '123 Main St, City, Country')
location.save
它會自動將地址轉換為經緯度坐標,並將它們存在 :latitude
和 :longitude
中。
location = Location.find(1)
address = location.reverse_geocode
location1 = Location.find(1)
location2 = Location.find(2)
distance = location1.distance_to(location2)
這真的很扯,計算兩個地點之間的距離,我有點想不透怎麼搞的。
nearby_locations = Location.near('New York, NY', 10)
上一個功能可以,這個相對就看起來合理了,上面翻譯:
找尋距離紐約市不超過 10 英里的地點。
Geocoder 還有很多功能,要用地圖功能的人有福了。
好了,我們明天見!