Ruby client for the Google Distance Matrix API
Bài đăng này đã không được cập nhật trong 5 năm
Ruby client for the Google Distance Matrix API
Để nối tiếp bài tìm hiểu trước của mình về GoogleMaps (các bạn có thể xem tại đây), nay mình tiếp tục tìm hiểu về một service của google maps - GoogleDistanceMatrix.
Thư viện này tạo ra distance matrix API của google dễ dàng để làm việc, cho phép người dùng thiết lập nhiều điểm gốc và nhiều điểm đích và kéo được distance matrix từ Google.
Chỉ 1 lần bạn có được matrix bạn có thể có được tất cả các routes từ 1 điểm gốc đã cho hoặc tới một điểm đích.
Matrix này cũng có thể được sử dụng như một bộ dữ liệu cho vấn đề "traveling salesman", nhưng để giải quyết nó bạn có thể xem tại .
Bây giờ chúng ta sẽ đi đến phần cài đặt.
Installation
Thêm gem sau vào Gemfile của bạn: gem 'google_distance_matrix'
Và sau đó chạy lệnh: bundle
Hoặc cũng có thể sử dụng dòng lệnh sau để cài đặt gem trên:
gem install google_distance_matrix
Configuration
Cấu hình được thực hiện trực tiếp trên matrix hoặc thông qua GoogleDistanceMatrix.configure_defaults.
Rút gọn URL bằng tọa độ được mã hóa
Thay vì các giá trị lat, lng trong URL nó có thể sử dụng bộ tọa độ được mã hóa bằng thuật toán Encoded Polyline Algorithm. Điều này thực sự hữu ích nếu bạn có số lượng lớn các điểm gốc (origin), bởi vì url sẽ ngắn hơn đáng kể khi sử dụng mã hóa đa đường.
GoogleDistanceMatrix.configure_defaults do |config|
config.use_encoded_polylines = true
end
Request Cache
Đưa ra giới hạn của Googles về dịch vụ bạn có thể cần cache requests (lưu trữ các yêu cầu). Điều này được thực hiện bằng cách đơn giản sử dụng URL như cache keys. Chúng ta sử dụng giao diện mặc định ActiveSupport::Cache::Store để cấu hình lại
GoogleDistanceMatrix.configure_defaults do |config|
config.cache = ActiveSupport::Cache.lookup_store :your_store, {
expires_in: 12.hours
# ..or other options you like for your store
}
end
Example
Thiết lập một matrix để làm việc
matrix = GoogleDistanceMatrix::Matrix.new
Nó sẽ sinh ra 1 matrix có dạng như sau:
Tạo một vài địa để để sử dụng như origins hoặc destinations cho matrix
origin = GoogleDistanceMatrix::Place.new lng: -31.9548767, lat: 115.8604619
origin_address = GoogleDistanceMatrix::Place.new address: "Perth Town Hall, Hay St & Barrack St, Perth WA 6000, Australia"
destination_address = GoogleDistanceMatrix::Place.new address: "Parliament House, Harvest Terrace, West Perth WA 6005, Australia"
destination_origin = GoogleDistanceMatrix::Place.new lng:31.9517177, lat: 115.8470932
Thêm các place vào matrix data
matrix.origins << origin << origin_address
matrix.destinations << destination_origin << destination_address
Có thể thêm một vài config
matrix.configure do |config|
config.mode = 'driving'
config.avoid = 'tolls'
#To build signed URLs to use with a Google Business account.
config.google_business_api_client_id = "123"
config.google_business_api_private_key = "your-secret-key"
#If you have an API key, you can specify that as well.
config.google_api_key = "YOUR_API_KEY"
end
Để xem dữ liệu của matrix sử dụng câu lệnh matrix.data
Nó là một mảng đa chiều. Các hàng là các giá trị theo gốc. Mỗi hàng phản hồi tới 1 điểm gốc và mỗi phần tử bên trong là một cặp origin-destination.
Truy vấn với matrix
Trả ra một mảng của Google::DistanceMatrix::Route
với tất cả các origin hoặc destination được đưa vào
matrix.routes_for dest_address
Trả về Google::DistanceMatrix::Route
with dữ liệu đưa vào là origin vào destination cụ thể
matrix.route_for origin: lat_lng, destination: dest_address
ví dụ:
#Returns the shortest route to given destination, either by distance or duration
matrix.shortest_route_by_distance_to(dest_address)
matrix.shortest_route_by_duration_to(dest_address)
Ví dụ:
#If your matrix is for driving and you provided a departure_time all Route objects within
#the matrix will have duration_in_traffic_in_seconds. We can query the matrix for this data as well:
matrix.shortest_route_by_duration_in_traffic_to(dest_address)
Nguồn tham khảo: https://github.com/Skalar/google_distance_matrix#shorting-the-url-using-encoded-coordinates
Các bạn có thể đọc thêm tại: https://developers.google.com/maps/documentation/distance-matrix/intro
Bài tìm hiểu còn nhiều thiếu sót rất mong nhận được góp ý của các bạn (bow).
All rights reserved