새 장소 검색으로 이전

유럽 경제 지역 (EEA) 개발자

이 페이지에서는 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도 지원됨)

자세히 알아보기