Tổng quan
Các hàm trong Thư viện địa điểm, API JavaScript của Maps cho phép ứng dụng của bạn tìm kiếm địa điểm (được xác định trong API này là cơ sở, vị trí địa lý hoặc điểm yêu thích nổi bật) có trong một khu vực xác định, chẳng hạn như ranh giới của bản đồ hoặc xung quanh một điểm cố định.
Places API cung cấp tính năng tự động hoàn thành mà bạn có thể sử dụng để cung cấp cho ứng dụng của mình hành vi tìm kiếm trước khi nhập của trường tìm kiếm trên Google Maps. Khi người dùng bắt đầu nhập địa chỉ, tính năng tự động hoàn thành sẽ điền phần còn lại. Để biết thêm thông tin, hãy xem tài liệu về tính năng tự động hoàn thành.
Bắt đầu
Nếu bạn chưa quen với Maps JavaScript API hoặc JavaScript, bạn nên xem lại JavaScript và Lấy khoá API trước khi bắt đầu.
Tải thư viện
Dịch vụ Địa điểm là một thư viện độc lập, tách biệt với mã API JavaScript cho Maps chính. Để sử dụng chức năng có trong thư viện này, trước tiên, bạn phải tải thư viện bằng tham số libraries trong URL khởi động API Maps:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=places&callback=initMap">
</script>Hãy xem phần Tổng quan về thư viện để biết thêm thông tin.
Thêm Places API (Phiên bản cũ) vào danh sách các quy tắc hạn chế đối với khoá API
Việc áp dụng các quy tắc hạn chế về API cho khoá sẽ giới hạn việc sử dụng khoá API cho một hoặc nhiều API hoặc SDK. Các yêu cầu gửi đến một API hoặc SDK liên kết với khoá API sẽ được xử lý. Các yêu cầu đến một API hoặc SDK không liên kết với khoá API sẽ không thành công. Cách hạn chế khoá API để sử dụng với Thư viện địa điểm, API JavaScript của Maps:- Chuyển đến Google Cloud Console.
- Nhấp vào trình đơn thả xuống của dự án rồi chọn dự án chứa khoá API mà bạn muốn bảo mật.
- Nhấp vào nút trình đơn
rồi chọn Google Maps Platform > Thông tin xác thực.
- Trên trang Thông tin xác thực, hãy nhấp vào tên của khoá API mà bạn muốn bảo mật.
- Trên trang Restrict and rename API key (Hạn chế và đổi tên khoá API), hãy đặt các quy tắc hạn chế:
- Các quy định hạn chế đối với API
- Chọn Restrict key (Hạn chế cho khoá).
- Nhấp vào Chọn API rồi chọn cả Maps JavaScript API và Places API (Cũ).
(Nếu một trong hai API không có trong danh sách, bạn cần bật API đó.)
- Nhấp vào LƯU.
Hạn mức sử dụng và chính sách
Hạn mức
Thư viện Địa điểm dùng chung hạn mức sử dụng với Places API như mô tả trong tài liệu về Giới hạn sử dụng cho Places API.
Chính sách
Việc sử dụng Thư viện địa điểm, Maps JavaScript API phải tuân thủ các chính sách được mô tả cho Places API.
Tìm kiếm địa điểm
Với dịch vụ Địa điểm, bạn có thể thực hiện các loại tìm kiếm sau:
- Tìm địa điểm theo cụm từ tìm kiếm trả về một địa điểm dựa trên cụm từ tìm kiếm dạng văn bản (ví dụ: tên hoặc địa chỉ của một địa điểm).
- Tìm địa điểm theo số điện thoại trả về một địa điểm dựa trên số điện thoại.
- Nearby Search (Phiên bản cũ) trả về danh sách các địa điểm lân cận dựa trên vị trí của người dùng.
- Tìm kiếm văn bản (Phiên bản cũ) trả về danh sách các địa điểm lân cận dựa trên một chuỗi tìm kiếm, ví dụ: "Pizza".
- Yêu cầu về Place Details (Phiên bản cũ) trả về thông tin chi tiết hơn về một địa điểm cụ thể, bao gồm cả bài đánh giá của người dùng.
Thông tin được trả về có thể bao gồm các cơ sở (chẳng hạn như nhà hàng, cửa hàng và văn phòng) cũng như kết quả "mã hoá địa lý" (cho biết địa chỉ, khu vực hành chính như thị trấn và thành phố, cũng như các địa điểm yêu thích khác).
Yêu cầu Tìm địa điểm (Cũ)
Yêu cầu Tìm địa điểm cho phép bạn tìm một địa điểm bằng cụm từ tìm kiếm dạng văn bản hoặc số điện thoại. Có hai loại yêu cầu Tìm địa điểm:
Tìm địa điểm theo cụm từ tìm kiếm
Find Place from Query lấy dữ liệu đầu vào dạng văn bản và trả về một địa điểm. Thông tin đầu vào có thể là bất kỳ loại dữ liệu Địa điểm nào, chẳng hạn như tên hoặc địa chỉ doanh nghiệp. Để tạo yêu cầu Tìm địa điểm từ cụm từ tìm kiếm, hãy gọi phương thức findPlaceFromQuery() của PlacesService. Phương thức này nhận các tham số sau:
query(bắt buộc) Chuỗi văn bản cần tìm kiếm, ví dụ: "nhà hàng" hoặc "123 Main Street". Đây phải là tên địa điểm, địa chỉ hoặc danh mục cơ sở. Bất kỳ loại dữ liệu đầu vào nào khác đều có thể tạo ra lỗi và không đảm bảo trả về kết quả hợp lệ. Places API sẽ trả về các kết quả phù hợp dựa trên chuỗi này và sắp xếp kết quả dựa trên mức độ liên quan mà API nhận thấy.fields(bắt buộc) Một hoặc nhiều trường chỉ định loại dữ liệu Địa điểm cần trả về.locationBias(không bắt buộc) Toạ độ xác định khu vực cần tìm kiếm. Đây có thể là một trong những trạng thái sau:- Một tập hợp toạ độ vĩ độ/kinh độ được chỉ định dưới dạng LatLngLiteral hoặc đối tượng LatLng
- Ranh giới hình chữ nhật (hai cặp vĩ độ/kinh độ hoặc một đối tượng LatLngBounds)
- Bán kính (tính bằng mét) có tâm là một vĩ độ/kinh độ
Bạn cũng phải truyền một phương thức gọi lại đến findPlaceFromQuery() để xử lý đối tượng kết quả và phản hồi google.maps.places.PlacesServiceStatus.
Ví dụ sau đây cho thấy lệnh gọi đến findPlaceFromQuery(), tìm kiếm "Bảo tàng Nghệ thuật Đương đại Úc" và bao gồm các trường name và geometry.
var map; var service; var infowindow; function initMap() { var sydney = new google.maps.LatLng(-33.867, 151.195); infowindow = new google.maps.InfoWindow(); map = new google.maps.Map( document.getElementById('map'), {center: sydney, zoom: 15}); var request = { query: 'Museum of Contemporary Art Australia', fields: ['name', 'geometry'], }; var service = new google.maps.places.PlacesService(map); service.findPlaceFromQuery(request, function(results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } map.setCenter(results[0].geometry.location); } }); }
Tìm địa điểm theo số điện thoại
Tính năng Tìm địa điểm theo số điện thoại sẽ lấy số điện thoại và trả về một địa điểm. Để
gửi yêu cầu Tìm địa điểm theo số điện thoại, hãy gọi phương thức
findPlaceFromPhoneNumber() của PlacesService. Phương thức này nhận các tham số sau:
phoneNumber(bắt buộc) Số điện thoại, theo định dạng E.164.fields(bắt buộc) Một hoặc nhiều trường chỉ định loại dữ liệu Địa điểm cần trả về.locationBias(không bắt buộc) Toạ độ xác định khu vực cần tìm kiếm. Đây có thể là một trong những trạng thái sau:- Một tập hợp toạ độ vĩ độ/kinh độ được chỉ định dưới dạng LatLngLiteral hoặc đối tượng LatLng
- Ranh giới hình chữ nhật (bốn điểm vĩ độ/kinh độ hoặc một đối tượng LatLngBounds)
- Bán kính (tính bằng mét) có tâm là một vĩ độ/kinh độ
Bạn cũng phải truyền một phương thức gọi lại đến findPlaceFromPhoneNumber() để xử lý đối tượng kết quả và phản hồi google.maps.places.PlacesServiceStatus.
Trường (phương thức Tìm địa điểm)
Sử dụng tham số fields để chỉ định một mảng các loại dữ liệu địa điểm cần trả về.
Ví dụ: fields: ['formatted_address', 'opening_hours', 'geometry'].
Sử dụng dấu chấm khi chỉ định giá trị phức hợp. Ví dụ: opening_hours.weekday_text.
Các trường tương ứng với kết quả Tìm kiếm địa điểm và được chia thành ba danh mục thanh toán: Cơ bản, Thông tin liên hệ và Bầu không khí. Các trường cơ bản được tính phí theo mức giá cơ bản và không phát sinh thêm phí. Các trường Contact và Atmosphere được tính phí theo mức giá cao hơn. Hãy xem bảng giá để biết thêm thông tin. Thông tin ghi nhận tác giả (html_attributions) luôn được trả về trong mỗi lệnh gọi, bất kể trường này có được yêu cầu hay không.
Cơ bản
Danh mục Cơ bản bao gồm các trường sau:
business_status, formatted_address, geometry,
icon,icon_mask_base_uri, icon_background_color,
name, permanently_closed (không dùng nữa),
photos, place_id, plus_code, types
Thông tin liên hệ
Danh mục Liên hệ bao gồm trường sau:opening_hours (không dùng nữa trong Thư viện địa điểm, API JavaScript cho Maps. Sử dụng yêu cầu Place Details để nhận kết quả
opening_hours).
Không gian
Danh mục Bầu không khí bao gồm các trường sau:price_level, rating, user_ratings_total
Mỗi phương thức findPlaceFromQuery() và findPlaceFromPhoneNumber() đều lấy cùng một tập hợp trường và có thể trả về cùng một trường trong các phản hồi tương ứng.
Đặt độ lệch vị trí (phương thức Tìm địa điểm)
Sử dụng tham số locationBias để đặt ưu tiên cho kết quả của tính năng Tìm địa điểm trong một khu vực cụ thể. Bạn có thể đặt locationBias theo các cách sau:
Ưu tiên kết quả cho một khu vực cụ thể:
locationBias: {lat: 37.402105, lng: -122.081974}
Xác định một vùng hình chữ nhật để tìm kiếm:
locationBias: {north: 37.41, south: 37.40, east: -122.08, west: -122.09}
Bạn cũng có thể sử dụng LatLngBounds.
Xác định bán kính tìm kiếm (tính bằng mét), lấy một khu vực cụ thể làm tâm:
locationBias: {radius: 100, center: {lat: 37.402105, lng: -122.081974}}
Yêu cầu Nearby Search
Nearby Search cho phép bạn tìm kiếm địa điểm trong một khu vực cụ thể theo từ khoá hoặc loại. Yêu cầu Nearby Search phải luôn bao gồm một vị trí. Bạn có thể chỉ định vị trí này theo một trong hai cách:
-
LatLngBounds. - một khu vực hình tròn được xác định bằng cách kết hợp thuộc tính
location(chỉ định tâm của hình tròn dưới dạng đối tượngLatLng) và bán kính (đo bằng mét).
Tính năng Nearby Search được bắt đầu bằng lệnh gọi đến phương thức nearbySearch() của
PlacesService. Phương thức này sẽ trả về một mảng đối tượng
PlaceResult. Xin lưu ý rằng phương thức nearbySearch() thay thế phương thức search() kể từ phiên bản 3.9.
service = new google.maps.places.PlacesService(map); service.nearbySearch(request, callback);
Phương thức này nhận một yêu cầu có các trường sau:
- Một trong hai điều kiện sau:
bounds, phải là một đối tượnggoogle.maps.LatLngBoundsxác định khu vực tìm kiếm hình chữ nhật. Khoảng cách đường chéo tối đa được hỗ trợ cho khu vực ranh giới là khoảng 100.000 mét.locationvàradius; tham số đầu tiên nhận một đối tượnggoogle.maps.LatLngvà tham số thứ hai nhận một số nguyên đơn giản, đại diện cho bán kính của vòng tròn tính bằng mét. Bán kính tối đa được phép là 50.000 mét. Lưu ý rằng khirankByđược đặt thành DISTANCE, bạn phải chỉ địnhlocationnhưng không thể chỉ địnhradiushoặcbounds.
keyword(không bắt buộc) — Một cụm từ cần so khớp với tất cả các trường hiện có, bao gồm nhưng không giới hạn ở tên, loại và địa chỉ, cũng như bài đánh giá của khách hàng và nội dung của bên thứ ba khác.minPriceLevelvàmaxPriceLevel(không bắt buộc) — Giới hạn kết quả chỉ cho những địa điểm trong phạm vi đã chỉ định. Giá trị hợp lệ nằm trong khoảng từ 0 (giá phải chăng nhất) đến 4 (giá đắt nhất).nameKhông dùng nữa. Tương đương vớikeyword. Các giá trị trong trường này được kết hợp với các giá trị trong trườngkeywordvà được truyền dưới dạng một phần của cùng một chuỗi tìm kiếm.openNow(không bắt buộc) — Giá trị boolean cho biết dịch vụ Địa điểm chỉ nên trả về những địa điểm đang mở cửa kinh doanh tại thời điểm gửi truy vấn. Những địa điểm không chỉ định giờ mở cửa trong cơ sở dữ liệu của Google Địa điểm sẽ không được trả về nếu bạn đưa tham số này vào truy vấn của mình. Việc đặtopenNowthànhfalsekhông có hiệu lực.rankBy(không bắt buộc) — Chỉ định thứ tự liệt kê kết quả. Các giá trị có thể sử dụng là:google.maps.places.RankBy.PROMINENCE(mặc định). Lựa chọn này sắp xếp kết quả dựa trên mức độ quan trọng. Thứ hạng sẽ ưu tiên những địa điểm nổi bật trong bán kính đã đặt hơn là những địa điểm lân cận phù hợp nhưng ít nổi bật hơn. Mức độ nổi bật có thể chịu ảnh hưởng của thứ hạng của một địa điểm trong chỉ mục của Google, mức độ phổ biến trên toàn cầu và các yếu tố khác. Khi bạn chỉ địnhgoogle.maps.places.RankBy.PROMINENCE, tham sốradiuslà bắt buộc.google.maps.places.RankBy.DISTANCE. Tuỳ chọn này sắp xếp kết quả theo thứ tự tăng dần dựa trên khoảng cách từlocationđược chỉ định (bắt buộc). Xin lưu ý rằng bạn không thể chỉ địnhboundsvà/hoặcradiustuỳ chỉnh nếu bạn chỉ địnhRankBy.DISTANCE. Khi bạn chỉ địnhRankBy.DISTANCE, bạn phải cung cấp ít nhất một trong các giá trịkeyword,namehoặctype.
type– Giới hạn kết quả ở những địa điểm khớp với loại đã chỉ định. Bạn chỉ có thể chỉ định một loại (nếu bạn cung cấp nhiều loại, tất cả các loại sau mục đầu tiên sẽ bị bỏ qua). Xem danh sách các loại được hỗ trợ.
Bạn cũng phải truyền một phương thức gọi lại đến nearbySearch() để xử lý đối tượng kết quả và phản hồi google.maps.places.PlacesServiceStatus.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433, 151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, radius: 500, type: 'restaurant' }; service = new google.maps.places.PlacesService(map); service.nearbySearch(request, callback); } function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); } } }
Yêu cầu tìm kiếm văn bản
Dịch vụ Tìm kiếm bằng văn bản của Google Địa điểm là một dịch vụ web trả về thông tin về một nhóm địa điểm dựa trên một chuỗi, chẳng hạn như "pizza ở New York" hoặc "cửa hàng giày gần Ottawa". Dịch vụ này sẽ phản hồi bằng danh sách các địa điểm khớp với chuỗi văn bản và mọi độ lệch vị trí đã được đặt. Phản hồi tìm kiếm sẽ bao gồm danh sách các địa điểm. Bạn có thể gửi yêu cầu Chi tiết địa điểm để biết thêm thông tin về bất kỳ địa điểm nào trong phản hồi.
Tính năng Tìm kiếm văn bản được bắt đầu bằng lệnh gọi đến phương thức textSearch() của PlacesService.
service = new google.maps.places.PlacesService(map); service.textSearch(request, callback);
Phương thức này nhận một yêu cầu có các trường sau:
query(bắt buộc) Chuỗi văn bản cần tìm kiếm, ví dụ: "nhà hàng" hoặc "123 Phố Chính". Đây phải là tên địa điểm, địa chỉ hoặc danh mục cơ sở. Bất kỳ loại dữ liệu đầu vào nào khác đều có thể tạo ra lỗi và không đảm bảo trả về kết quả hợp lệ. Dịch vụ Địa điểm sẽ trả về các kết quả phù hợp dựa trên chuỗi này và sắp xếp kết quả dựa trên mức độ liên quan mà dịch vụ nhận thấy. Tham số này trở thành không bắt buộc nếu tham sốtypecũng được dùng trong yêu cầu tìm kiếm.- Không bắt buộc:
openNow— Giá trị boolean, cho biết dịch vụ Địa điểm chỉ nên trả về những địa điểm đang mở cửa kinh doanh tại thời điểm gửi truy vấn. Những địa điểm không chỉ định giờ mở cửa trong cơ sở dữ liệu của Google Địa điểm sẽ không được trả về nếu bạn đưa tham số này vào truy vấn của mình. Việc đặtopenNowthànhfalsekhông có hiệu lực.minPriceLevelvàmaxPriceLevel— Giới hạn kết quả chỉ cho những địa điểm trong mức giá được chỉ định. Giá trị hợp lệ nằm trong khoảng từ 0 (giá phải chăng nhất) đến 4 (giá đắt nhất).- Một trong hai điều kiện sau:
bounds, phải là một đối tượnggoogle.maps.LatLngBoundsxác định khu vực tìm kiếm hình chữ nhật. Khoảng cách đường chéo tối đa được hỗ trợ cho khu vực ranh giới là khoảng 100.000 mét.locationvàradius— Bạn có thể thiên vị kết quả cho một vòng tròn cụ thể bằng cách truyền tham sốlocationvàradius. Thao tác này sẽ hướng dẫn dịch vụ Địa điểm ưu tiên hiển thị kết quả trong vòng tròn đó. Kết quả bên ngoài khu vực đã xác định vẫn có thể xuất hiện. Vị trí lấy đối tượnggoogle.maps.LatLngvà bán kính lấy một số nguyên đơn giản, đại diện cho bán kính của vòng tròn tính bằng mét. Bán kính tối đa được phép là 50.000 mét.
type– Giới hạn kết quả ở những địa điểm khớp với loại đã chỉ định. Bạn chỉ có thể chỉ định một loại (nếu bạn cung cấp nhiều loại, tất cả các loại sau mục đầu tiên sẽ bị bỏ qua). Hãy xem danh sách các loại được hỗ trợ.
Bạn cũng phải truyền một phương thức gọi lại đến textSearch() để xử lý đối tượng kết quả và phản hồi google.maps.places.PlacesServiceStatus.
var map; var service; var infowindow; function initialize() { var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316); map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 15 }); var request = { location: pyrmont, radius: 500, query: 'restaurant' }; service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { var place = results[i]; createMarker(results[i]); } } }
Phản hồi tìm kiếm
Mã trạng thái
Đối tượng phản hồi PlacesServiceStatus chứa trạng thái của yêu cầu và có thể chứa thông tin gỡ lỗi để giúp bạn tìm ra lý do khiến yêu cầu về địa điểm không thành công. Các giá trị trạng thái có thể có là:
INVALID_REQUEST: Yêu cầu này không hợp lệ.OK: Phản hồi chứa kết quả hợp lệ.OVER_QUERY_LIMIT: Trang web đã vượt quá hạn mức yêu cầu.REQUEST_DENIED: Trang web không được phép sử dụng PlacesService.UNKNOWN_ERROR: Không thể xử lý yêu cầu PlacesService do lỗi phía máy chủ. Yêu cầu có thể thành công nếu bạn thử lại.ZERO_RESULTS: Không tìm thấy kết quả nào cho yêu cầu này.
Kết quả tìm kiếm địa điểm
Hàm findPlace(), nearbySearch() và textSearch() trả về một mảng đối tượng
PlaceResult.
Mỗi đối tượng PlaceResult có thể bao gồm các thuộc tính sau:
business_statuscho biết trạng thái hoạt động của địa điểm, nếu đó là một doanh nghiệp. Thuộc tính này có thể chứa một trong các giá trị sau:OPERATIONALCLOSED_TEMPORARILYCLOSED_PERMANENTLY
business_statussẽ không được trả về.formatted_addresslà một chuỗi chứa địa chỉ mà con người có thể đọc được của địa điểm này. Thuộc tínhformatted_addresschỉ được trả về cho Tìm kiếm văn bản.Địa chỉ này thường tương đương với địa chỉ bưu chính. Xin lưu ý rằng một số quốc gia, chẳng hạn như Vương quốc Anh, không cho phép phân phối địa chỉ bưu chính thực do các quy định hạn chế về việc cấp phép.
Địa chỉ được định dạng bao gồm một hoặc nhiều thành phần địa chỉ. Ví dụ: địa chỉ "111 8th Avenue, New York, NY" bao gồm các thành phần sau: "111" (số nhà), "8th Avenue" (tuyến đường), "New York" (thành phố) và "NY" (tiểu bang của Hoa Kỳ).
Đừng phân tích cú pháp địa chỉ được định dạng theo phương thức lập trình. Thay vào đó, bạn nên sử dụng các thành phần địa chỉ riêng lẻ mà phản hồi của API bao gồm ngoài trường địa chỉ được định dạng.
geometry: Thông tin liên quan đến hình học của địa điểm. Điều này bao gồm:locationcung cấp vĩ độ và kinh độ của địa điểm.viewportxác định khung nhìn ưu tiên trên bản đồ khi xem địa điểm này.
permanently_closed(không dùng nữa) là một cờ boolean cho biết liệu địa điểm đó đã đóng cửa vĩnh viễn hay tạm thời (giá trịtrue). Đừng sử dụngpermanently_closed. Thay vào đó, hãy sử dụngbusiness_statusđể biết trạng thái hoạt động của doanh nghiệp.plus_code(xem Mã vị trí mở và mã cộng) là một tham chiếu vị trí được mã hoá, bắt nguồn từ toạ độ vĩ độ và kinh độ, đại diện cho một khu vực: 1/8000 độ x 1/8000 độ (khoảng 14m x 14m tại đường xích đạo) hoặc nhỏ hơn. Bạn có thể sử dụng Plus codes để thay thế cho địa chỉ đường phố ở những nơi không có địa chỉ đường phố (nơi các toà nhà không được đánh số hoặc đường phố không có tên).Plus Code được định dạng dưới dạng mã chung và mã kết hợp:
global_codelà mã vùng gồm 4 ký tự và mã địa phương gồm 6 ký tự trở lên (849VCWC8+R9).compound_codelà mã địa phương có 6 ký tự trở lên và có vị trí rõ ràng (CWC8+R9, Mountain View, CA, Hoa Kỳ). Đừng phân tích cú pháp nội dung này theo phương thức lập trình.
html_attributions: Một mảng các thuộc tính mà bạn nên hiển thị khi hiển thị kết quả tìm kiếm. Mỗi mục trong mảng chứa văn bản HTML cho một thuộc tính. Lưu ý: Đây là thông tin tổng hợp của tất cả các thuộc tính cho toàn bộ phản hồi tìm kiếm. Do đó, tất cả đối tượngPlaceResulttrong phản hồi đều chứa danh sách ghi nhận tác giả giống hệt nhau.icontrả về URL cho biểu tượng PNG có màu, kích thước 71px x 71px.icon_mask_base_uritrả về URL cơ sở cho một biểu tượng không có màu, trừ phần đuôi .svg hoặc .png.icon_background_colortrả về mã màu HEX mặc định cho danh mục của địa điểm.name: Tên địa điểm.opening_hourscó thể chứa những thông tin sau:open_nowlà một giá trị boolean cho biết địa điểm có mở cửa vào thời điểm hiện tại hay không (Không dùng nữa trong Thư viện địa điểm, Maps JavaScript API, hãy sử dụngutc_offset_minutes).
place_idlà giá trị nhận dạng dạng văn bản giúp xác định duy nhất một địa điểm. Để truy xuất thông tin về địa điểm, hãy truyền giá trị nhận dạng này trong yêu cầu Chi tiết địa điểm. Tìm hiểu thêm về cách tham chiếu một địa điểm bằng mã địa điểm.ratingchứa điểm xếp hạng của địa điểm, từ 0 đến 5, dựa trên bài đánh giá tổng hợp của người dùng.typesMột mảng các loại cho địa điểm này (ví dụ:["political", "locality"]hoặc["restaurant", "lodging"]). Mảng này có thể chứa nhiều giá trị hoặc có thể trống. Các giá trị mới có thể được thêm vào mà không cần thông báo trước. Xem danh sách các loại được hỗ trợ.vicinity: Địa chỉ đơn giản của địa điểm, bao gồm tên đường, số đường và địa phương, nhưng không bao gồm tỉnh/tiểu bang, mã bưu chính hoặc quốc gia. Ví dụ: văn phòng của Google tại Sydney, Úc có giá trịvicinitylà5/48 Pirrama Road, Pyrmont.
Truy cập vào các kết quả khác
Theo mặc định, mỗi lượt tìm kiếm địa điểm sẽ trả về tối đa 20 kết quả cho mỗi cụm từ tìm kiếm. Tuy nhiên, mỗi lượt tìm kiếm có thể trả về tối đa 60 kết quả, chia thành 3 trang.
Bạn có thể sử dụng các trang bổ sung bằng cách dùng đối tượng PlaceSearchPagination. Để truy cập vào các trang khác, bạn phải thu thập đối tượng PlaceSearchPagination bằng hàm callback. Đối tượng PlaceSearchPagination được định nghĩa như sau:
hasNextPagelà một thuộc tính boolean cho biết liệu có thêm kết quả hay không.truekhi có thêm trang kết quả.nextPage()một hàm sẽ trả về tập hợp kết quả tiếp theo. Sau khi thực hiện tìm kiếm, bạn phải đợi hai giây trước khi trang kết quả tiếp theo xuất hiện.
Để xem nhóm kết quả tiếp theo, hãy gọi nextPage.
Mỗi trang kết quả phải được hiển thị trước khi hiển thị trang kết quả tiếp theo. Xin lưu ý rằng mỗi lượt tìm kiếm được tính là một yêu cầu duy nhất đối với hạn mức sử dụng của bạn.
Ví dụ dưới đây minh hoạ cách thay đổi hàm callback để thu thập đối tượng PlaceSearchPagination, nhờ đó bạn có thể đưa ra nhiều yêu cầu tìm kiếm.
TypeScript
// This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initMap(): void { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", } as google.maps.MapOptions ); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage: () => void | false; const moreButton = document.getElementById("more") as HTMLButtonElement; moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, ( results: google.maps.places.PlaceResult[] | null, status: google.maps.places.PlacesServiceStatus, pagination: google.maps.places.PlaceSearchPagination | null ) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } } ); } function addPlaces( places: google.maps.places.PlaceResult[], map: google.maps.Map ) { const placesList = document.getElementById("places") as HTMLElement; for (const place of places) { if (place.geometry && place.geometry.location) { const image = { url: place.icon!, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; new google.maps.Marker({ map, icon: image, title: place.name!, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name!; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry!.location!); }); } } } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example requires the Places library. Include the libraries=places // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> function initMap() { // Create the map. const pyrmont = { lat: -33.866, lng: 151.196 }; const map = new google.maps.Map(document.getElementById("map"), { center: pyrmont, zoom: 17, mapId: "8d193001f940fde3", }); // Create the places service. const service = new google.maps.places.PlacesService(map); let getNextPage; const moreButton = document.getElementById("more"); moreButton.onclick = function () { moreButton.disabled = true; if (getNextPage) { getNextPage(); } }; // Perform a nearby search. service.nearbySearch( { location: pyrmont, radius: 500, type: "store" }, (results, status, pagination) => { if (status !== "OK" || !results) return; addPlaces(results, map); moreButton.disabled = !pagination || !pagination.hasNextPage; if (pagination && pagination.hasNextPage) { getNextPage = () => { // Note: nextPage will call the same handler function as the initial call pagination.nextPage(); }; } }, ); } function addPlaces(places, map) { const placesList = document.getElementById("places"); for (const place of places) { if (place.geometry && place.geometry.location) { const image = { url: place.icon, size: new google.maps.Size(71, 71), origin: new google.maps.Point(0, 0), anchor: new google.maps.Point(17, 34), scaledSize: new google.maps.Size(25, 25), }; new google.maps.Marker({ map, icon: image, title: place.name, position: place.geometry.location, }); const li = document.createElement("li"); li.textContent = place.name; placesList.appendChild(li); li.addEventListener("click", () => { map.setCenter(place.geometry.location); }); } } } window.initMap = initMap;
Thông tin về địa điểm
Ngoài việc cung cấp danh sách các địa điểm trong một khu vực, Dịch vụ địa điểm cũng có thể trả về thông tin chi tiết về một địa điểm cụ thể. Sau khi một địa điểm được trả về trong phản hồi tìm kiếm địa điểm, bạn có thể sử dụng mã địa điểm của địa điểm đó để yêu cầu thêm thông tin chi tiết về địa điểm đó, chẳng hạn như địa chỉ đầy đủ, số điện thoại, điểm xếp hạng và bài đánh giá của người dùng, v.v.
Yêu cầu về Place Details
Bạn có thể yêu cầu Place Details bằng cách gọi phương thức getDetails() của dịch vụ.
service = new google.maps.places.PlacesService(map); service.getDetails(request, callback);
Phương thức này nhận một yêu cầu, chứa placeId của một địa điểm và các trường cho biết loại dữ liệu Địa điểm cần trả về. Tìm hiểu thêm về
cách tham chiếu một địa điểm bằng mã địa điểm.
Phương thức này cũng sử dụng một phương thức gọi lại, cần xử lý mã trạng thái được truyền trong phản hồi google.maps.places.PlacesServiceStatus, cũng như đối tượng google.maps.places.PlaceResult.
var request = { placeId: 'ChIJN1t_tDeuEmsRUsoyG83frY4', fields: ['name', 'rating', 'formatted_phone_number', 'geometry'] }; service = new google.maps.places.PlacesService(map); service.getDetails(request, callback); function callback(place, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { createMarker(place); } }
Trường (Thông tin chi tiết về địa điểm)
Tham sốfields nhận một mảng chuỗi (tên trường).
Sử dụng tham số fields để chỉ định một mảng các loại dữ liệu địa điểm cần trả về.
Ví dụ: fields: ['address_components', 'opening_hours', 'geometry'].
Sử dụng dấu chấm khi chỉ định giá trị phức hợp. Ví dụ: opening_hours.weekday_text.
Các trường tương ứng với kết quả Chi tiết địa điểm và được chia thành ba danh mục thanh toán: Cơ bản, Thông tin liên hệ và Không khí. Các trường cơ bản được tính phí theo mức giá cơ bản và không phát sinh thêm phí. Các trường Tiếp xúc và Bầu không khí được tính phí ở mức cao hơn. Hãy xem bảng giá để biết thêm thông tin. Thông tin ghi nhận tác giả (html_attributions) luôn được trả về trong mọi lệnh gọi, bất kể thông tin đó có được yêu cầu hay không.
Cơ bản
Danh mục Cơ bản bao gồm các trường sau:
address_components, adr_address, business_status,
formatted_address, geometry, icon,
icon_mask_base_uri, icon_background_color,name,
permanently_closed (không dùng nữa),
photo, place_id, plus_code, type,
url, utc_offset (không dùng nữa
trong Thư viện địa điểm, Maps JavaScript API), utc_offset_minutes,
vicinity
Thông tin liên hệ
Danh mục Thông tin liên hệ bao gồm các trường sau:
formatted_phone_number, international_phone_number,
opening_hours, website
Không gian
Danh mục Bầu không khí bao gồm các trường sau:
price_level, rating, reviews,
user_ratings_total
Tìm hiểu thêm về trường địa điểm. Để biết thêm thông tin về cách tính phí cho các yêu cầu về dữ liệu Địa điểm, hãy xem phần Mức sử dụng và thanh toán.
Câu trả lời về thông tin chi tiết về địa điểm
Mã trạng thái
Đối tượng phản hồi PlacesServiceStatus chứa trạng thái của yêu cầu và có thể chứa thông tin gỡ lỗi để giúp bạn tìm ra lý do khiến yêu cầu Chi tiết địa điểm không thành công. Các giá trị trạng thái có thể có là:
INVALID_REQUEST: Yêu cầu này không hợp lệ.OK: Phản hồi chứa kết quả hợp lệ.OVER_QUERY_LIMIT: Trang web đã vượt quá hạn mức yêu cầu.NOT_FOUNDKhông tìm thấy vị trí được tham chiếu trong cơ sở dữ liệu Địa điểm.REQUEST_DENIED: Trang web không được phép sử dụng PlacesService.UNKNOWN_ERROR: Không thể xử lý yêu cầu PlacesService do lỗi phía máy chủ. Yêu cầu có thể thành công nếu bạn thử lại.ZERO_RESULTS: Không tìm thấy kết quả nào cho yêu cầu này.
Kết quả Place Details
Lệnh gọi getDetails() thành công sẽ trả về một đối tượng
PlaceResult có các thuộc tính sau:
address_components: Một mảng chứa các thành phần riêng biệt áp dụng cho địa chỉ này.Mỗi thành phần địa chỉ thường chứa các trường sau:
types[]là một mảng cho biết loại của thành phần địa chỉ. Thành phần địa chỉ có thể có một mảng loại trống khi không có loại nào đã biết cho thành phần địa chỉ đó. API có thể thêm các giá trị loại mới nếu cần. Để biết thêm thông tin, hãy xem phần Loại địa chỉ và loại thành phần địa chỉ.long_namelà tên hoặc nội dung mô tả đầy đủ bằng văn bản của thành phần địa chỉ do Bộ mã hoá địa lý trả về.short_namelà tên viết tắt bằng văn bản của thành phần địa chỉ (nếu có). Ví dụ: một thành phần địa chỉ cho tiểu bang Alaska có thể cólong_namelà "Alaska" vàshort_namelà "AK" bằng cách sử dụng chữ viết tắt gồm 2 chữ cái của bưu điện.
Hãy lưu ý những thông tin sau về mảng
address_components[]:- Mảng thành phần địa chỉ có thể chứa nhiều thành phần hơn
formatted_address. - Mảng này không nhất thiết phải bao gồm tất cả các thực thể chính trị chứa địa chỉ, ngoài những thực thể có trong
formatted_address. Để truy xuất tất cả các thực thể chính trị chứa một địa chỉ cụ thể, bạn nên sử dụng tính năng mã hoá địa lý ngược, truyền vĩ độ/kinh độ của địa chỉ dưới dạng tham số cho yêu cầu. - Định dạng của phản hồi không được đảm bảo giữ nguyên giữa các yêu cầu. Cụ thể, số lượng
address_componentssẽ thay đổi tuỳ theo địa chỉ được yêu cầu và có thể thay đổi theo thời gian cho cùng một địa chỉ. Một thành phần có thể thay đổi vị trí trong mảng. Loại thành phần có thể thay đổi. Một thành phần cụ thể có thể bị thiếu trong phản hồi sau này.
business_statuscho biết trạng thái hoạt động của địa điểm, nếu đó là một doanh nghiệp. Thuộc tính này có thể chứa một trong các giá trị sau:OPERATIONALCLOSED_TEMPORARILYCLOSED_PERMANENTLY
business_statussẽ không được trả về.formatted_address: Địa chỉ mà con người có thể đọc được của địa điểm này.Địa chỉ này thường tương đương với địa chỉ bưu chính. Xin lưu ý rằng một số quốc gia, chẳng hạn như Vương quốc Anh, không cho phép phân phối địa chỉ bưu chính thực do các quy định hạn chế về việc cấp phép.
Địa chỉ được định dạng bao gồm một hoặc nhiều thành phần địa chỉ. Ví dụ: địa chỉ "111 8th Avenue, New York, NY" bao gồm các thành phần sau: "111" (số nhà), "8th Avenue" (tuyến đường), "New York" (thành phố) và "NY" (tiểu bang của Hoa Kỳ).
Đừng phân tích cú pháp địa chỉ được định dạng theo phương thức lập trình. Thay vào đó, bạn nên sử dụng các thành phần địa chỉ riêng lẻ mà phản hồi của API bao gồm ngoài trường địa chỉ được định dạng.
formatted_phone_number: Số điện thoại của địa điểm, được định dạng theo quy ước khu vực của số điện thoại.geometry: Thông tin liên quan đến hình học của địa điểm. Điều này bao gồm:locationcung cấp vĩ độ và kinh độ của địa điểm.viewportxác định khung nhìn ưu tiên trên bản đồ khi xem địa điểm này.
permanently_closed(không dùng nữa) là một cờ boolean cho biết liệu địa điểm đó đã đóng cửa vĩnh viễn hay tạm thời (giá trịtrue). Đừng sử dụngpermanently_closed. Thay vào đó, hãy sử dụngbusiness_statusđể biết trạng thái hoạt động của doanh nghiệp.plus_code(xem Mã vị trí mở và mã cộng) là một tham chiếu vị trí được mã hoá, bắt nguồn từ toạ độ vĩ độ và kinh độ, đại diện cho một khu vực: 1/8000 độ x 1/8000 độ (khoảng 14m x 14m tại đường xích đạo) hoặc nhỏ hơn. Bạn có thể sử dụng Plus codes để thay thế cho địa chỉ đường phố ở những nơi không có địa chỉ đường phố (nơi các toà nhà không được đánh số hoặc đường phố không có tên).Plus Code được định dạng dưới dạng mã chung và mã kết hợp:
global_codelà mã vùng gồm 4 ký tự và mã địa phương gồm 6 ký tự trở lên (849VCWC8+R9).compound_codelà mã địa phương có 6 ký tự trở lên và có vị trí rõ ràng (CWC8+R9, Mountain View, CA, Hoa Kỳ). Đừng phân tích cú pháp nội dung này theo phương thức lập trình.
html_attributions: Văn bản ghi công sẽ hiển thị cho kết quả địa điểm này.icon: URL đến tài nguyên hình ảnh có thể dùng để đại diện cho loại địa điểm này.international_phone_numberchứa số điện thoại của địa điểm ở định dạng quốc tế. Định dạng quốc tế bao gồm mã quốc gia và có tiền tố là dấu cộng (+). Ví dụ:international_phone_numbercho văn phòng của Google tại Sydney, Úc là+61 2 9374 4000.name: Tên địa điểm.utc_offsetKhông dùng nữa trong Thư viện địa điểm, API JavaScript cho Maps, hãy sử dụngutc_offset_minutes.utc_offset_minuteschứa số phút chênh lệch giữa múi giờ hiện tại của địa điểm này và giờ UTC. Ví dụ: đối với các địa điểm ở Sydney, Úc trong giờ mùa hè, giá trị này sẽ là 660 (+11 giờ so với giờ UTC) và đối với các địa điểm ở California ngoài giờ mùa hè, giá trị này sẽ là -480 (-8 giờ so với giờ UTC).opening_hourschứa các thông tin sau:open_now(Không dùng nữa trong Thư viện địa điểm, Maps JavaScript API; hãy sử dụng opening_hours.isOpen(). Để biết cách sử dụngisOpenvới Place Details, hãy xem video Cách lấy giờ mở cửa trong Places API (Cũ) .) `open_now` là một giá trị Boolean cho biết liệu địa điểm đó có mở cửa vào thời điểm hiện tại hay không.periods[]là một mảng các khoảng thời gian mở cửa trong 7 ngày, bắt đầu từ Chủ Nhật, theo thứ tự thời gian. Mỗi giai đoạn bao gồm:openchứa một cặp đối tượng ngày và giờ mô tả thời điểm địa điểm mở cửa:daymột số từ 0 đến 6, tương ứng với các ngày trong tuần, bắt đầu từ Chủ Nhật. Ví dụ: 2 nghĩa là Thứ Ba.timecó thể chứa thời gian trong ngày theo định dạng hhmm 24 giờ (các giá trị nằm trong khoảng từ 0000 đến 2359).timesẽ được báo cáo theo múi giờ của địa điểm.
closecó thể chứa một cặp đối tượng ngày và giờ mô tả thời điểm địa điểm đóng cửa. Lưu ý: Nếu một địa điểm luôn mở cửa, thì phầnclosesẽ bị thiếu trong phản hồi. Các ứng dụng có thể dựa vào trạng thái luôn mở được biểu thị dưới dạng khoảng thời gianopenchứadaycó giá trị 0 vàtimecó giá trị 0000, và không cóclose.
weekday_textlà một mảng gồm 7 chuỗi đại diện cho giờ mở cửa được định dạng cho mỗi ngày trong tuần. Nếu bạn chỉ định tham sốlanguagetrong yêu cầu Place Details, thì Dịch vụ địa điểm sẽ định dạng và bản địa hoá giờ mở cửa cho phù hợp với ngôn ngữ đó. Thứ tự của các phần tử trong mảng này phụ thuộc vào tham sốlanguage. Một số ngôn ngữ bắt đầu tuần vào thứ Hai, trong khi một số ngôn ngữ khác bắt đầu vào Chủ Nhật.
permanently_closed(không dùng nữa) là một cờ boolean cho biết liệu địa điểm đó đã đóng cửa vĩnh viễn hay tạm thời (giá trịtrue). Đừng sử dụngpermanently_closed. Thay vào đó, hãy sử dụngbusiness_statusđể biết trạng thái hoạt động của doanh nghiệp.photos[]: một mảng đối tượngPlacePhoto. Bạn có thể sử dụngPlacePhotođể lấy ảnh bằng phương thứcgetUrl()hoặc kiểm tra đối tượng để tìm các giá trị sau:height: chiều cao tối đa của hình ảnh, tính bằng pixel.width: chiều rộng tối đa của hình ảnh, tính bằng pixel.html_attributions: Văn bản ghi công sẽ xuất hiện cùng với ảnh địa điểm này.
place_id: Giá trị nhận dạng dạng văn bản giúp xác định duy nhất một địa điểm và có thể dùng để truy xuất thông tin về địa điểm đó bằng yêu cầu Chi tiết địa điểm. Tìm hiểu thêm về cách tham chiếu một địa điểm bằng mã địa điểm.rating: Điểm xếp hạng của địa điểm, từ 0 đến 5, dựa trên bài đánh giá tổng hợp của người dùng.reviewsmột mảng gồm tối đa 5 bài đánh giá. Mỗi bài đánh giá bao gồm một số thành phần:aspects[]chứa một mảng các đối tượngPlaceAspectRating, mỗi đối tượng cung cấp một mức xếp hạng cho một thuộc tính của cơ sở. Đối tượng đầu tiên trong mảng được coi là tỷ lệ khung hình chính. MỗiPlaceAspectRatingđược xác định là:typetên của khía cạnh đang được xếp hạng. Các loại sau đây được hỗ trợ:appeal,atmosphere,decor,facilities,food,overall,qualityvàservice.ratingđiểm xếp hạng của người dùng cho khía cạnh cụ thể này, từ 0 đến 3.
author_nametên của người dùng đã gửi bài đánh giá. Các bài đánh giá ẩn danh được ghi nhận là của "Một người dùng Google". Nếu bạn đã đặt tham số ngôn ngữ, thì cụm từ "Người dùng Google" sẽ trả về một chuỗi đã bản địa hoá.author_urlURL đến hồ sơ Google+ của người dùng, nếu có.languagemã ngôn ngữ IETF cho biết ngôn ngữ được dùng trong bài đánh giá của người dùng. Trường này chỉ chứa thẻ ngôn ngữ chính, chứ không chứa thẻ phụ cho biết quốc gia hoặc khu vực. Ví dụ: tất cả bài đánh giá bằng tiếng Anh đều được gắn thẻ là "en" chứ không phải "en-AU" hoặc "en-UK".ratingđiểm xếp hạng tổng thể của người dùng cho địa điểm này. Đây là một số nguyên, nằm trong khoảng từ 1 đến 5.textbài đánh giá của người dùng. Khi xem xét một địa điểm bằng Google Địa điểm, các bài đánh giá bằng văn bản được coi là không bắt buộc; do đó, trường này có thể trống.
typesMột mảng các loại cho địa điểm này (ví dụ:["political", "locality"]hoặc["restaurant", "lodging"]). Mảng này có thể chứa nhiều giá trị hoặc có thể trống. Các giá trị mới có thể được thêm vào mà không cần thông báo trước. Xem danh sách các loại được hỗ trợ.url: URL của trang chính thức trên Google cho địa điểm này. Đây là trang do Google sở hữu, chứa thông tin chính xác nhất hiện có về địa điểm. Ứng dụng phải liên kết đến hoặc nhúng trang này trên mọi màn hình hiển thị kết quả chi tiết về địa điểm cho người dùng.vicinity: Địa chỉ đơn giản của địa điểm, bao gồm tên đường, số đường và địa phương, nhưng không bao gồm tỉnh/tiểu bang, mã bưu chính hoặc quốc gia. Ví dụ: văn phòng của Google tại Sydney, Úc có giá trịvicinitylà5/48 Pirrama Road, Pyrmont. Thuộc tínhvicinitychỉ được trả về cho Nearby Search.websiteliệt kê trang web chính thức cho địa điểm này, chẳng hạn như trang chủ của doanh nghiệp.
Lưu ý: Điểm xếp hạng đa chiều có thể không có sẵn cho một số địa điểm. Nếu có quá ít bài đánh giá, thì phản hồi chi tiết sẽ bao gồm điểm xếp hạng cũ theo thang điểm từ 0 đến 5 (nếu có) hoặc không có điểm xếp hạng nào.
Tham chiếu một địa điểm bằng mã địa điểm
Mã địa điểm là giá trị nhận dạng duy nhất cho một địa điểm trên Google Maps. Mã địa điểm được cung cấp cho hầu hết các vị trí, bao gồm cả doanh nghiệp, địa danh, công viên và giao lộ.
Để sử dụng mã địa điểm trong ứng dụng, trước tiên, bạn phải tra cứu mã nhận dạng có trong PlaceResult của yêu cầu Tìm kiếm địa điểm hoặc Chi tiết địa điểm.
Sau đó, bạn có thể sử dụng Mã địa điểm này để tra cứu Place Details.
Mã địa điểm được miễn các quy định hạn chế về việc lưu vào bộ nhớ đệm nêu trong Mục 3.2.3(b) của Điều khoản dịch vụ của Nền tảng Google Maps. Do đó, bạn có thể lưu trữ các giá trị mã địa điểm để sử dụng sau này. Để biết các phương pháp hay nhất khi lưu trữ mã địa điểm, hãy xem phần tổng quan về mã địa điểm.
var map; function initialize() { // Create a map centered in Pyrmont, Sydney (Australia). map = new google.maps.Map(document.getElementById('map'), { center: {lat: -33.8666, lng: 151.1958}, zoom: 15 }); // Search for Google's office in Australia. var request = { location: map.getCenter(), radius: '500', query: 'Google Sydney' }; var service = new google.maps.places.PlacesService(map); service.textSearch(request, callback); } // Checks that the PlacesServiceStatus is OK, and adds a marker // using the place ID and location from the PlacesService. function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { var marker = new google.maps.Marker({ map: map, place: { placeId: results[0].place_id, location: results[0].geometry.location } }); } } google.maps.event.addDomListener(window, 'load', initialize);
Hình ảnh về địa điểm
Sử dụng tính năng Ảnh địa điểm để thêm nội dung ảnh chất lượng cao vào trang web của bạn. Dịch vụ Ảnh cho phép bạn truy cập vào hàng triệu ảnh được lưu trữ trong cơ sở dữ liệu của Địa điểm và Google+ Local. Khi bạn nhận được thông tin về địa điểm bằng cách sử dụng yêu cầu Place Details, thông tin tham chiếu ảnh sẽ được trả về cho nội dung ảnh có liên quan. Yêu cầu Nearby Search và Tìm kiếm văn bản cũng trả về một mã tham chiếu ảnh cho mỗi địa điểm, nếu có. Sau đó, bằng cách sử dụng dịch vụ Ảnh, bạn có thể truy cập vào ảnh được tham chiếu và đổi kích thước hình ảnh thành kích thước tối ưu cho ứng dụng của mình.
Một mảng đối tượng PlacePhoto sẽ được trả về dưới dạng một phần của đối tượng PlaceResult cho mọi yêu cầu getDetails(), textSearch() hoặc nearbySearch() được thực hiện đối với PlacesService.
Lưu ý: Số lượng ảnh được trả về sẽ khác nhau tuỳ theo yêu cầu.
- Tính năng Nearby Search hoặc Tìm kiếm văn bản sẽ trả về tối đa một đối tượng
PlacePhoto. - Yêu cầu Chi tiết sẽ trả về tối đa 10 đối tượng
PlacePhoto.
Bạn có thể yêu cầu URL cho hình ảnh liên kết bằng cách gọi phương thức PlacePhoto.getUrl() và truyền một đối tượng PhotoOptions hợp lệ. Sử dụng đối tượng PhotoOptions để chỉ định chiều cao và chiều rộng tối đa của hình ảnh. Nếu bạn chỉ định một giá trị cho cả maxHeight và maxWidth, thì dịch vụ ảnh sẽ đổi kích thước hình ảnh thành kích thước nhỏ hơn trong hai kích thước, đồng thời duy trì tỷ lệ khung hình ban đầu.
Đoạn mã sau đây chấp nhận một đối tượng địa điểm và thêm điểm đánh dấu vào bản đồ nếu có ảnh. Hình ảnh điểm đánh dấu mặc định được thay thế bằng một phiên bản nhỏ của ảnh.
function createPhotoMarker(place) { var photos = place.photos; if (!photos) { return; } var marker = new google.maps.Marker({ map: map, position: place.geometry.location, title: place.name, icon: photos[0].getUrl({maxWidth: 35, maxHeight: 35}) }); }
Ảnh do dịch vụ Ảnh trả về được lấy từ nhiều nguồn, bao gồm cả ảnh do chủ doanh nghiệp và người dùng đóng góp. Trong hầu hết
trường hợp, bạn có thể sử dụng những bức ảnh này mà không cần ghi nhận tác giả hoặc sẽ có thông tin ghi nhận tác giả
bắt buộc trong hình ảnh. Tuy nhiên, nếu phần tử photo được trả về có chứa một giá trị trong trường html_attributions, thì bạn phải thêm thông tin ghi công bổ sung vào ứng dụng của mình ở bất cứ nơi nào bạn hiển thị hình ảnh.