Mã hóa địa lý là quá trình chuyển đổi địa chỉ ("1600 Amphitheatre Parkway, Mountain View, CA") sang toạ độ địa lý (37.423021, -122.083739), mà bạn có thể sử 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ã hóa địa lý phía máy khách, được thực thi trong trình duyệt, thường để phản hồi hành động của người dùng. API JavaScript cho Maps cung cấp các lớp giúp bạn tạo yêu cầu. Phương pháp này được mô tả trong tài liệu về API JavaScript cho Maps.
- Mã hóa đị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 máy chủ của Google để mã hóa. API mã hóa đị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ủ. Phương thức mã hóa địa lý phía máy chủ được mô tả trong tài liệu về API mã hóa địa lý.
Ví dụ về mã hóa địa lý phía máy khách và phía máy chủ
Dưới đây là ví dụ về phương thức mã hóa địa lý phía máy khách. Quy trình này sẽ lấy địa chỉ, mã hóa địa lý địa chỉ đó, di chuyển trung tâm bản đồ đến vị trí đó và thêm điểm đánh dấu bản đồ vào đó:
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 }); } });
Để xem thêm ví dụ, hãy xem tài liệu về API JavaScript cho Maps.
Sau đây là một ví dụ về cách 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ã hóa 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ã hóa địa lý và thư viện ứng dụng cho Python và các ngôn ngữ khác.
Hạn mức và cân nhắc chi phí
Chi phí, hạn mức và hạn mức về mã hóa địa lý thúc đẩy các chiến lược được nêu trong tài liệu này.
Chi phí
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ý, dù ở phía máy khách hay trình duyệt 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 xem xét tăng hạn mức hằng ngày của bạn.
Giới hạn số lần gọi
Dịch vụ mã hoá địa lý có giới hạn là 50 QPS (truy vấn mỗi giây), đượ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ã hóa địa lý phía máy khách ở 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 của bạn thực hiện các yêu cầu cùng một lúc (ví dụ: tất cả ở cùng một giây của mỗi phút). Để tránh điều này, hãy cân nhắc một trong những điều sau:
- Đưa khoảng thời gian ngẫu nhiên vào yêu cầu của bạn (dao động). Hãy đảm bảo rằng các yêu cầu là ngẫu nhiên trên toàn bộ cơ sở người dùng.
- Nếu bạn phát triển Android, hãy sử dụng báo thức lặp lại không chính xác.
- Nếu bạn phát triển Android, hãy chọn một chiến lược vị trí phù hợp.
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.
Trường hợp sử dụng tính năng mã hóa địa lý phía máy khách
Câu trả lời ngắn gọn là "hầu như luôn luôn." Lý do là:
- Yêu cầu và phản hồi phía máy khách sẽ cung cấp trải nghiệm nhanh hơn, tương tác hơn cho người dùng.
- 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ã hóa địa lý: ngôn ngữ người dùng, khu vực và khung nhìn.
Cụ thể, mã hoá địa lý phía máy khách là tốt nhất khi mã hoá địa chỉ dựa trên hoạt động đầu vào của người dùng.
Có hai cấu trúc cơ bản để mã hoá địa lý phía máy khách:
- Mã hoá đị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 sử dụng mã hoá địa lý để tạo đ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 bộ mã hóa đị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 giúp giảm tải cho máy chủ của bạn.
- Mã hoá địa lý trong trình duyệt rồi gửi đến máy chủ. 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á mã ứng dụng 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ủ 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. Việc này cho phép bạn tuỳ chỉnh phản hồi dựa trên dữ liệu của riêng mình.
Trường hợp sử dụng tính năng mã hóa địa lý phía máy chủ
Tính năng mã hóa địa lý phía máy chủ được sử dụng tốt nhất cho các ứng dụng yêu cầu bạn mã hoá địa chỉ mà không cần dữ liệu đầu vào 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 dữ liệu do người dùng nhập. Chẳng hạn, nếu bạn có một nhóm địa chỉ cố định, hữu hạn và đã biết cần mã hóa địa lý. Tính năng mã hoá địa lý phía máy chủ cũng có thể giúp ích cho việc sao lưu khi tính năng mã hóa địa lý phía máy khách không hoạt động.
Một số lo ngại có thể xảy ra là độ trễ tăng lên không cần thiết đối với người dùng, và kết quả mã hóa đị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.