Tối ưu hoá việc sử dụng hạn mức khi mã hoá địa lý

Mã hoá địa lý là quá trình chuyển đổi địa chỉ ("1600 Amphitheatre Parkway, Mountain View, CA") thành toạ độ địa lý (37.423021, -122.083739) mà bạn có thể dùng để đặt điểm đánh dấu hoặc định vị bản đồ. API Nền tảng Google Maps cung cấp hai phương pháp mã hóa địa lý:

  • Mã hoá địa lý phía máy khách, được thực thi trong trình duyệt, thường là để phản hồi hành động của người dùng. API JavaScript của Maps cung cấp các lớp đưa ra yêu cầu cho bạn. Phương pháp này được mô tả trong tài liệu về API JavaScript của Maps.
  • Mã hoá địa lý phía máy chủ HTTP, cho phép máy chủ của bạn truy vấn trực tiếp các máy chủ của Google để tìm các mã địa lý. API mã hoá địa lý là dịch vụ web cung cấp chức năng này. Thông thường, bạn tích hợp dịch vụ này với mã khác đang chạy phía máy chủ. Mã hoá địa lý phía máy chủ được mô tả trong tài liệu về API mã hoá địa lý.

Ví dụ về mã hoá địa lý phía máy khách và phía máy chủ

Dưới đây là một mẫu mã hoá địa lý phía máy khách lấy một địa chỉ, mã hoá địa lý cho địa chỉ đó, di chuyển trung tâm của bản đồ đến vị trí đó và thêm một điểm đánh dấu bản đồ ở đó:

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

Để biết thêm ví dụ, hãy xem tài liệu về API JavaScript của Maps.

Dưới đây là một ví dụ về cách sử dụng Python để thực hiện yêu cầu mã hoá địa lý phía máy chủ:

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)

jsongeocode = response.read()

Thao tác này sẽ tạo ra một đối tượng JSON có nội dung sau:

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "California",
      "short_name": "CA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

Bộ mã hoá địa lý phía máy chủ cũng cung cấp một định dạng XML thay thế cho JSON. Để biết thêm ví dụ, hãy xem tài liệu về API mã hoá địa lýthư viện ứng dụng dành cho Python cũng như các ngôn ngữ khác.

Những điều cần cân nhắc về hạn mức và chi phí

Chi phí mã hoá địa lý, hạn mức và giới hạn tỷ lệ thúc đẩy các chiến lược được nêu trong tài liệu này.

Chi phí

Giới hạn hạn mức mỗi ngày (QPD) không còn được sử dụng cho các yêu cầu mã hóa địa lý. Thay vào đó, mỗi yêu cầu mã hoá địa lý, cho dù phía máy khách thông qua trình duyệt hay phía máy chủ thông qua dịch vụ web API mã hoá địa lý, đều được tính phí theo từng mức giá. Để quản lý chi phí sử dụng, hãy cân nhắc việc giới hạn hạn mức hằng ngày.

Giới hạn số lượng yêu cầu

Dịch vụ mã hoá địa lý có tốc độ giới hạn ở 3.000 QPM (truy vấn mỗi phút), được tính bằng tổng số truy vấn phía máy khách và phía máy chủ.

Khi chạy yêu cầu mã hoá địa lý phía máy khách tại các khoảng thời gian định kỳ, chẳng hạn như trong một ứng dụng dành cho thiết bị di động, yêu cầu của bạn có thể trả về lỗi nếu tất cả người dùng đang đưa ra yêu cầu cùng một lúc (ví dụ: tất cả đều ở cùng một giây mỗi phút). Để tránh điều này, hãy cân nhắc một trong những cách sau:

  • Đưa các khoảng thời gian ngẫu nhiên vào yêu cầu của bạn (gián đoạn). Đảm bảo các yêu cầu là ngẫu nhiên trên toàn bộ cơ sở người dùng của bạn.
  • Nếu bạn phát triển ứng dụng cho Android, hãy sử dụng chuông báo lặp lại không chính xác.
  • Nếu bạn phát triển ứng dụng cho Android, hãy chọn một chiến lược vị trí thích hợp.

Chức năng lưu vào bộ nhớ đệm

Xem Chính sách về API mã hoá địa lý về việc lưu vào bộ nhớ đệm.

Khi nào sử dụng mã hóa địa lý phía máy khách

Câu trả lời ngắn là "hầu như luôn luôn". Lý do là:

  • Yêu cầu và phản hồi từ phía máy khách mang đến cho người dùng trải nghiệm tương tác nhanh hơn và tương tác nhiều hơn.
  • Yêu cầu phía máy khách có thể bao gồm thông tin giúp cải thiện chất lượng mã hoá địa lý: ngôn ngữ người dùng, khu vực và khung nhìn.

Cụ thể, tính năng mã hoá địa lý phía máy khách hoạt động hiệu quả nhất khi mã hoá địa lý địa chỉ dựa trên thông tin nhập từ người dùng.

Có hai cấu trúc cơ bản cho mã hoá địa lý phía máy khách:

  • Thực hiện mã hóa địa lý và hiển thị hoàn toàn trong trình duyệt. Ví dụ: người dùng nhập một địa chỉ trên trang của bạn. Ứng dụng của bạn mã hoá địa lý mã đó. Sau đó, trang của bạn dùng mã địa lý để tạo một điểm đánh dấu trên bản đồ. Hoặc ứng dụng của bạn thực hiện một số phân tích đơn giản bằng cách sử dụng mã địa lý. Không có dữ liệu nào được gửi đến máy chủ của bạn. Điều này làm giảm tải trên máy chủ của bạn.
  • Thực hiện mã hoá địa lý trong trình duyệt rồi gửi mã đó đến máy chủ. Ví dụ: người dùng nhập địa chỉ trên trang của bạn. Ứng dụng của bạn mã hoá địa lý mã đó trong trình duyệt. Sau đó, ứng dụng sẽ gửi dữ liệu đến máy chủ của bạn. Máy chủ sẽ phản hồi bằng một số dữ liệu, chẳng hạn như các địa điểm yêu thích ở gần. Điều này cho phép bạn tuỳ chỉnh câu trả lời dựa trên dữ liệu của riêng mình.

Thời điểm sử dụng mã hóa địa lý phía máy chủ

Mã hoá địa lý phía máy chủ phù hợp nhất với các ứng dụng yêu cầu bạn mã hoá địa lý địa chỉ mà không cần dữ liệu từ ứng dụng. Một ví dụ phổ biến là khi bạn nhận được một tập dữ liệu độc lập với hoạt động đầu vào của người dùng, chẳng hạn như khi bạn có một tập hợp địa chỉ cố định, hữu hạn và đã biết cần mã hoá địa lý. Mã hoá địa lý phía máy chủ cũng có thể hữu ích như một phương thức dự phòng khi không mã hoá địa lý phía máy khách.

Một số lo ngại có thể xảy ra là sự gia tăng độ trễ không cần thiết cho người dùng và kết quả mã hoá địa lý có chất lượng thấp hơn phía máy khách vì có ít thông tin hơn trong yêu cầu.