이 페이지에서는 Place
클래스 (신규)와 PlacesService
(기존)의 텍스트 기반 장소 검색 기능의 차이점을 설명하고 비교할 수 있는 몇 가지 코드 스니펫을 제공합니다.
기존 PlacesService
에는 다음과 같은 텍스트 기반 검색 메서드가 있습니다.
- 텍스트 쿼리를 받아 단일 장소 결과를 반환하고 장소 데이터 필드 사용을 지원하는
findPlaceFromQuery()
메서드 - 전화번호를 사용하여 장소를 검색하고 장소 데이터 필드 사용을 지원하는
findPlaceFromPhoneNumber()
메서드입니다. - 텍스트 쿼리를 받아 장소 결과 목록을 반환하는
textSearch()
메서드textSearch()
는 이전 버전이며 장소 데이터 필드 사용을 지원하지 않습니다.
새 Place
클래스는 Place.searchByText()
메서드를 제공합니다. 이 메서드를 사용하면 텍스트 쿼리 또는 전화번호를 사용하여 장소를 검색하고 정기적으로 업데이트되는 다양한 장소 데이터 필드 및 장소 유형을 사용하여 검색을 맞춤설정할 수 있습니다.
다음 표에는 Place
클래스와 PlacesService
의 장소 검색 메서드 간의 주요 차이점이 나와 있습니다.
PlacesService (기존) |
Place (신규) |
---|---|
findPlaceFromQuery() findPlaceFromPhoneNumber()
|
searchByText() |
FindPlaceFromQueryRequest FindPlaceFromPhoneNumberRequest |
SearchByTextRequest |
제한된 쿼리 옵션 | 더 광범위한 검색 옵션 |
결과 객체와 google.maps.places.PlacesServiceStatus 응답을 처리하려면 콜백을 사용해야 합니다. |
Promise를 사용하며 비동기식으로 작동합니다. |
PlacesServiceStatus 검사가 필요합니다. |
필수 상태 검사가 없으며 표준 오류 처리를 사용할 수 있습니다. |
위치 편향만 지원합니다. | 위치 편향 및 위치 제한을 지원합니다. |
장소 데이터 필드의 형식은 스네이크 표기법을 사용합니다. | 장소 데이터 필드의 형식은 케멜케이스를 사용합니다. |
단일 장소 결과를 반환합니다. | 최대 20개의 장소 결과를 반환합니다. |
고정된 장소 유형 및 장소 데이터 필드 집합으로 제한됩니다. | 정기적으로 업데이트되는 확대된 장소 유형 및 장소 데이터 필드를 제공합니다. |
textSearch() |
searchByText() |
사용 가능한 모든 데이터 필드 (지원되는 필드의 하위 집합)를 반환합니다. 특정 필드로 제한할 수 없습니다. | 요청된 장소 데이터 필드만 반환합니다. |
코드 비교
이 섹션에서는 텍스트 검색 메서드의 코드를 비교하여 장소 서비스와 장소 클래스의 차이점을 보여줍니다. 코드 스니펫은 텍스트 기반 검색 요청을 실행하는 데 각 API에 필요한 코드를 보여줍니다.
장소 서비스 (기존)
다음 코드 스니펫은 findPlaceFromQuery()
메서드를 사용하여 장소를 검색하는 방법을 보여줍니다. 요청은 동기식이며 PlacesServiceStatus
에 대한 조건부 검사를 포함합니다. 필요한 장소 데이터 필드는 실제 요청을 실행하기 전에 정의된 요청 본문에 지정됩니다.
function findPlaces() {
const request = {
query: "Museum of Contemporary Art Australia",
fields: ["name", "geometry"],
};
// Create an instance of PlacesService.
service = new google.maps.places.PlacesService(map);
// Make a findPlaceFromQuery request.
service.findPlaceFromQuery(request, (results, status) => {
let place = results[0];
if (status === google.maps.places.PlacesServiceStatus.OK && results) {
if (!place.geometry || !place.geometry.location) return;
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
});
map.setCenter(place.geometry.location);
}
});
}
자세히 알아보기
텍스트 검색(신규)
다음 코드 스니펫은 searchByText()
메서드를 사용하여 장소를 검색하는 방법을 보여줍니다. 요청은 비동기이며 상태 확인이 필요하지 않습니다(표준 오류 처리를 사용할 수 있음). 이 예시에서 요청에는 maxResultCount
8이 포함됩니다 (값은 1~20 사이여야 함). 이 함수는 결과를 반복하고 각 결과에 마커를 추가하여 마커의 위치를 기반으로 지도 경계를 조정합니다. searchByText()
메서드는 await
연산자를 사용하므로 async
함수 내에서만 사용할 수 있습니다.
async function findPlaces() {
// Define a request.
// The `fields` property is required; all others are optional.
const request = {
fields: ["displayName", "location", "businessStatus"],
textQuery: "Tacos in Mountain View",
includedType: "restaurant",
locationBias: { lat: 37.4161493, lng: -122.0812166 },
isOpenNow: true,
language: "en-US",
maxResultCount: 8,
minRating: 3.2,
region: "us",
useStrictTypeFiltering: false,
};
// Call searchByText passing the request.
const { places } = await google.maps.places.Place.searchByText(request);
// Add a marker for each result.
if (places.length) {
const bounds = new google.maps.LatLngBounds();
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");
}
}
searchByText()
메서드는 다음을 비롯하여 이전 버전보다 더 많은 요청 옵션을 지원합니다.
includedType
: 검색을 특정 장소 유형으로 제한할 수 있습니다.isOpenNow
: 영업 중인 장소만 반환되도록 검색을 제한할 수 있습니다.minRating
: 지정된 한도 미만의 결과를 필터링할 수 있습니다 (예: 별 3개 이상인 장소만 반환).locationRestriction
: 지정된 위치 외부의 결과를 생략합니다(locationBias
도 지원됨).