iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
Software Development

Rails 開發,每日一套件介紹! 系列 第 19

Day 19 : 座標地圖智慧王 - Geocoder

  • 分享至 

  • xImage
  •  

Hello, 我是 Weber,一位工程師,斜槓鼓手與行銷顧問。
今天是每日一套件的第 19 天,繼續跟著我一起認識 Rails 開發好用的 30 個套件,建立出自己的常用套件庫吧!

Day 19: Geocoder

今天來介紹一個強大的 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 還有很多功能,要用地圖功能的人有福了。
好了,我們明天見!


上一篇
Day 18: 集會員系統之大成 - Devise
下一篇
Day 20: 探索無縫身份驗證新世界 - Omniauth
系列文
Rails 開發,每日一套件介紹! 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言