장소 라이브러리

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

개요

장소 라이브러리, Maps JavaScript API의 함수를 사용하면 애플리케이션에서 지도의 경계나 고정된 지점 주변의 정의된 영역에 포함된 장소 (이 API에서 시설, 지리적 위치 또는 주요 관심 장소로 정의됨)를 검색할 수 있습니다.

Places API는 애플리케이션에 Google 지도 검색창의 예상 검색어 검색 동작을 제공하는 데 사용할 수 있는 자동 완성 기능을 제공합니다. 사용자가 주소를 입력하기 시작하면 자동 완성이 나머지를 완성합니다. 자세한 내용은 자동 완성 문서를 참고하세요.

시작하기

Maps JavaScript API 또는 자바스크립트에 대해 잘 모르는 경우 시작하기 전에 자바스크립트를 검토하고 API 키를 가져오세요.

API 사용 설정

Maps JavaScript API에서 장소 라이브러리를 사용하려면 먼저 Maps JavaScript API에 대해 설정한 동일한 프로젝트의 Google Cloud Console에서 Places API가 사용 설정되어 있는지 확인합니다.

활성화된 API 목록을 보려면:

  1. Google Cloud Console로 이동합니다.
  2. 프로젝트 선택 버튼을 클릭한 후 Maps JavaScript API에 설정한 것과 동일한 프로젝트를 선택하고 열기를 클릭합니다.
  3. 대시보드의 API 목록에서 Places API를 찾습니다.
  4. 목록에 Places API가 표시되면 이미 사용 설정된 것입니다. API가 표시되지 않으면 사용 설정합니다.
    1. 페이지 상단에서 API 및 서비스 사용 설정을 선택하여 라이브러리 탭을 표시합니다. 또는 왼쪽 사이드 메뉴에서 라이브러리를 선택합니다.
    2. Places API를 검색한 후 결과 목록에서 선택합니다.
    3. 사용 설정을 선택합니다. 프로세스가 완료되면 Places API대시보드에 API 목록이 나타납니다.

라이브러리 로드

장소 서비스는 기본 Maps JavaScript API 코드와는 별도로 독립적인 라이브러리입니다. 이 라이브러리에 포함된 기능을 사용하려면 먼저 Maps API 부트스트랩 URL의 libraries 매개변수를 사용하여 로드해야 합니다.

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initMap">
</script>

자세한 내용은 라이브러리 개요를 참고하세요.

API 키의 API 제한 목록에 Places API 추가

키에 API 제한을 적용하면 API 키 사용이 하나 이상의 API 또는 SDK로 제한됩니다. API 키와 연결된 API 또는 SDK에 대한 요청이 처리됩니다. API 키와 연결되지 않은 API 또는 SDK에 대한 요청은 실패합니다. 장소 라이브러리, Maps JavaScript API에서 사용할 API 키를 제한하려면 다음 안내를 따르세요.
  1. Google Cloud Console로 이동합니다.
  2. 프로젝트 드롭다운을 클릭하고 보호할 API 키가 포함된 프로젝트를 선택합니다.
  3. 메뉴 버튼 을 클릭하고 Google Maps Platform > 사용자 인증 정보를 선택합니다.
  4. 사용자 인증 정보 페이지에서 보호하려는 API 키의 이름을 클릭합니다.
  5. API 키 제한 및 이름 바꾸기 페이지에서 제한을 설정합니다.
    • API 제한
      • 키 제한을 선택합니다.
      • API 선택을 클릭하고 Maps JavaScript APIPlaces API를 모두 선택합니다.
        (하나의 API가 표시되지 않으면 사용 설정해야 합니다.)
  6. 저장을 클릭합니다.

사용 제한 및 정책

할당량

Places Library, JavaScript API는 Places API의 사용량 한도 문서에 설명된 대로 Places API와 사용 할당량을 공유합니다. 동일한 프로젝트를 공유하는 사용자 수에 상관없이 사용자 세션당 초당 쿼리 비율 제한이 적용됩니다.*

참고: API를 처음 로드하면 초기 요청 할당량이 할당됩니다. 이 할당량을 사용하면 API가 추가 요청에 대해 초당 한도를 적용합니다. 특정 기간 내에 너무 많은 요청이 이루어지면 API는 OVER_QUERY_LIMIT 응답 코드를 반환합니다. 세션당 비율 제한으로 인해 일괄 요청에 클라이언트 측 서비스를 사용할 수 없습니다. 일괄 요청의 경우 웹 서비스 API를 사용합니다.

정책

장소 라이브러리, Maps JavaScript API를 사용하려면 Places API에 설명된 정책을 준수해야 합니다.

장소 검색

장소 서비스를 통해 다음과 같은 검색을 수행할 수 있습니다.

  • 쿼리에서 장소 찾기는 텍스트 쿼리 (예: 장소의 이름이나 주소)를 기반으로 장소를 반환합니다.
  • 전화번호에서 장소 찾기는 전화번호를 기준으로 장소를 반환합니다.
  • Nearby Search는 사용자의 위치를 기준으로 주변 장소 목록을 반환합니다.
  • 텍스트 검색은 검색 문자열을 기반으로 주변 장소 목록을 반환합니다. 예: '피자')을 기준으로 주변 지역 정보의 목록을 반환합니다.
  • 장소 세부정보 요청은 사용자 리뷰를 비롯하여 특정 장소에 대한 자세한 정보를 반환합니다.

반환된 정보에는 식당, 매장 및 사무실 등의 시설과 주소, 마을, 도시와 같은 정치적 지역 및 기타 관심 장소를 나타내는 지오코딩 결과가 포함될 수 있습니다.

Find Place 요청

Find Place 요청을 사용하면 텍스트 쿼리 또는 전화번호로 장소를 검색할 수 있습니다. Find Place 요청에는 다음 두 가지 유형이 있습니다.

쿼리에서 장소 찾기

Query Find Place는 텍스트 입력을 받아 장소를 반환합니다. 비즈니스 이름 또는 주소와 같이 모든 유형의 장소 데이터를 입력할 수 있습니다. 쿼리로 Find Place를 요청하려면 다음 매개변수를 사용하는 PlaceServicefindPlaceFromQuery() 메서드를 호출합니다.

  • query(필수) 검색할 텍스트 문자열입니다(예: "restaurant" 또는 "123 Main Street"). 장소 이름, 주소 또는 시설의 카테고리여야 합니다. 다른 유형의 입력을 사용하면 오류가 발생할 수 있으며 유효한 결과가 반환되지 않을 수 있습니다. Places API는 이 문자열을 기준으로 후보 일치 항목을 반환하고 인지된 관련성을 기준으로 결과의 순서를 지정합니다.
  • fields (필수) 반환할 장소 데이터 유형을 지정하는 하나 이상의 필드입니다.
  • locationBias (선택사항) 검색할 영역을 정의하는 좌표입니다. 다음 중 하나일 수 있습니다.

또한 findPlaceFromQuery()에 콜백 메서드를 전달하여 결과 객체와 google.maps.places.PlacesServiceStatus 응답을 처리해야 합니다.

다음 예에서는 namegeometry 필드를 비롯하여 '오스트레일리아 현대 미술관'을 검색하는 findPlaceFromQuery() 호출을 보여줍니다.

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);
    }
  });
}
예시 보기

전화번호에서 장소 찾기

전화번호에서 장소 찾기는 전화번호를 이용하여 장소를 반환합니다. 전화번호에서 Find Place를 요청하려면 다음 매개변수를 사용하는 PlaceServicefindPlaceFromPhoneNumber() 메서드를 호출합니다.

  • phoneNumber(필수) E.164 형식의 전화번호입니다.
  • fields(필수) 반환할 장소 데이터 유형을 지정하는 하나 이상의 필드입니다.
  • locationBias(선택사항) 검색할 영역을 정의하는 좌표입니다. 다음 중 하나일 수 있습니다.

또한 findPlaceFromPhoneNumber()에 콜백 메서드를 전달하여 결과 객체와 google.maps.places.PlacesServiceStatus 응답을 처리해야 합니다.

필드 (장소 찾기 메서드)

fields 매개변수를 사용하여 반환할 장소 데이터 유형 배열을 지정합니다. 예를 들면 fields: ['formatted_address', 'opening_hours', 'geometry']입니다. 복합 값을 지정할 때 점을 사용하세요. 예: opening_hours.weekday_text

필드는 장소 검색결과에 해당하며 세 가지 결제 카테고리(Basic, Contact, Atmosphere)로 구분됩니다. 기본 필드에는 기본 요율로 청구되며 추가 요금이 발생하지 않습니다. Contact 및 Atmosphere 필드에는 더 높은 요금이 청구됩니다. 자세한 내용은 가격표를 참고하세요. 기여 분석 (html_attributions)은 필드 요청 여부와 관계없이 항상 호출할 때마다 반환됩니다.

Basic

기본 카테고리에는 다음 필드가 포함됩니다.
business_status, formatted_address, geometry, icon,icon_mask_base_uri, icon_background_color, name, permanently_closed (지원 중단됨), photos, place_id, plus_code, types

연락처

연락처 카테고리에는 다음 필드가 포함됩니다. opening_hours
(Maps JavaScript API의 장소 라이브러리에서는 지원 중단됨). Place Details 요청을 사용하여 opening_hours 결과를 얻습니다).

분위기

분위기 카테고리에는 다음 필드가 포함됩니다. price_level, rating, user_ratings_total

findPlaceFromQuery()findPlaceFromPhoneNumber() 메서드는 각각 동일한 필드 집합을 사용하며 각 응답에 동일한 필드를 반환할 수 있습니다.

위치 편향 설정 (Find Place 메서드)

locationBias 매개변수를 사용하여 Find Place가 특정 영역의 결과를 선호하도록 합니다. 다음과 같은 방법으로 locationBias을 설정할 수 있습니다.

특정 영역으로 편향 결과:

locationBias: {lat: 37.402105, lng: -122.081974}

검색할 직사각형 영역을 정의합니다.

locationBias: {north: 37.41, south: 37.40, east: -122.08, west: -122.09}

LatLngBounds를 사용할 수도 있습니다.

특정 영역을 중심으로 검색할 반경 (미터)을 정의합니다.

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

주변 검색 요청

Nearby Search를 사용하면 지정된 영역 내에서 키워드나 유형을 기준으로 장소를 검색할 수 있습니다. Nearby Search는 항상 위치를 포함해야 하며, 두 가지 방법 중 하나로 지정할 수 있습니다.

  • LatLngBounds
  • location 속성(LatLng 객체로 원의 중심 지정)과 미터로 측정된 반경을 조합하여 정의된 원형 영역입니다.

Places Nearby 검색은 PlacesServicenearbySearch() 메서드 호출로 시작되고 PlaceResult 객체의 배열을 반환합니다. nearbySearch() 메서드는 버전 3.9부터 search() 메서드를 대체합니다.

service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);

이 메서드는 다음 필드가 포함된 요청을 받습니다.

  • 다음 중 하나:
    • bounds: 직사각형 검색 영역을 정의하는 google.maps.LatLngBounds 객체입니다.
    • locationradius. 전자는 google.maps.LatLng 객체를 취하고 후자는 단순 정수를 취하여 원의 반경을 미터 단위로 나타냅니다. 허용되는 최대 반경은 50,000미터입니다. rankBy가 DISTANCE로 설정된 경우 location를 지정해야 하지만 radius이나 bounds은 지정할 수 없습니다.
  • keyword (선택사항) - 고객 리뷰 및 기타 제3자 콘텐츠는 물론 이름, 유형, 주소를 포함하되 이에 국한되지 않는 모든 사용 가능한 필드와 대조할 용어입니다.
  • minPriceLevelmaxPriceLevel(선택사항) - 지정된 범위 내의 장소로만 결과를 제한합니다. 유효한 값의 범위는 0(가장 저렴함)부터 4 (가장 비쌈)까지입니다.
  • name가 지원 중단되었습니다. keyword과 같습니다. 이 필드의 값은 keyword 필드의 값과 결합되어 동일한 검색 문자열의 일부로 전달됩니다.
  • openNow (선택사항) - 장소 값이 쿼리 전송 시 영업 중인 장소만 반환해야 함을 나타내는 부울 값입니다. 쿼리에 이 매개변수를 포함하면 Google 지역 정보 데이터베이스에 영업시간을 지정하지 않는 장소가 반환되지 않습니다. openNowfalse로 설정해도 효과가 없습니다.
  • rankBy (선택사항) - 결과가 표시되는 순서를 지정합니다. 가능한 값은 다음과 같습니다.
    • google.maps.places.RankBy.PROMINENCE(기본값) 이 옵션은 중요도를 기준으로 결과를 정렬합니다. 순위는 반경이 지정된 주변 지역보다 일치하더라도 덜 눈에 띄는 장소보다 선호됩니다. 명성은 Google 색인의 장소 순위, 글로벌 인기 및 기타 요인의 영향을 받을 수 있습니다. google.maps.places.RankBy.PROMINENCE을 지정하면 radius 매개변수가 필요합니다.
    • google.maps.places.RankBy.DISTANCE. 이 옵션은 지정된 location로부터의 거리를 기준으로 결과를 오름차순으로 정렬합니다(필수). RankBy.DISTANCE을 지정하면 맞춤 bounds 또는 radius을 지정할 수 없습니다. RankBy.DISTANCE를 지정하는 경우 keyword, name 또는 type 중 하나 이상이 필요합니다.
  • type: 지정된 유형과 일치하는 장소로 결과를 제한합니다. 한 가지 유형만 지정할 수 있습니다. 유형을 두 개 이상 제공하면 첫 번째 항목 다음에 나오는 모든 유형이 무시됩니다. 지원되는 유형 목록을 참조하세요.

또한 nearbySearch()에 콜백 메서드를 전달하여 결과 객체와 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]);
    }
  }
}

예 보기

텍스트 검색 요청

Google Places Text Search 서비스는 문자열에 따라 일련의 장소 관련 정보를 반환하는 웹 서비스입니다. 예를 들어 '뉴욕의 피자 가게'나 '오타와 주변'의 신발 가게 등이 있습니다. 서비스가 텍스트 문자열 및 설정된 위치 편향과 일치하는 장소 목록으로 응답합니다. 검색 응답에는 장소 목록이 포함됩니다. 장소 세부정보 요청을 전송하여 응답 내 모든 장소에 대해 자세히 알아볼 수 있습니다.

텍스트 검색은 PlacesServicetextSearch() 메서드 호출로 시작됩니다.

service = new google.maps.places.PlacesService(map);
service.textSearch(request, callback);

이 메서드는 다음 필드가 포함된 요청을 받습니다.

  • query(필수) 검색할 텍스트 문자열입니다(예: "restaurant" 또는 "123 Main Street"). 장소 이름, 주소 또는 시설의 카테고리여야 합니다. 다른 유형의 입력을 사용하면 오류가 발생할 수 있으며 유효한 결과가 반환되지 않을 수 있습니다. 장소 서비스는 이 문자열을 기준으로 후보 일치 항목을 반환하고 인지된 관련성을 기준으로 결과의 순서를 지정합니다. 검색 매개변수에서도 type 매개변수를 사용하는 경우 이 매개변수는 선택사항입니다.
  • 선택사항:
    • openNow — 쿼리 값이 전송된 시점에 장소 서비스가 영업 중인 장소만 반환해야 함을 나타내는 부울 값입니다. 쿼리에 이 매개변수를 포함하면 Google 지역 정보 데이터베이스에 영업시간을 지정하지 않는 장소가 반환되지 않습니다. openNowfalse로 설정해도 효과가 없습니다.
    • minPriceLevelmaxPriceLevel — 지정된 가격 수준 내의 장소로만 결과를 제한합니다. 유효한 값의 범위는 0(가장 저렴함)부터 4 (가장 비쌈)까지입니다.
    • 다음 중 하나:
      • bounds: 검색할 직사각형을 정의하는 google.maps.LatLngBounds 객체입니다.
      • locationradiuslocationradius 매개변수를 전달하여 결과를 특정 원에 편중할 수 있습니다. 이렇게 하면 장소 서비스에서 원 내의 결과를 우선적으로 표시하도록 지시합니다. 하지만 여전히 정의한 영역을 벗어난 결과가 표시될 수도 있습니다. 위치는 google.maps.LatLng 객체를 취하며 반경은 원의 반경을 나타내는 간단한 정수를 미터 단위로 사용합니다. 허용되는 최대 반경은 50,000미터입니다.
    • type: 지정된 유형과 일치하는 장소로 결과를 제한합니다. 한 가지 유형만 지정할 수 있습니다. 유형을 두 개 이상 제공하면 첫 번째 항목 다음에 나오는 모든 유형이 무시됩니다. 지원되는 유형 목록을 참조하세요.

또한 textSearch()에 콜백 메서드를 전달하여 결과 객체와 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]);
    }
  }
}

검색 응답

상태 코드

PlacesServiceStatus 응답 객체에는 요청의 상태가 포함되어 있으며, 장소 요청이 실패한 이유를 추적하는 데 도움이 되는 디버깅 정보가 포함될 수도 있습니다. 가능한 상태 값은 다음과 같습니다.

  • INVALID_REQUEST: 잘못된 요청입니다.
  • OK: 응답에 유효한 결과가 있습니다.
  • OVER_QUERY_LIMIT: 웹페이지가 요청 할당량을 초과했습니다.
  • REQUEST_DENIED: 웹페이지에서 PlacesService를 사용할 수 없습니다.
  • UNKNOWN_ERROR: 서버 오류로 인해 PlacesService 요청을 처리할 수 없습니다. 다시 시도하면 요청이 성공할 수도 있습니다.
  • ZERO_RESULTS: 이 요청에 대한 결과를 찾지 못했습니다.

장소 검색 결과

findPlace(), nearbySearch(), textSearch() 함수는 PlaceResult 객체의 배열을 반환합니다.

PlaceResult 객체에는 다음 속성이 포함될 수 있습니다.

  • business_status는 비즈니스인 경우 장소의 운영 상태를 나타냅니다. 다음 값 중 하나를 포함할 수 있습니다.
    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY
    데이터가 없으면 business_status가 반환되지 않습니다.
  • formatted_address는 사람이 읽을 수 있는 이 장소의 주소를 포함하는 문자열입니다. formatted_address 속성은 텍스트 검색에만 반환됩니다.

    이 주소는 대개 우편 주소와 동일합니다. 영국과 같은 일부 국가에서는 라이선스 제한으로 인해 실제 주소의 배포를 허용하지 않습니다.

    형식이 지정된 주소는 하나 이상의 주소 구성요소로 논리적으로 구성됩니다. 예를 들어 '주소: 111 8th Avenue, New York, NY'는 '111'(번지), '8th Avenue'(경로), 'New York'(도시) 및 'NY'(미국 주) 구성요소로 구성됩니다.

    형식이 지정된 주소를 프로그래매틱 방식으로 파싱하지 마세요. 대신 API 응답에 형식이 지정된 주소 입력란 외에 포함되는 개별 주소 구성요소를 사용해야 합니다.

  • geometry: 장소의 도형 관련 정보입니다. 여기에는 다음이 포함됩니다.
    • location는 장소의 위도와 경도를 제공합니다.
    • viewport는 이 장소를 볼 때 지도에서 선호하는 표시 영역을 정의합니다.
  • permanently_closed (지원 중단됨)은 장소가 영구적으로 폐업했는지 또는 일시적으로 폐업했는지 (true 값)를 나타내는 부울 플래그입니다. permanently_closed를 사용하지 마세요. 비즈니스의 운영 상태를 가져오려면 business_status를 사용하세요.
  • plus_code(오픈 위치 코드플러스 코드 참고)는 위도와 경도 좌표에서 파생된 인코딩된 위치 참조로, 적도에서 1/8000도(적도의 경우 14m x 14m) 이하의 영역을 나타냅니다. Plus Code는 존재하지 않는 위치 (건물에 번호가 지정되지 않았거나 거리 이름이 없는 경우)를 대체할 수 있습니다.

    Plus Code는 전역 코드와 복합 코드로 형식이 지정됩니다.

    • global_code은 4자리 지역 코드와 6자 이상의 로컬 코드입니다(849VCWC8+R9).
    • compound_code는 명시적인 위치가 포함된 6자 이상의 로컬 코드입니다(CWC8+R9, Mountain View, CA, USA). 이 콘텐츠를 프로그래매틱 방식으로 파싱하지 마세요.
    일반적으로 전역 코드와 복합 코드가 모두 반환됩니다. 그러나 결과가 원격 위치 (예: 바다 또는 사막)에 있는 경우에는 전역 코드만 반환될 수 있습니다.
  • html_attributions: 검색결과를 표시할 때 표시해야 하는 속성의 배열입니다. 배열의 각 항목에는 단일 기여 분석을 위한 HTML 텍스트가 포함됩니다. 참고: 전체 검색 응답의 모든 기여 분석을 집계한 값입니다. 따라서 응답의 모든 PlaceResult 객체에는 동일한 속성 목록이 포함됩니다.
  • icon는 색상이 지정된 71px x 71px PNG 아이콘의 URL을 반환합니다.
  • icon_mask_base_uri은 색상이 아닌 아이콘의 기본 URL에서 .svg 또는 .png 확장자를 차감합니다.
  • icon_background_color는 장소 카테고리의 기본 16진수 색상 코드를 반환합니다.
  • name: 장소의 이름.
  • opening_hours에는 다음 정보가 포함될 수 있습니다.
    • open_now는 장소가 현재 영업 중인지 여부를 나타내는 부울 값입니다(장소 라이브러리, Maps JavaScript API에서 지원 중단됨. 대신 utc_offset_minutes를 사용).
  • place_id는 장소를 고유하게 식별하는 텍스트 식별자입니다. 장소에 관한 정보를 가져오려면 장소 세부정보 요청에 이 식별자를 전달하세요. 장소 ID를 사용하여 장소를 참조하는 방법을 자세히 알아보세요.
  • rating에는 집계된 사용자 리뷰를 기반으로 한 장소 평점(0.0~5.0)이 포함됩니다.
  • types 이 장소에 대한 유형의 배열입니다 (예: ["political", "locality"] 또는 ["restaurant", "lodging"])입니다. 이 배열은 여러 값을 포함하거나 비어 있을 수 있습니다. 사전 고지 없이 새 값이 도입될 수 있습니다. 지원되는 유형 목록을 참조하세요.
  • vicinity: 도로명, 번지, 지역을 포함한 장소의 단순화된 주소이며 주/도, 우편번호, 국가는 포함되지 않습니다. 예를 들어 Google 오스트레일리아 시드니 사무실의 vicinity 값은 5/48 Pirrama Road, Pyrmont입니다.

추가 결과 액세스

기본적으로 각 장소 검색은 쿼리당 최대 20개 결과를 반환합니다. 하지만 각 검색은 세 페이지에 걸쳐 최대 60개의 결과를 반환할 수 있습니다. PlaceSearchPagination 객체를 통해 추가 페이지를 사용할 수 있습니다. 추가 페이지에 액세스하려면 콜백 함수를 통해 PlaceSearchPagination 객체를 캡처해야 합니다. PlaceSearchPagination 객체는 다음과 같이 정의됩니다.

  • hasNextPage는 추가 결과를 사용할 수 있는지 여부를 나타내는 부울 속성입니다. true - 추가 결과 페이지가 있는 경우
  • nextPage()은 다음 결과 집합을 반환하는 함수입니다. 검색을 실행한 후 2초 동안 기다려야 다음 검색결과 페이지가 표시됩니다.

다음 결과 집합을 보려면 nextPage를 호출합니다. 결과의 다음 페이지를 표시하기 전에 각 결과 페이지를 표시해야 합니다. 각 검색은 사용량 한도에서 단일 요청으로 계산됩니다.

아래 예에서는 여러 검색 요청을 실행할 수 있도록 콜백 함수를 변경하여 PlaceSearchPagination 객체를 캡처하는 방법을 보여줍니다.

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;

자바스크립트

// 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;
예 보기

샘플 사용해 보기

장소 세부정보

장소 서비스는 지역 내의 장소 목록을 제공할 뿐 아니라 특정 장소에 대한 자세한 정보를 반환할 수 있습니다. 장소 검색 응답에서 장소가 반환되면 장소 ID를 사용하여 전체 주소, 전화번호, 사용자 평가, 리뷰 등 해당 장소에 대한 추가 세부정보를 요청할 수 있습니다.

장소 세부정보 요청

서비스의 getDetails() 메서드 호출로 장소 세부정보가 요청됩니다.

service = new google.maps.places.PlacesService(map);
service.getDetails(request, callback);

이 메서드는 원하는 장소 placeId과 반환할 장소 데이터 유형을 나타내는 필드가 포함된 요청을 받습니다. 장소 ID를 사용하여 장소를 참조하는 방법을 자세히 알아보세요.

또한 google.maps.places.PlacesServiceStatus 응답으로 전달된 상태 코드와 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);
  }
}

예 보기

필드 (장소 세부정보)

fields 매개변수는 문자열 배열 (필드 이름)을 사용합니다.

fields 매개변수를 사용하여 반환할 장소 데이터 유형 배열을 지정합니다. 예를 들면 fields: ['address_component', 'opening_hours', 'geometry']입니다. 복합 값을 지정할 때 점을 사용하세요. 예: opening_hours.weekday_text

필드는 장소 세부정보 결과에 해당하며 세 가지 결제 카테고리(Basic, Contact, Atmosphere)로 구분됩니다. 기본 필드는 기본 요율로 청구되며 추가 요금이 발생하지 않습니다. Contact 및 Atmosphere 필드에는 더 높은 요금이 청구됩니다. 자세한 내용은 가격표를 참고하세요. 저작자 표시 (html_attributions)는 요청 여부와 관계없이 모든 호출에서 반환됩니다.

Basic

기본 카테고리에는 다음 필드가 포함됩니다.
address_component, adr_address, business_status, formatted_address, geometry, icon, icon_mask_base_uri, icon_background_color,name, permanently_closed(지원 중단됨), photo, place_id, plus_code, type, url, utc_offset(Maps API2, Maps API)

연락처

연락처 카테고리에는 다음과 같은 필드가 있습니다.
formatted_phone_number, international_phone_number, opening_hours, website

분위기

분위기 카테고리에는 다음 필드가 포함됩니다. price_level, rating, review, user_ratings_total

장소 필드에 대해 자세히 알아보세요. 장소 데이터 요청에 대한 요금 청구 방법에 대한 자세한 내용은 사용량 및 결제를 참조하세요.

장소 세부정보 응답

상태 코드

PlacesServiceStatus 응답 객체에는 요청의 상태가 포함되어 있으며, 장소 세부정보 요청이 실패한 이유를 추적하는 데 도움이 되는 디버깅 정보가 포함될 수 있습니다. 가능한 상태 값은 다음과 같습니다.

  • INVALID_REQUEST: 잘못된 요청입니다.
  • OK: 응답에 유효한 결과가 있습니다.
  • OVER_QUERY_LIMIT: 웹페이지가 요청 할당량을 초과했습니다.
  • NOT_FOUND 장소 데이터베이스에서 참조된 위치를 찾을 수 없습니다.
  • REQUEST_DENIED: 웹페이지에서 PlacesService를 사용할 수 없습니다.
  • UNKNOWN_ERROR: 서버 오류로 인해 PlacesService 요청을 처리할 수 없습니다. 다시 시도하면 요청이 성공할 수도 있습니다.
  • ZERO_RESULTS: 이 요청에 대한 결과를 찾지 못했습니다.

장소 세부정보 결과

getDetails() 호출이 성공하면 다음 속성이 포함된 PlaceResult 객체를 반환합니다.

  • address_components: 이 주소에 적용할 수 있는 별도의 구성요소를 포함하는 배열입니다.

    각 주소 구성요소에는 일반적으로 다음 필드가 포함되어 있습니다.

    • types[]는 주소 구성요소의 유형을 나타내는 배열입니다. 지원되는 유형 목록을 참조하세요.
    • long_name은 지오코더가 반환한 주소 구성요소의 전체 텍스트 설명 또는 이름입니다.
    • short_name는 주소 구성요소의 텍스트 약칭입니다(사용 가능한 경우). 예를 들어 알래스카 주의 주소 구성요소에는 long_name의 'Alaska'와 short_name의 두 글자 우편 약자를 사용하는 'AK''가 있을 수 있습니다.

    address_components[] 배열에 관한 다음 사실을 참고하세요.

    • 주소 구성요소의 배열에 formatted_address보다 더 많은 구성요소가 포함될 수 있습니다.
    • formatted_address에 포함된 주소 외에도 주소를 포함하는 모든 정치적 항목이 배열에 포함되는 것은 아닙니다. 특정 주소가 포함된 모든 정치 항목을 검색하려면 역지오코딩을 사용하여 주소의 위도/경도를 요청에 매개변수로 전달해야 합니다.
    • 요청의 형식이 요청 간에 동일하게 유지되지 않을 수도 있습니다. 특히 address_components 수는 요청된 주소에 따라 다르며, 동일한 주소를 대상으로 시간이 지남에 따라 변경될 수 있습니다. 구성요소는 배열에서 위치를 변경할 수 있습니다. 구성요소의 유형은 변경할 수 있습니다. 특정 구성요소가 이후 응답에서 누락될 수 있습니다.
  • business_status는 비즈니스인 경우 장소의 운영 상태를 나타냅니다. 다음 값 중 하나를 포함할 수 있습니다.
    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY
    데이터가 없으면 business_status가 반환되지 않습니다.
  • formatted_address: 사람이 읽을 수 있는 이 장소의 주소입니다.

    이 주소는 대개 우편 주소와 동일합니다. 영국과 같은 일부 국가에서는 라이선스 제한으로 인해 실제 주소의 배포를 허용하지 않습니다.

    형식이 지정된 주소는 하나 이상의 주소 구성요소로 논리적으로 구성됩니다. 예를 들어 '주소: 111 8th Avenue, New York, NY'는 '111'(번지), '8th Avenue'(경로), 'New York'(도시) 및 'NY'(미국 주) 구성요소로 구성됩니다.

    형식이 지정된 주소를 프로그래매틱 방식으로 파싱하지 마세요. 대신 API 응답에 형식이 지정된 주소 입력란 외에 포함되는 개별 주소 구성요소를 사용해야 합니다.

  • formatted_phone_number: 지역 컨벤션에 따라 형식이 지정된 장소의 전화번호입니다.
  • geometry: 장소의 도형 관련 정보입니다. 여기에는 다음이 포함됩니다.
    • location는 장소의 위도와 경도를 제공합니다.
    • viewport는 이 장소를 볼 때 지도에서 선호하는 표시 영역을 정의합니다.
  • permanently_closed (지원 중단됨)은 장소가 영구적으로 폐업했는지 또는 일시적으로 폐업했는지 (true 값)를 나타내는 부울 플래그입니다. permanently_closed를 사용하지 마세요. 비즈니스의 운영 상태를 가져오려면 business_status를 사용하세요.
  • plus_code (오픈 위치 코드플러스 코드 참고)는 위도와 경도 좌표에서 파생된 인코딩된 위치 참조로, 적도에서 1/8000도(적도의 경우 14m x 14m) 이하의 영역을 나타냅니다. Plus Code는 존재하지 않는 위치 (건물에 번호가 지정되지 않았거나 거리 이름이 없는 경우)를 대체할 수 있습니다.

    Plus Code는 전역 코드와 복합 코드로 형식이 지정됩니다.

    • global_code은 4자리 지역 코드와 6자 이상의 로컬 코드입니다(849VCWC8+R9).
    • compound_code는 명시적인 위치가 포함된 6자 이상의 로컬 코드입니다(CWC8+R9, Mountain View, CA, USA). 이 콘텐츠를 프로그래매틱 방식으로 파싱하지 마세요.
    일반적으로 전역 코드와 복합 코드가 모두 반환됩니다. 그러나 결과가 원격 위치 (예: 바다 또는 사막)에 있는 경우에는 전역 코드만 반환될 수 있습니다.
  • html_attributions: 이 장소 결과에 표시될 저작자 표시 텍스트입니다.
  • icon: 이 장소 유형을 나타내는 데 사용할 수 있는 이미지 리소스의 URL입니다.
  • international_phone_number에 국가 형식의 장소 전화번호가 포함되어 있습니다. 국가 코드 포함에는 국가 코드가 포함되며 더하기 (+) 기호가 접두사로 붙습니다. 예를 들어 Google 오스트레일리아 오스트레일리아 사무실의 international_phone_number+61 2 9374 4000입니다.
  • name: 장소의 이름.
  • utc_offset 장소 라이브러리, Maps JavaScript API에서 지원 중단되었으므로 대신 utc_offset_minutes를 사용하세요.
  • utc_offset_minutes에는 이 장소의 현재 시간대가 UTC로부터 오프셋되는 시간(분)이 포함됩니다. 예를 들어 일광 절약 시간 동안 오스트레일리아 시드니의 장소는 660 (UTC에서 +11시간)이 되고 일광 절약 시간 외의 시간에 있는 캘리포니아의 장소는 -480(UTC에서 -8시간)이 됩니다.
  • opening_hours에는 다음 정보가 포함됩니다.
    • open_now(장소 라이브러리, Maps JavaScript API에서 지원 중단됨, 대신 opening_hours.isOpen()을 사용하세요. 장소 세부정보와 함께 isOpen를 사용하는 방법은 이 동영상을 참고하세요.) 는 장소가 현재 영업 중인지 여부를 나타내는 부울 값입니다.
    • periods[]은 일요일부터 시간순으로 7일을 포함하는 개점 기간의 배열입니다. 각 기간은 다음을 포함합니다.
      • open에는 장소의 영업 시작 시간을 설명하는 한 쌍의 날짜 및 시간 객체가 포함됩니다.
        • day는 일요일부터 0~6 사이의 숫자로, 요일에 해당합니다. 예를 들어 2는 화요일을 의미합니다.
        • time에 시간을 24시간 hhmm 형식으로 포함할 수 있으며 값의 범위는 0000~2359입니다. time는 장소의 시간대로 보고됩니다.
      • close에는 장소의 영업 종료 시간을 설명하는 한 쌍의 날짜 및 시간 객체가 포함될 수 있습니다. 참고: 장소가 항상 열려 있는 경우 응답에서 close 섹션이 누락됩니다. 애플리케이션은 항상 열기가 day 0 및 0000의 timeclose은 포함되지 않은 open 기간으로 표시될 수 있습니다.
    • weekday_text는 각 요일의 지정된 영업시간을 나타내는 7개의 문자열 배열입니다. Place Details 요청에 language 매개변수가 지정된 경우 Place Service는 해당 언어에 맞게 영업시간의 형식을 지정하고 현지화합니다. 이 배열에서 요소의 순서는 language 매개변수에 따라 다릅니다. 일부 언어는 월요일에 한 주를 시작하고 다른 언어는 일요일에 시작합니다.
  • permanently_closed(지원 중단됨)은 장소가 영구적으로 폐업했는지 또는 일시적으로 폐업했는지 (true 값)를 나타내는 부울 플래그입니다. permanently_closed를 사용하지 마세요. 비즈니스의 운영 상태를 가져오려면 business_status를 사용하세요.
  • photos[]: PlacePhoto 객체의 배열입니다. PlacePhoto을 사용하여 getUrl() 메서드로 사진을 가져오거나 객체에 다음 값이 있는지 검사할 수 있습니다.
    • height: 이미지의 최대 높이(픽셀)입니다.
    • width: 이미지의 최대 너비(픽셀)입니다.
    • html_attributions: 이 장소 사진과 함께 표시될 저작자 표시 텍스트입니다.
  • place_id: 장소를 고유하게 식별하며 장소 세부정보 요청을 통해 장소에 관한 정보를 검색하는 데 사용할 수 있는 텍스트 식별자입니다. 장소 ID를 사용하여 장소를 참조하는 방법을 자세히 알아보세요.
  • rating: 집계된 사용자 리뷰를 바탕으로 0.0~5.0의 장소 평점입니다.
  • reviews 최대 5개의 리뷰 배열입니다. 각 리뷰는 다음과 같은 여러 요소로 구성됩니다.
    • aspects[]에는 PlaceAspectRating 객체의 배열이 포함되며, 각 객체는 시설의 단일 속성을 평가합니다. 배열의 첫 번째 객체는 기본 요소로 간주됩니다. 각 PlaceAspectRating은 다음과 같이 정의됩니다.
      • type 평가되는 측면의 이름입니다. 지원되는 유형은 appeal, atmosphere, decor, facilities, food, overall, quality, service입니다.
      • rating에 관한 5점부터 3점까지 특정 평점에 대한 사용자의 평점입니다.
    • author_name리뷰를 제출한 사용자의 이름입니다. 익명 리뷰는 'Google 사용자'로 표시됩니다. 언어 매개변수가 설정된 경우 'Google 사용자' 문구는 현지화된 문자열을 반환합니다.
    • author_url: 가능한 경우 사용자 Google+ 프로필의 URL입니다.
    • language는 사용자 리뷰에 사용된 언어를 나타내는 IETF 언어 코드입니다. 이 필드에는 기본 언어 태그만 포함되며 국가 또는 지역을 나타내는 보조 태그는 포함되지 않습니다. 예를 들어 모든 영어 리뷰는 'en-AU'' 또는 'en-UK' 등으로 태그되지 않고 ''en''로 태그됩니다.
    • 이 장소에 대한 사용자의 전반적인 평점: rating 1~5 사이의 정수입니다.
    • text 사용자 리뷰 Google 지역 정보를 사용하여 위치를 리뷰할 때 텍스트 리뷰는 선택사항으로 간주됩니다. 따라서 이 필드는 비어 있을 수 있습니다.
  • types 이 장소에 대한 유형의 배열입니다 (예: ["political", "locality"] 또는 ["restaurant", "lodging"])입니다. 이 배열은 여러 값을 포함하거나 비어 있을 수 있습니다. 사전 고지 없이 새 값이 도입될 수 있습니다. 지원되는 유형 목록을 참조하세요.
  • url: 이 장소의 공식 Google 페이지 URL Google이 소유한 페이지로서 장소에 관한 최상의 정보가 포함되어 있습니다. 애플리케이션은 사용자에게 장소에 관한 자세한 결과를 표시하는 모든 페이지에 이 페이지를 링크하거나 삽입해야 합니다.
  • vicinity: 도로명, 번지, 지역을 포함한 장소의 단순화된 주소이며 주/도, 우편번호, 국가는 포함되지 않습니다. 예를 들어 Google 오스트레일리아 시드니 사무실의 vicinity 값은 5/48 Pirrama Road, Pyrmont입니다. vicinity 속성은 Nearby Search에만 반환됩니다.
  • website는 비즈니스 홈페이지와 같이 이 장소의 신뢰할 수 있는 웹사이트를 나열합니다.

참고: 지역에 따라 다차원 평점이 제공되지 않을 수도 있습니다. 리뷰가 너무 적으면 세부정보 응답에 0.0~5.0 범위의 기존 평점 (사용 가능한 경우)이 포함되거나 평점이 아예 포함되지 않습니다.

장소 ID로 장소 참조

장소 ID는 Google 지도의 장소에 대한 고유한 참조입니다. 장소 ID는 비즈니스, 명소, 공원, 교차로 등 대부분의 위치에 사용할 수 있습니다.

앱에서 장소 ID를 사용하려면 먼저 장소 검색 또는 세부정보 요청의 PlaceResult에 있는 ID를 조회해야 합니다. 그런 다음 이 장소 ID를 사용하여 장소 세부정보를 조회할 수 있습니다.

장소 ID는 Google Maps Platform 서비스 약관의 3.2.3(a)항에 명시된 캐싱 제한에서 제외됩니다. 따라서 나중에 사용할 수 있도록 장소 ID 값을 저장할 수 있습니다. 장소 ID를 저장할 때 권장사항은 장소 ID 개요를 참고하세요.

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);

장소 사진

장소 사진 기능을 사용하면 고화질 사진 콘텐츠를 사이트에 추가할 수 있습니다. 사진 서비스를 사용하면 장소 및 Google+ 로컬 데이터베이스에 저장된 수백만 개의 사진에 액세스할 수 있습니다. Place Details 요청을 사용하여 장소 정보를 가져오면 관련 사진 콘텐츠에 사진 참조가 반환됩니다. Nearby Search 및 Text Search 요청은 해당하는 경우 장소당 하나의 사진 참조를 반환합니다. 그런 다음 사진 서비스를 사용하여 참조된 사진에 액세스하고 애플리케이션에 가장 적합한 크기로 이미지 크기를 조절할 수 있습니다.

PlacesService에 대해 실행된 모든 getDetails(), textSearch() 또는 nearbySearch() 요청에 대해 PlacePhoto 객체의 배열이 PlaceResult 객체의 일부로 반환됩니다.

참고: 반환되는 사진 수는 요청에 따라 다릅니다.

  • Nearby Search 또는 Text Search는 PlacePhoto 객체를 최대 한 개 반환합니다.
  • 세부정보 요청은 최대 10개의 PlacePhoto 객체를 반환합니다.

PlacePhoto.getUrl() 메서드를 호출하고 유효한 PhotoOptions 객체를 전달하여 연결된 이미지의 URL을 요청할 수 있습니다. PhotoOptions 객체를 사용하면 원하는 이미지 높이와 너비를 원하는 대로 지정할 수 있습니다. maxHeightmaxWidth 값을 모두 지정하면 사진 서비스에서 원래 가로세로 비율을 유지하면서 이미지 크기를 두 가지 크기 중 더 작은 크기로 조정합니다.

다음 코드 스니펫은 장소 객체를 수락하고 사진이 있으면 지도에 마커를 추가합니다. 기본 마커 이미지가 작은 버전의 사진으로 대체됩니다.

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})
  });
}

사진 서비스에서 반환되는 사진은 비즈니스 소유자 및 사용자 제공 사진을 포함한 다양한 위치에서 가져옵니다. 대부분의 경우 이러한 사진은 저작자 표시 없이 사용할 수 있거나 필수 저작자 표시를 이미지의 일부로 포함합니다. 하지만 반환된 photo 요소에 html_attributions 필드의 값이 포함된 경우 이미지를 표시할 때마다 애플리케이션에 추가 기여 분석을 포함해야 합니다.