遷移至新版 Nearby Search
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
本頁面說明 Place
類別 (新版) 和 PlacesService
(舊版) 中使用的鄰近搜尋功能差異,並提供一些程式碼片段以供比較。
- 舊版
PlacesService
具有 nearbySearch()
方法,可讓您依關鍵字或類型,搜尋指定區域內的地點。
Place
類別具有 searchNearby()
方法,可讓您依地點類型搜尋指定區域內的地點,並利用擴大的地點資料欄位和地點類型選取範圍,提供更大的彈性。
下表列出 Place
類別和 PlacesService
之間,附近搜尋方法的一些主要差異:
程式碼比較
本節會比較鄰近搜尋方法的程式碼,說明 Places 服務和 Place 類別之間的差異。程式碼片段會顯示各個 API 進行文字搜尋要求時所需的程式碼。
Nearby Search (Legacy)
舊版「搜尋附近」可讓您依照關鍵字或類型,搜尋指定區域內的地點。您無法使用地點資料欄位限制搜尋,因此每次要求都會傳回所有可用欄位。以下程式碼片段顯示如何呼叫 nearbySearch()
,傳回澳洲雪梨的餐廳資訊。這項要求是同步要求,會使用回呼,並包含 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,
});
}
瞭解詳情
Nearby Search (新版)
新版 Nearby Search 在以下方面有所改進:
- 可指定要傳回的地點資料欄位。
- 使用 Promise,可啟用非同步作業。
- 不需要檢查
PlacesService
的狀態,可以改用標準錯誤處理程序。
下列程式碼片段顯示的函式會對餐廳發出「附近搜尋」要求。這個範例顯示如何使用 rankPreference
選項,依熱門程度排序搜尋結果 (在舊版中,排序方式是使用 rankBy
選項指定)。由於 searchNearby()
方法使用 await
運算子,因此只能在 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");
}
}
瞭解詳情
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-08-31 (世界標準時間)。
[null,null,["上次更新時間:2025-08-31 (世界標準時間)。"],[],[],null,["# Migrate to the new Nearby Search\n\n\u003cbr /\u003e\n\n**European Economic Area (EEA) developers** If your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](/maps/comms/eea/faq).\n\nThis page explains the differences between nearby search as used in the\n[`Place`](/maps/documentation/javascript/reference/place) class (new) and the\n[`PlacesService`](/maps/documentation/javascript/reference/places-service)\n(legacy), and provides some code snippets for comparison.\n\n- The legacy `PlacesService` has a `nearbySearch()` method, which lets you search for places within a specified area by keyword or type.\n- The `Place` class has a `searchNearby()` method which lets you search for places within a specified area by place type, utilizing an expanded selection of place data fields and place types for greater flexibility.\n\nThe following table lists some of the main differences in nearby search methods\nbetween the `Place` class and `PlacesService`:\n\n| [`PlacesService`](/maps/documentation/javascript/reference/places-service) (Legacy) | [`Place`](/maps/documentation/javascript/reference/place) (New) |\n|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [`nearbySearch()`](/maps/documentation/javascript/reference/places-service#PlacesService.nearbySearch) | [`searchNearby()`](/maps/documentation/javascript/reference/place#Place.searchNearby) |\n| [`PlaceSearchRequest`](/maps/documentation/javascript/reference/places-service#PlaceSearchRequest) | [`SearchNearbyRequest`](/maps/documentation/javascript/reference/place#SearchNearbyRequest) |\n| Requires the use of a callback to handle the results object and `google.maps.places.PlacesServiceStatus` response. | Uses Promises, and works asynchronously. |\n| Requires a `PlacesServiceStatus` check. | No required status check, can use standard error handling. [Learn more](/maps/documentation/javascript/reference/errors). |\n| Supports only location bias. | Supports location bias and location restriction. |\n| Returns all available data fields (a [subset of the supported fields](/maps/documentation/places/web-service/place-data-fields#places-api-fields-support)); cannot be constrained to specific fields. | Returns only the requested [place data fields](/maps/documentation/javascript/place-class-data-fields); the `Place` class offers an expanded and regularly updated selection of fields. |\n| Limited to a fixed set of [place types](/maps/documentation/javascript/supported_types). | Access an expanded and regularly updated selection of [place types](/maps/documentation/javascript/place-types). |\n| Supported text-based search with the [keyword](/maps/documentation/javascript/reference/places-service#PlaceSearchRequest.keyword). | Text-based search is not supported, use [Text Search (New)](/maps/documentation/javascript/places-migration-search#place-class-new) instead. |\n\nCode comparison\n---------------\n\nThis section compares code for nearby search methods to illustrate the\ndifferences between the Places Service and the\nPlace class. The code snippets show the code\nrequired on each respective API to make a text-based search request.\n\n### Nearby Search (Legacy)\n\nThe legacy Nearby Search lets you search for places within a specified area by\nkeyword or type. There is no way to constrain searches by using place data\nfields, so that all of the available fields are returned with each request.\nThe following snippet shows calling `nearbySearch()` to return information about\nrestaurants in Sydney, Australia. The request is synchronous, uses a callback,\nand includes a required conditional check on `PlacesServiceStatus`. \n\n let map;\n let service;\n\n function initMap() {\n const sydney = new google.maps.LatLng(-33.867, 151.195);\n\n map = new google.maps.Map(document.getElementById(\"map\"), {\n center: sydney,\n zoom: 15,\n });\n\n const request = {\n location: sydney,\n radius: '500',\n type: ['restaurant']\n };\n\n service = new google.maps.places.PlacesService(map);\n service.nearbySearch(request, callback);\n }\n\n function callback(results, status) {\n if (status == google.maps.places.PlacesServiceStatus.OK) {\n for (var i = 0; i \u003c results.length; i++) {\n createMarker(results[i]);\n }\n }\n }\n\n // Helper function to create markers.\n function createMarker(place) {\n if (!place.geometry || !place.geometry.location) return;\n\n const marker = new google.maps.Marker({\n map,\n position: place.geometry.location,\n title: place.name,\n });\n }\n\n#### Learn more\n\n- [See the documentation for legacy Nearby Search](/maps/documentation/javascript/places#place_search_requests)\n- [See the `searchNearby()` reference](/maps/documentation/javascript/reference/places-service#PlacesService.nearbySearch)\n\n### Nearby Search (New)\n\nThe new version of Nearby Search improves upon its predecessor in the following\nways:\n\n- The ability to specify which place data fields to return.\n- The use of Promises which enables asynchronous operation.\n- No need to check for the status of `PlacesService`; standard error handling can be used instead.\n\nThe following code snippet shows a function which makes a Nearby Search request\nfor restaurants. This example shows using the `rankPreference` option to rank\nsearch results by popularity (in the previous version ranking is specified\nusing the `rankBy` option). Because the `searchNearby()` method uses the `await`\noperator it can only be used inside an `async` function. \n\n async function nearbySearch() {\n // Restrict within the map viewport.\n let center = new google.maps.LatLng(52.369358, 4.889258);\n const request = {\n // Required parameters.\n fields: [\"displayName\", \"location\", \"businessStatus\"],\n locationRestriction: {\n center: center,\n radius: 500,\n },\n // Optional parameters.\n includedPrimaryTypes: [\"restaurant\"],\n maxResultCount: 5,\n rankPreference: google.maps.places.SearchNearbyRankPreference.POPULARITY,\n language: \"en-US\",\n region: \"us\",\n };\n\n const { places } = await google.maps.places.Place.searchNearby(request);\n\n if (places.length) {\n console.log(places);\n\n // Create a new bounds, which will be extended with each result.\n const bounds = new google.maps.LatLngBounds();\n\n // Loop through and get all the results.\n places.forEach((place) =\u003e {\n const markerView = new google.maps.marker.AdvancedMarkerElement({\n map,\n position: place.location,\n title: place.displayName,\n });\n\n bounds.extend(place.location);\n console.log(place);\n });\n map.fitBounds(bounds);\n } else {\n console.log(\"No results\");\n }\n }\n\n#### Learn more\n\n- [See the complete example code](/maps/documentation/javascript/examples/place-nearby-search)\n- [See the documentation for Nearby Search (New)](/maps/documentation/javascript/nearby-search)\n- [See the `searchNearby()` reference](/maps/documentation/javascript/reference/place#Place.searchNearby)"]]