Di chuyển sang Nearby Search mới

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Trang này giải thích sự khác biệt giữa tính năng tìm kiếm lân cận được dùng trong lớp Place (mới) và PlacesService (cũ), đồng thời cung cấp một số đoạn mã để so sánh.

  • PlacesService cũ có phương thức nearbySearch(), cho phép bạn tìm kiếm địa điểm trong một khu vực được chỉ định theo từ khoá hoặc loại.
  • Lớp Place có phương thức searchNearby(), cho phép bạn tìm kiếm địa điểm trong một khu vực được chỉ định theo loại địa điểm, sử dụng nhiều trường dữ liệu địa điểm và loại địa điểm hơn để linh hoạt hơn.

Bảng sau đây liệt kê một số điểm khác biệt chính trong các phương thức tìm kiếm lân cận giữa lớp PlacePlacesService:

PlacesService (Cũ) Place (Mới)
nearbySearch()
searchNearby()
PlaceSearchRequest SearchNearbyRequest
Yêu cầu sử dụng lệnh gọi lại để xử lý đối tượng kết quả và google.maps.places.PlacesServiceStatus phản hồi. Sử dụng Lời hứa và hoạt động không đồng bộ.
Yêu cầu kiểm tra PlacesServiceStatus. Không cần kiểm tra trạng thái, có thể sử dụng tính năng xử lý lỗi tiêu chuẩn. Tìm hiểu thêm.
Chỉ hỗ trợ độ lệch vị trí. Hỗ trợ độ lệch vị trí và hạn chế vị trí.
Trả về tất cả các trường dữ liệu hiện có (một tập hợp con của các trường được hỗ trợ); không thể giới hạn ở các trường cụ thể. Chỉ trả về các trường dữ liệu địa điểm được yêu cầu; lớp Place cung cấp nhiều trường hơn và thường xuyên cập nhật.
Giới hạn ở một tập hợp cố định các loại địa điểm. Truy cập vào nhiều loại địa điểm hơn và thường xuyên cập nhật .
Hỗ trợ tìm kiếm dựa trên văn bản bằng từ khoá . Không được hỗ trợ tìm kiếm văn bản, hãy sử dụng Tìm kiếm văn bản (Mới) thay thế.

So sánh mã

Phần này so sánh mã cho các phương thức tìm kiếm lân cận để minh hoạ sự khác biệt giữa Dịch vụ địa điểm và lớp Địa điểm. Các đoạn mã cho thấy mã cần thiết trên từng API tương ứng để đưa ra yêu cầu tìm kiếm dựa trên văn bản.

Tìm kiếm lân cận (Cũ)

Tính năng Nearby Search cũ cho phép bạn tìm kiếm địa điểm trong một khu vực được chỉ định theo từ khoá hoặc loại. Không có cách nào để giới hạn tìm kiếm bằng cách sử dụng các trường dữ liệu địa điểm, để tất cả các trường hiện có được trả về theo từng yêu cầu. Đoạn mã sau đây cho thấy việc gọi nearbySearch() để trả về thông tin về các nhà hàng ở Sydney, Úc. Yêu cầu này là đồng bộ, sử dụng lệnh gọi lại và bao gồm một điều kiện bắt buộc để kiểm tra PlacesServiceStatus.

let map;
let service;

function initMap() {
  const sydney = new google.maps.LatLng(-33.867, 151.195);

  map = new google.maps.Map(document.getElementById("map"), {
    center: sydney,
    zoom: 15,
  });

  const request = {
    location: sydney,
    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]);
    }
  }
}

// Helper function to create markers.
function createMarker(place) {
  if (!place.geometry || !place.geometry.location) return;

  const marker = new google.maps.Marker({
    map,
    position: place.geometry.location,
    title: place.name,
  });
}

Tìm hiểu thêm

Tìm kiếm lân cận (Mới)

Phiên bản mới của tính năng Tìm kiếm lân cận cải thiện phiên bản cũ theo những cách sau:

  • Khả năng chỉ định trường dữ liệu địa điểm cần trả về.
  • Sử dụng Lời hứa cho phép hoạt động không đồng bộ.
  • Không cần kiểm tra trạng thái của PlacesService; bạn có thể sử dụng tính năng xử lý lỗi tiêu chuẩn.

Đoạn mã sau đây cho thấy một hàm đưa ra yêu cầu Nearby Search cho các nhà hàng. Ví dụ này cho thấy cách sử dụng tuỳ chọn rankPreference để xếp hạng kết quả tìm kiếm theo mức độ phổ biến (trong phiên bản trước, thứ hạng được chỉ định bằng cách sử dụng tuỳ chọn rankBy). Vì phương thức searchNearby() sử dụng toán tử await, nên bạn chỉ có thể sử dụng phương thức này bên trong hàm async.

async function nearbySearch() {
  // Restrict within the map viewport.
  let center = new google.maps.LatLng(52.369358, 4.889258);
  const request = {
    // Required parameters.
    fields: ["displayName", "location", "businessStatus"],
    locationRestriction: {
      center: center,
      radius: 500,
    },
    // Optional parameters.
    includedPrimaryTypes: ["restaurant"],
    maxResultCount: 5,
    rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,
    language: "en-US",
    region: "us",
  };

  const { places } = await google.maps.places.Place.searchNearby(request);

  if (places.length) {
    console.log(places);

    // Create a new bounds, which will be extended with each result.
    const bounds = new google.maps.LatLngBounds();

    // Loop through and get all the results.
    places.forEach((place) => {
      const markerView = new google.maps.marker.AdvancedMarkerElement({
        map,
        position: place.location,
        title: place.displayName,
      });

      bounds.extend(place.location);
      console.log(place);
    });
    map.fitBounds(bounds);
  } else {
    console.log("No results");
  }
}

Tìm hiểu thêm