Thư viện địa điểm

Chọn nền tảng: Android iOS JavaScript Dịch vụ web

Tổng quan

Các hàm trong Thư viện địa điểm, API Maps JavaScript cho phép ứng dụng của bạn tìm kiếm địa điểm (được định nghĩa trong API này là cơ sở, vị trí địa lý hoặc địa điểm ưa thích nổi bật) nằm 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.

API Địa điểm 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 của trường tìm kiếm 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 thông tin 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 chưa hiểu rõ về API JavaScript của Maps hoặc JavaScript, bạn nên xem lại JavaScript và Nhận khóa API trước khi bắt đầu.

Bật API

Trước khi sử dụng thư viện Địa điểm trong API JavaScript của Maps, trước tiên hãy đảm bảo rằng API Địa điểm được bật trong Google Cloud Console, trong cùng một dự án bạn đã thiết lập cho API JavaScript của Maps.

Cách xem danh sách các API đã bật:

  1. Truy cập vào Google Cloud Console.
  2. Nhấp vào nút Select a project (Chọn một dự án), sau đó chọn cùng một dự án mà bạn đã thiết lập cho API JavaScript của Maps và nhấp vào Mở.
  3. Từ danh sách API trên Trang tổng quan, hãy tìm API Địa điểm.
  4. Nếu bạn thấy API địa điểm trong danh sách, thì API đó đã được bật. Nếu API không được liệt kê, hãy bật API đó:
    1. Ở đầu trang, hãy chọn ENABLE APIS AND SERVICES (Bật API và dịch vụ) để hiển thị thẻ Library (Thư viện). Ngoài ra, trên trình đơn bên trái, hãy chọn Library (Thư viện).
    2. Tìm API Địa điểm, rồi chọn API đó từ danh sách kết quả.
    3. Chọn BẬT. Khi quá trình hoàn tất, API Địa điểm sẽ xuất hiện trong danh sách API trên Trang tổng quan.

Đang 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 chính của Maps. Để sử dụng chức năng có trong thư viện này, trước tiên bạn phải tải hàm này bằng cách sử dụng tham số libraries trong URL bootstrap của API Maps:

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&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 API địa điểm vào danh sách hạn chế API của khóa API

Việc áp dụng các quy định hạn chế về API cho khoá sẽ giới hạn việc sử dụng khoá API ở một hoặc nhiều API hoặc SDK. Các yêu cầu đối với API hoặc SDK liên kết với khoá API sẽ được xử lý. Các yêu cầu đối với API hoặc SDK không liên kết với khoá API sẽ không thành công. Để hạn chế một khóa API để sử dụng với Thư viện địa điểm, API JavaScript của Maps:
  1. Truy cập vào Google Cloud Console.
  2. 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.
  3. Nhấp vào nút menu và chọn Google Maps Platform > Thông tin đăng nhập.
  4. 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.
  5. Trên trang Hạn chế và đổi tên khoá API, hãy đặt các quy định hạn chế:
    • Hạn chế API
      • Chọn Hạn chế khoá.
      • Nhấp vào Chọn API và chọn cả API Maps JavaScriptAPI địa điểm.
        (Nếu một trong hai API không có trong danh sách, bạn cần phải bật API đó.)
  6. Nhấp vào LƯU.

Giới hạn sử dụng và chính sách

Hạn mức

Thư viện địa điểm chia sẻ hạn mức sử dụng với API địa điểm như mô tả trong tài liệu Giới hạn sử dụng cho API địa điểm.

Chính sách

Việc sử dụng Thư viện địa điểm, API JavaScript của Maps phải tuân thủ các chính sách được mô tả cho API địa điểm.

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:

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ã địa lý". Các thông tin này cho biết địa chỉ, khu vực chính trị như thị trấn, thành phố và các địa điểm ưa thích khác.

Tìm yêu cầu địa điểm

Yêu cầu Tìm địa điểm cho phép bạn tìm kiếm địa điểm theo truy vấn văn bản hoặc qua số điện thoại. Có hai loại yêu cầu Tìm địa điểm:

Tìm địa điểm từ truy vấn

Tìm địa điểm từ truy vấn sẽ nhập văn bản và trả về địa điểm. Dữ liệu đầ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. Để thực hiện yêu cầu Tìm địa điểm từ truy vấn, hãy gọi phương thức findPlaceFromQuery() của PlacesService. Phương thức này sẽ 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 loại hình cơ sở. Mọi loại mục nhập khác đều có thể gây ra lỗi và không đảm bảo sẽ trả về kết quả hợp lệ. API Địa điểm sẽ trả về kết quả trùng khớp ứng viên 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à họ 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) Tọa độ xác định khu vực cần tìm kiếm. Bạn có thể làm một trong những việc sau:
    • Một tập hợp các toạ độ vĩ độ/kinh độ được chỉ định là LatLngLiteral hoặc đối tượng LatLng
    • Giới hạn hình chữ nhật (hai cặp vĩ độ/lng hoặc một đối tượng LatLngBounds)
    • Bán kính (tính bằng mét) căn giữa vĩ độ/kinh độ

Bạn cũng phải truyền một phương thức gọi lại cho 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 một 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 namegeometry.

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);
    }
  });
}
Xem ví dụ

Tìm địa điểm từ số điện thoại

Tìm địa điểm từ số điện thoại sẽ lấy số điện thoại và trả về một địa điểm. Để yêu cầu Tìm địa điểm từ số điện thoại, hãy gọi phương thức findPlaceFromPhoneNumber() của PlacesService. Phương thức này sẽ nhận các thông số sau:

  • phoneNumber (bắt buộc) Số điện thoại ở đị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) Tọa độ xác định khu vực cần tìm kiếm. Có thể là một trong những trạng thái sau đây:

Bạn cũng phải truyền một phương thức gọi lại cho findPlaceFromPhoneNumber() để xử lý đối tượng kết quả và phản hồi google.maps.places.PlacesServiceStatus.

Trường (phương pháp Tìm địa điểm)

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ị kết hợp. Ví dụ: opening_hours.weekday_text.

Các trường tương ứng với kết quả của Tìm kiếm địa điểm và được chia thành ba danh mục thanh toán: Cơ bản, Liên hệ và Khí quyển. Các trường cơ bản được lập hoá đơn theo mức cơ bản và không tính thêm phí. Các trường Liên hệ và Khí quyển được thanh toán ở mức phí cao hơn. Vui lòng xem bảng giá để biết thêm thông tin. Thuộc tính (html_attributions) luôn được trả về trong mọi lệnh gọi, bất kể trường đã được yêu cầu hay chưa.

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

Liên hệ

Danh mục Liên hệ bao gồm trường sau: opening_hours
(không được dùng nữa trong Thư viện Địa điểm JavaScript, API JavaScript. Sử dụng yêu cầu Thông tin chi tiết về địa điểm để nhận được kết quả opening_hours.

Khí quyển

Danh mục Khí quyển bao gồm các trường sau: price_level, rating, user_ratings_total

Các phương thức findPlaceFromQuery()findPlaceFromPhoneNumber() đều có cùng một trường trường và có thể trả về các trường giống nhau trong các phản hồi tương ứng.

Đặt vị trí sai lệch (Tìm phương pháp địa điểm)

Sử dụng tham số locationBias để tạo kết quả ưu tiên cho 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:

Xu hướng kết quả đến 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), tập trung vào một khu vực cụ thể:

locationBias: {radius: 100, center: {lat: 37.402105, lng: -122.081974}}

Yêu cầu tìm kiếm lân cận

Tìm kiếm lân cận cho phép bạn tìm kiếm các địa điểm trong một khu vực cụ thể theo từ khóa hoặc loại. Tìm kiếm lân cận phải luôn bao gồm vị trí, có thể được chỉ định bằng một trong hai cách:

  • LatLngBounds.
  • một vùng tròn được xác định là tổ hợp của thuộc tính location — xác định tâm của vòng tròn là đối tượng LatLng — và bán kính, được đo bằng mét.

Tìm kiếm Địa điểm lân cận được bắt đầu bằng lệnh gọi phương thức nearbySearch() của PlacesService, phương thức này sẽ trả về một mảng các đối tượng PlaceResult. Xin lưu ý rằng phương thức nearbySearch() sẽ 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 sẽ nhận yêu cầu với các trường sau:

  • Thực hiện một trong hai hành động sau:
    • bounds, phải là đối tượng google.maps.LatLngBounds xác định khu vực tìm kiếm hình chữ nhật; hoặc
    • locationradius; phần tử trước lấy đối tượng google.maps.LatLng còn phần tử thứ hai nhận 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 cho phép là 50.000 mét. Xin lưu ý rằng khi đặt rankBy thành DISTANCE, bạn phải chỉ định location nhưng không thể chỉ định radius hoặc bounds.
  • keyword (không bắt buộc) — Một thuật ngữ sẽ được so khớp với tất cả các trường có sẵn, 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 khác của bên thứ ba.
  • minPriceLevelmaxPriceLevel (không bắt buộc) – Chỉ cho phép hiển thị kết quả về những địa điểm trong phạm vi được chỉ định. Các giá trị hợp lệ nằm trong khoảng từ 0 (bình thường nhất) đến 4 (đắt nhất), bao gồm.
  • name không được chấp nhận. Tương đương với keyword. Các giá trị trong trường này được kết hợp với các giá trị trong trường keyword và đượ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ỉ trả về các địa điểm đang mở cửa kinh doanh tại thời điểm gửi cụm từ tìm kiếm. 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. Việc đặt openNow thành false sẽ không có hiệu lực.
  • rankBy (không bắt buộc) — Chỉ định thứ tự liệt kê các kết quả. Các giá trị có thể sử dụng là:
    • google.maps.places.RankBy.PROMINENCE (mặc định). Tuỳ chọn này sắp xếp các kết quả dựa trên tầm quan trọng của chúng. Thứ hạng sẽ ưu tiên các địa điểm nổi bật trong phạm vi bán kính đã đặt so với các địa điểm lân cận phù hợp nhưng ít nổi bật hơn. Sự nổi bật có thể bị ảnh hưởng bởi thứ hạng của một địa điểm trong chỉ mục của Google, mức độ phổ biến toàn cầu và những yếu tố khác. Khi google.maps.places.RankBy.PROMINENCE được chỉ định, bạn bắt buộc phải sử dụng tham số radius.
    • google.maps.places.RankBy.DISTANCE. Tuỳ chọn này sắp xếp các kết quả theo thứ tự tăng dần theo khoảng cách từ location được chỉ định (bắt buộc). Xin lưu ý rằng bạn không thể chỉ định bounds và/hoặc radius tuỳ chỉnh nếu chỉ định RankBy.DISTANCE. Khi chỉ định RankBy.DISTANCE, bạn bắt buộc phải có một hoặc nhiều keyword, name hoặc type.
  • type – Giới hạn kết quả ở những địa điểm phù hợ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 thì tất cả các loại sau mục nhập đầ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 cho 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]);
    }
  }
}

Xem ví dụ

Yêu cầu tìm kiếm văn bản

Dịch vụ Tìm kiếm 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 – ví dụ: "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 một danh sách các địa điểm khớp với chuỗi văn bản và mọi sai lệch vị trí đã được đặt. Nội dung 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 về đị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ìm kiếm văn bản được bắt đầu bằng một 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 sẽ nhận yêu cầu với 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 Main Street". Đây phải là tên địa điểm, địa chỉ hoặc danh mục của cơ sở. Mọi loại dữ liệu đầu vào khác đều có thể gây ra lỗi và không đảm bảo sẽ trả về kết quả hợp lệ. Dịch vụ Địa điểm sẽ trả về kết quả trùng khớp ứng viên 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à họ nhận thấy. Tham số này không bắt buộc nếu bạn cũng dùng tham số type trong yêu cầu tìm kiếm.
  • Không bắt buộc:
    • openNow — Một giá trị boolean, cho biết rằng dịch vụ Địa điểm chỉ nên trả về các địa điểm 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. Việc đặt openNow thành false sẽ không có hiệu lực.
    • minPriceLevelmaxPriceLevel — Hạn chế kết quả chỉ với những địa điểm trong phạm vi mức giá đã chỉ định. Các giá trị hợp lệ nằm trong khoảng từ 0 (trung bình) đến 4 (đắt nhất).
    • Thực hiện một trong hai hành động sau:
      • bounds – Đối tượng google.maps.LatLngBounds xác định hình chữ nhật để tìm kiếm; hoặc
      • locationradius — Bạn có thể làm sai lệch kết quả đối với một vòng kết nối cụ thể bằng cách truyền tham số locationradius. 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 kết nối đó. Kết quả nằm ngoài khu vực xác định vẫn có thể được hiển thị. Vị trí này sẽ lấy một đối tượng google.maps.LatLng và bán kính 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 cho phép là 50.000 mét.
    • type – Hạn chế kết quả ở các địa điểm phù hợ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, thì tất cả các loại sau mục nhập đầ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 cho 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 theo dõi lý do không gửi được yêu cầu. Các giá trị trạng thái có thể 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 này không được phép sử dụng PlaceService.
  • UNKNOWN_ERROR: Không thể xử lý yêu cầu PlacesService do lỗi 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

Các hàm findPlace(), nearbySearch()textSearch() trả về một mảng các đối tượng PlaceResult.

Mỗi đối tượng PlaceResult có thể bao gồm các thuộc tính sau:

  • business_status cho 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:
    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY
    Nếu không có dữ liệu nào, business_status sẽ không được trả về.
  • formatted_address là một chuỗi chứa địa chỉ mà con người có thể đọc được. Thuộc tính formatted_address chỉ được trả về cho một Tìm kiếm văn bản.

    Thông thường, địa chỉ này tương đương với địa chỉ bưu điện. 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 sự do các quy định hạn chế.

    Địa chỉ được định dạng bao gồm một hoặc nhiều thành phần địa chỉ theo logic. Ví dụ: địa chỉ "111 8th Avenue, New York, NY" bao gồm các thành phần sau: "111" (số đường phố), "8th Avenue" (tuyến đường), "New York" (thành phố) và "NY" (tiểu bang của Hoa Kỳ).

    Không phân tích cú pháp địa chỉ đã đị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 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. Trong đó có:
    • location cung cấp vĩ độ và kinh độ của địa điểm.
    • viewport xá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 địa điểm đã ngừng hoạt động vĩnh viễn hoặc tạm thời (giá trị true). Không sử dụng permanently_closed. Thay vào đó, hãy sử dụng business_status để biết trạng thái hoạt động của các doanh nghiệp.
  • plus_code (xem Mã vị trí mởmã cộng) là một tham chiếu vị trí được mã hóa, được lấy từ tọa độ vĩ độ và kinh độ, đại diện cho một khu vực: 1/8000 của 1 độ là 1/8000 độ (khoảng 14 m x 14 m tại xích đạo) hoặc nhỏ hơn. Bạn có thể sử dụng mã cộng để thay thế cho địa chỉ đường phố ở các địa điểm không tồn tại (nơi các tòa nhà không được đánh số hoặc đường phố không được đặt tên).

    Mã cộng được định dạng như một mã toàn cầu và một mã phức hợp:

    • global_code là mã vùng gồm 4 ký tự và mã cục bộ dài 6 ký tự (849VCWC8+R9).
    • compound_code là mã cục bộ dài 6 ký tự trở lên có vị trí rõ ràng (CWC8+R9, Mountain View, CA, USA). Không được phân tích cú pháp nội dung này theo phương thức lập trình.
    Thông thường, cả mã chung và mã ghép đều được trả về. Tuy nhiên, nếu kết quả nằm ở một vị trí từ xa (ví dụ: đại dương hoặc sa mạc), thì chỉ có thể trả về mã toàn cầu.
  • html_attributions: Một loạt 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 nhập trong mảng chứa văn bản HTML cho một thuộc tính duy nhất. Lưu ý: Đây là tổng hợp tất cả thuộc tính cho toàn bộ phản hồi tìm kiếm. Do đó, tất cả các đối tượng PlaceResult trong phản hồi đều chứa các danh sách phân bổ giống hệt nhau.
  • icon trả về URL cho một biểu tượng PNG màu 71px x 71px.
  • icon_mask_base_uri trả về URL cơ sở cho một biểu tượng không màu, ngoại trừ đuôi .svg hoặc .png.
  • icon_background_color trả về mã màu HEX mặc định cho danh mục của địa điểm.
  • name: Tên địa điểm.
  • opening_hours có thể chứa những thông tin sau:
    • open_now là giá trị boolean cho biết địa điểm có mở cửa tại thời điểm hiện tại hay không (Không được dùng nữa trong Thư viện địa điểm, API JavaScript của Maps và hãy sử dụng utc_offset_minutes).
  • place_id là giá trị nhận dạng dạng văn bản giúp nhận dạng riêng một địa điểm. Để truy xuất thông tin về địa điểm, hãy chuyển giá trị nhận dạng này vào yêu cầu đối với Thông tin chi tiết về đị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 chứa xếp hạng của địa điểm, từ 0.0 đến 5.0, dựa trên các bài đánh giá tổng hợp của người dùng.
  • types Một loạt 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 giới thiệu mà không cần thông báo trước. Xem danh sách các loại được hỗ trợ.
  • vicinity: Một địa chỉ đơn giản hóa cho địa điểm, bao gồm tên đường, số nhà và vị trí, 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 Sydney của Úc ở Úc có giá trị vicinity5/48 Pirrama Road, Pyrmont.

Truy cập kết quả bổ sung

Theo mặc định, mỗi tìm kiếm địa điểm trả lại tối đa 20 kết quả cho mỗi truy vấn. Tuy nhiên, mỗi nội dung tìm kiếm có thể trả về 60 kết quả, chia thành ba trang. Bạn có thể xem thêm các trang khác thông qua đối tượng PlaceSearchPagination. Để truy cập vào các trang bổ sung, bạn phải thu thập đối tượng PlaceSearchPagination thông qua hàm callback. Đối tượng PlaceSearchPagination được định nghĩa là:

  • hasNextPage một thuộc tính boolean cho biết có thêm kết quả hay không. true khi 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 có trang kết quả tiếp theo.

Để xem loạt 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 sẽ được tính là một yêu cầu so với giới hạn mức sử dụng của bạn.

Ví dụ bên dưới minh hoạ cách thay đổi hàm callback để nắm bắt đố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;
Xem ví dụ

Dùng thử mẫu

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ể. Khi một địa điểm đã được trả lại trong phản hồi tìm kiếm địa điểm, địa điểm có thể được sử dụng để yêu cầu chi tiết bổ sung về địa điểm đó, chẳng hạn như địa chỉ đầy đủ, số điện thoại, xếp hạng và đánh giá của người dùng, v.v.

Yêu cầu thông tin chi tiết về địa điểm

Bạn cần yêu cầu Thông tin chi tiết về địa điểm 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 sẽ nhận một yêu cầu, chứa placeId của địa điểm mong muốn 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 với một mã địa điểm.

Phương thức này cũng cần có một phương thức gọi lại để xử lý mã trạng thái được chuyển vào 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);
  }
}

Xem ví dụ

Trường (Chi tiết địa điểm)

Tham số fields lấy một mảng chuỗi (tên trường).

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ị kết 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, Liên hệ và Bầu không khí. Các trường cơ bản được lập hóa đơn theo mức cơ bản và không tính thêm phí. Các trường Địa chỉ liên hệ và Khí quyển được tính phí cao hơn. Vui lòng xem bảng giá để biết thêm thông tin. Thuộc tính (html_attributions) luôn được trả về trong mọi lệnh gọi, bất kể nó 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 (API},}utc_offset_minutesvicinity

Liên hệ

Danh mục Liên hệ bao gồm các trường sau:
formatted_phone_number, international_phone_number, opening_hours, website

Khí quyển

Danh mục Khí quyển 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 thanh toán cho các yêu cầu cung cấp dữ liệu về Địa điểm, hãy xem bài viết Sử dụng và thanh toán.

Câu trả lời về thông tin chi tiết của đị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 theo dõi vì sao yêu cầu Thông tin chi tiết về địa điểm không thành công. Các giá trị trạng thái có thể 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_FOUND Không tìm thấy vị trí được tham chiếu trong cơ sở dữ liệu Địa điểm.
  • REQUEST_DENIED: Trang web này không được phép sử dụng PlaceService.
  • UNKNOWN_ERROR: Không thể xử lý yêu cầu PlacesService do lỗi 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ả chi tiết địa điểm

Lệnh gọi getDetails() thành công sẽ trả về đối tượng PlaceResult với 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 thành phần địa chỉ. Xem danh sách các loại được hỗ trợ.
    • long_name là nội dung mô tả đầy đủ hoặc tên của thành phần địa chỉ do Geocoder trả về.
    • short_name là tên viết tắt cho thành phần địa chỉ, nếu có. Ví dụ: thành phần địa chỉ cho tiểu bang Alaska có thể có long_name là "Alaska" và short_name là "AK" sử dụng chữ viết tắt gồm 2 chữ cái.

    Hãy lưu ý những thông tin sau đây 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ả thực thể chính trị có 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ị có chứa một địa chỉ cụ thể, bạn nên sử dụng quy trình mã hóa địa lý ngược, chuyển vĩ độ/kinh độ của địa chỉ dưới dạng tham số vào yêu cầu.
    • Định dạng của phản hồi không được đảm bảo sẽ giữ nguyên giữa các yêu cầu. Cụ thể, số lượng address_components sẽ thay đổi tuỳ theo địa chỉ được yêu cầu và có thể thay đổi theo thời gian đối với 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. Có thể thiếu một thành phần cụ thể trong phản hồi sau đó.
  • business_status cho 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:
    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY
    Nếu không có dữ liệu nào, business_status sẽ không được trả về.
  • formatted_address: Địa chỉ người có thể đọc được của địa điểm này.

    Thông thường, địa chỉ này tương đương với địa chỉ bưu điện. 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 sự do các quy định hạn chế.

    Địa chỉ được định dạng bao gồm một hoặc nhiều thành phần địa chỉ theo logic. Ví dụ: địa chỉ "111 8th Avenue, New York, NY" bao gồm các thành phần sau: "111" (số đường phố), "8th Avenue" (tuyến đường), "New York" (thành phố) và "NY" (tiểu bang của Hoa Kỳ).

    Không phân tích cú pháp địa chỉ đã đị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 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ố.
  • geometry: Thông tin liên quan đến hình học của địa điểm. Trong đó có:
    • location cung cấp vĩ độ và kinh độ của địa điểm.
    • viewport xá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 địa điểm đã ngừng hoạt động vĩnh viễn hoặc tạm thời (giá trị true). Không sử dụng permanently_closed. Thay vào đó, hãy sử dụng business_status để biết trạng thái hoạt động của các doanh nghiệp.
  • plus_code (xem Mã vị trí mởmã cộng) là một tham chiếu vị trí được mã hóa, được lấy từ tọa độ vĩ độ và kinh độ, đại diện cho một khu vực: 1/8000 của 1 độ là 1/8000 độ (khoảng 14 m x 14 m tại xích đạo) hoặc nhỏ hơn. Bạn có thể sử dụng mã cộng để thay thế cho địa chỉ đường phố ở các địa điểm không tồn tại (nơi các tòa nhà không được đánh số hoặc đường phố không được đặt tên).

    Mã cộng được định dạng như một mã toàn cầu và một mã phức hợp:

    • global_code là mã vùng gồm 4 ký tự và mã cục bộ dài 6 ký tự (849VCWC8+R9).
    • compound_code là mã cục bộ dài 6 ký tự trở lên có vị trí rõ ràng (CWC8+R9, Mountain View, CA, USA). Không được phân tích cú pháp nội dung này theo phương thức lập trình.
    Thông thường, cả mã chung và mã ghép đều được trả về. Tuy nhiên, nếu kết quả nằm ở một vị trí từ xa (ví dụ: đại dương hoặc sa mạc), thì chỉ có thể trả về mã toàn cầu.
  • html_attributions: Văn bản thuộc tính sẽ hiển thị cho kết quả địa điểm này.
  • icon: URL đến một tài nguyên hình ảnh có thể dùng để đại diện cho loại địa điểm này.
  • international_phone_number chứ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ụ: văn phòng của international_phone_number tại Sydney, Úc của Google là +61 2 9374 4000.
  • name: Tên địa điểm.
  • utc_offset Không dùng nữa trong Thư viện địa điểm, API JavaScript của Maps, hãy sử dụng utc_offset_minutes.
  • utc_offset_minutes chứa số phút theo múi giờ hiện tại của địa điểm này so với giờ UTC. Ví dụ: đối với các địa điểm ở Sydney, Úc trong giờ tiết kiệm ánh sáng ban ngày, giá trị này sẽ là 660 (+11 giờ tính từ UTC) và đối với các địa điểm ở California ngoài giờ tiết kiệm ánh sáng ban ngày, giá trị này sẽ là -480 (-8 giờ so với giờ UTC).
  • opening_hours chứa các thông tin sau:
    • open_now (Không được dùng nữa trong Thư viện Địa điểm, API JavaScript của Maps; hãy sử dụng opening_hours.isOpen() để thay thế. Xem video này để biết cách sử dụng isOpen với Thông tin chi tiết về địa điểm.) là một giá trị boolean cho biết địa điểm có mở cửa tại thời điểm hiện tại hay không.
    • periods[] là một chuỗi các khoảng thời gian mở cửa trong 7 ngày, bắt đầu từ Chủ Nhật, theo trình tự thời gian. Mỗi giai đoạn chứa:
      • open chứa một cặp đối tượng ngày và giờ mô tả thời điểm địa điểm mở cửa:
        • day một số từ 0–6, tương ứng với các ngày trong tuần, bắt đầu từ Chủ Nhật. Ví dụ: 2 có nghĩa là Thứ Ba.
        • time có thể chứa thời gian trong ngày ở định dạng hhmm 24 giờ (các giá trị nằm trong khoảng 0000–2359). time sẽ được báo cáo theo múi giờ của địa điểm.
      • close có 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ở, thì phần close sẽ bị thiếu trong phản hồi. Các ứng dụng có thể dựa vào việc luôn mở được đại diện dưới dạng khoảng thời gian open chứa day với giá trị 0 và time có giá trị 0000 và không có close.
    • weekday_text là một mảng gồm bảy chuỗi đại diện cho giờ mở cửa được định dạng cho mỗi ngày trong tuần. Nếu một tham số language được chỉ định trong yêu cầu Thông tin chi tiết về địa điểm, Dịch vụ địa điểm sẽ định dạng và bản địa hoá giờ mở cửa phù hợp cho 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 từ thứ Hai trong khi các 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 địa điểm đã ngừng hoạt động vĩnh viễn hoặc tạm thời (giá trị true). Không sử dụng permanently_closed. Thay vào đó, hãy sử dụng business_status để biết trạng thái hoạt động của các doanh nghiệp.
  • photos[]: một mảng các đối tượng PlacePhoto. Bạn có thể sử dụng PlacePhoto để lấy ảnh bằng phương thức getUrl(), hoặc bạn có thể kiểm tra đối tượng để biết 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 thuộc tính được hiển thị với ảnh địa điểm này.
  • place_id: Giá trị nhận dạng dạng văn bản giúp nhận dạng duy nhất một địa điểm và có thể dùng để truy xuất thông tin về địa điểm đó qua yêu cầu liên quan đến Thông tin chi tiết về đị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: Xếp hạng của địa điểm, từ 0.0 đến 5.0, dựa trên các bài đánh giá tổng hợp của người dùng.
  • reviews một mảng gồm tối đa năm 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ượng PlaceAspectRating, mỗi đối tượng cung cấp một điểm xếp hạng cho một thuộc tính duy nhất của cơ sở. Đối tượng đầu tiên trong mảng được coi là khía cạnh chính. Mỗi PlaceAspectRating được định nghĩa là:
      • type tên của chương trình đang được xếp hạng. Các loại sau được hỗ trợ: appeal, atmosphere, decor, facilities, food, overall, qualityservice.
      • rating xếp hạng của người dùng cho khía cạnh cụ thể này, từ 0 đến 3.
    • author_name tên của người dùng đã gửi bài đánh giá. Các bài đánh giá ẩn danh được gán cho "Người dùng Google". Nếu bạn đặt một tham số ngôn ngữ, thì cụm từ "Một người dùng Google" sẽ trả về một chuỗi đã được bản địa hoá.
    • author_url URL đến hồ sơ trên Google+ của người dùng, nếu có.
    • language một mã ngôn ngữ IETF cho biết ngôn ngữ 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 và không chứa thẻ phụ cho biết quốc gia hoặc khu vực. Ví dụ: tất cả các bài đánh giá bằng tiếng Anh được gắn thẻ là "en" thay vì "en-AU" hoặc "en-UK", v.v.
    • rating xếp hạng chung của người dùng cho địa điểm này. Đây là một số nguyên, có giá trị từ 1 đến 5.
    • text bài đánh giá của người dùng. Khi đánh giá một vị trí bằng Google Địa điểm, các đánh giá bằng văn bản được coi là tùy chọn; do đó, trường này có thể trống.
  • types Một loạt 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 giới thiệu 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 của Google cho địa điểm này. Đây là trang do Google sở hữu có chứa thông tin tốt nhất về địa điểm này. Các ứng dụng phải liên kết 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: Một địa chỉ đơn giản hóa cho địa điểm, bao gồm tên đường, số nhà và vị trí, 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 Sydney của Úc ở Úc có giá trị vicinity5/48 Pirrama Road, Pyrmont. Thuộc tính vicinity chỉ được trả về cho một Tìm kiếm lân cận.
  • website liệt kê các trang web có căn cứ cho địa điểm này, chẳng hạn như trang chủ của doanh nghiệp.

Lưu ý: Xếp hạng đa chiều có thể không có sẵn cho tất cả địa điểm. Nếu có quá ít bài đánh giá, thì câu trả lời chi tiết sẽ bao gồm điểm xếp hạng cũ trên thang điểm từ 0 đến 5 (nếu có) hoặc hoàn toàn không có điểm xếp hạng.

Tham chiếu địa điểm với ID địa điểm

ID địa điểm là tham chiếu duy nhất đến một địa điểm trên Google Map. Mã địa điểm có sẵn cho hầu hết địa điểm, 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 tìm mã có trong PlaceResult của yêu cầu Chi tiết hoặc Tìm kiếm địa điểm. Sau đó, bạn có thể sử dụng mã địa điểm này để tra cứu Thông tin chi tiết về địa điểm.

Mã địa điểm không được hạn chế lưu vào bộ nhớ đệm nêu trong Mục 3.2.3(a) 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ữ 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 bài viết 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

Tính năng Place Photo cho phép bạn thêm nội dung ảnh chất lượng cao vào trang web của mình. 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 Địa điểm và Google+ Địa phương. Khi bạn nhận được thông tin địa điểm bằng cách sử dụng yêu cầu Chi tiết địa điểm, tham chiếu ảnh sẽ được trả về cho nội dung ảnh có liên quan. Các yêu cầu Tìm kiếm lân cận và Tìm kiếm văn bản cũng trả về một tham chiếu ảnh duy nhất cho mỗi địa điểm khi phù hợp. Sau đó, 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.

Một mảng các đối tượng PlacePhoto sẽ được trả về như một phần của đối tượng PlaceResult cho mọi yêu cầu getDetails(), textSearch() hoặc nearbySearch() dựa trên PlacesService.

Lưu ý: Số lượng ảnh trả về sẽ khác nhau tùy theo yêu cầu.

  • Tìm kiếm lân cận 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 Thông tin chi tiết sẽ trả về tối đa mười đố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ệ. Đối tượng PhotoOptions cho phép bạn chỉ định chiều cao và chiều rộng mong muốn tối đa cho hình ảnh. Nếu bạn chỉ định giá trị cho cả maxHeightmaxWidth, thì dịch vụ ảnh sẽ đổi kích thước hình ảnh thành nhỏ hơn trong hai kích thước, trong khi vẫn duy trì tỷ lệ khung hình gốc.

Đ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. Ảnh đá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ó nguồn gốc từ nhiều vị trí, bao gồm chủ doanh nghiệp và ảnh do người dùng đóng góp. Trong hầu hết trường hợp, bạn có thể sử dụng các ảnh này mà không cần ghi nhận tác giả hoặc sẽ đưa thuộc tính bắt buộc vào hình ảnh. Tuy nhiên, nếu phần tử photo được trả về bao gồm một giá trị trong trường html_attributions, thì bạn phải thêm các thuộc tính 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.