[기술 정보]구글 머신러닝으로 현재 위치를 찾아내는 Places API

Places API에서 현재 위치를 찾아내는 데에 구글 머신러닝 시스템을 사용한다는 것을 알고 계셨나요? 이번 포스팅에서는 지난 6월 22일 있었던 Google I/O 2016 세미나의 Places API 관련 부분에 대해 좀더 상세하게 알아보겠습니다.

1. 내 위치와 주변 위치에 대한 정보가 필요하다면 Places API를!

구글은 Google Maps를 통해 일반 유저들과, Places API를 통해 개발자들과 함께 스트리트 뷰, 위성 이미지, 유저 피드백, 비즈니스 소유자 등의 소스를 통해 수집한 정보들을  공유합니다. Places API를 사용하면 나는 어디에 있나, 그 장소는 무엇인가, 주변 장소들에 대해 알려달라는 질문에 대한 답변을 얻을 수 있습니다.
3advantages

1) 유니크하고, 안정적이고, 글로벌하기까지 한 Place ID

GetCurrentPlace를 이용하면 유저가 현재 있을만한 장소들의 리스트(이름, Place ID 포함)와 예측치를 반환합니다. Place ID는 Google Places database와 Google Maps의 장소들을 구분하기 위한 식별자입니다. Place ID는 유일하고, 안정적이고, 전 세계적이라는 장점이 있습니다. Places API는 안드로이드, iOS, 웹서비스, 자바스크립트에서 API로 지원됩니다.

 

Place ID는 이런 형태입니다.

ChIJrTLr-GyuEmsRBfy61i59si0

 

Place ID Finder에서는 장소들의 Place ID를 찾아볼 수 있고, Place ID는 Places API, JavaScript API, Geocoding API, Embed API, Roads API 등에서도 사용이 가능합니다. 또한 Place ID를 사용해 Place detail을 받는 것도 가능합니다.

 

  • 테이블1 – 91개:  장소 검색과 장소 추가에 필터로 사용 가능
  • 테이블2 – 38개: 테이블1 타입뿐 아니라 테이블2도 Place search의 결과로 리턴
  • 테이블3 – 6개: autocomplete request에 사용할 수 있음

 

2) 일치성, 근접성, 인기도, 유저 선호를 반영하는 장소 검색(Places Searches)

검색은 문자의 유사성, 근접성, 인기도, 개인적 선호(가격, 거리)에 따른 검색 결과를 반환합니다. 따라서 유저가 입력한 문자열뿐 아니라 현재 위치에서 가까운 정도, 그 장소에 대한 인기도나 평가, 혹은 가격/거리적 선호 등에 따라 상위 20개의 결과를 반환합니다.

 

– Places Searches의 종류

  • Nearby Search: 유저 위치에 기반해서 가까운 장소들의 리스트를 반환합니다.
  • Text Search: 검색 문자열에 해당하는 가까운 장소들의 리스트를 반환합니다.
  • Radar Search: 특정 검색 반경 안에 있는 장소들의 방대한 리스트를 반환하지만 Nearby나 Text보다 덜 자세합니다.
  • Place Deatails request: 특정 장소에 대해 유저 리뷰와 같은 더 자세한 정보를 반환합니다.

 

2. 쉬운 사용, 배터리 절약, 정확한 결과까지. Mobile Native APIs!

모바일 네이티브 API는 다음과 같이 쉬운 사용법, 배터리 친화적, 더욱 정확한 결과 반환이라는 장점이 있습니다.

3advantages

 

1) 유저, 개발자 모두에게 편의를 제공하는 쉬운 사용법

Place 객체가 잘 구조화 돼 있어서 객체 내 메소드들을 이용하면 XML이나 JSON 데이터 파싱에 비해 쉽고 편하게 정보를 가져올 수 있습니다.

또한, 간단한 몇 줄의 코드만 추가하면 PlacePicker나 Autocomplete 위젯 구현이 가능하고, 편리한 유저경험을 제공할 수 있습니다.

 

PlacePicker 안드로이드 코드:

int PLACE_PICKER_REQUEST = 1;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);

PlacePicker iOS 코드:

let pickerConfig = GMSPlacePickerConfig(viewport: nil)
placePicker = GMSPlacePicker(config: pickerConfig)
placePicker.pickPlaceWithCallback(placeSelectionCallback)

 

2) 캐싱을 통한 배터리 절약

모바일 네이티브 API에서는 유저의 위치 설정이 켜져 있고 앱에서 위치정보를 요청할 때, 자주 가는 장소들의 정보를 캐싱합니다. 그래서 자주 가는 장소들에 대해서는 새로운 Network call을 날릴 필요 없이 저장된 주소를 가져오기 때문에 배터리 절약이 가능합니다.

 

3) 구글 머신러닝을 통한 더욱 정확한 결과 리턴

모바일 네이티브 API에서 제공하는 GetCurrentPlace는 정확한 현재 위치를 가져오기 위한 아주 좋은 방법입니다. Reverse geocoding은 단순히 좌표를 주소로 변환해주기만 하는 반면, GetCurrentPlace를 이용하면 현재 위치의 좌표나 주소대신 장소 이름을, 보다 정확하게 찾을 수 있습니다. 이 기능은 구글 머신러닝을 통해 영업시간, 인기도, 지오메트리, 모바일 신호 등을 분석하고 유저가 현재 있을만한 장소들의 리스트와 구글의 예측치를 반환합니다.

ios_places_api

(실제 GetCurrentPlace의 결과 예시)

GetCurrentPlace가 정확히 현재 위치를 가져오도록 하기 위해서는 Location Setting을 켜고, 장소에 대한 정확한 정보가 입력되어 있도록 해야 합니다.

모바일 네이티브 API를 써보시는 건 어떨까요?

(Google I/O 2016의 Understand your place in this world 세션)