Amazon Web Services 한국 블로그

Amazon Location Service 미리보기 – 사용자 애플리케이션에 지도 및 위치 인식 기능 추가

맵, 위치 인식 및 기타 위치 기반 기능을 사용자의 웹 및 모바일 애플리케이션에 보다 쉽고 비용 효율적으로 추가하고자 합니다. 지금까지 이 작업은 다소 복잡하고 비용이 많이 들었을 뿐 아니라, 단일 공급자의 비즈니스 및 프로그래밍 모델에 연결되었습니다.

Amazon Location Service 소개
오늘 Amazon Location을 미리 보기 형식으로 사용할 수 있으며 지금 바로 사용 가능합니다. 일반적인 대안책에 비해 상당히 저렴한 Amazon Location Service를 사용하면 경제적인 종량 과금제 방식으로 여러 공급자의 맵 및 위치 기반 서비스에 액세스할 수 있습니다.

Amazon Location Service를 사용하면 사용자의 위치를 파악하는 애플리케이션을 구축하고 그에 따라 대응할 수 있습니다. 맵 표시, 주소 검증, 지오코딩(주소를 특정 위치로 전환) 수행, 패키지 및 디바이스 이동 추적 등의 작업을 수행할 수 있습니다. 추적된 항목이 지오펜싱된 영역에 들어가거나 나갈 때 지오펜스를 쉽게 설정하고 알림을 받을 수 있습니다. 전체 제어를 유지하면서 맵에 자체 데이터를 오버레이할 수도 있습니다.

AWS Management Console, AWS CLI(명령줄 인터페이스) 또는 API 세트를 통해 Amazon Location Service에 액세스할 수 있습니다. Mapbox GLTangram과 같은 기존 맵 라이브러리를 사용할 수도 있습니다.

Amazon Location에 대한 모든 것
이제 Amazon Location Service에서 제공하는 리소스 유형을 살펴본 후 애플리케이션에서 이러한 리소스 유형을 사용하는 방법에 대해 살펴보겠습니다.

Amazon Location Service를 사용하면 아마존 파트너의 데이터를 활용한 맵을 만들 수 있습니다. EsriHERE Technologies가 제공하는 다양한 맵과 맵 스타일 중에서 선택할 수 있으며, 향후 이들 파트너 및 다른 파트너가 제공하는 보다 다양한 맵과 스타일을 사용할 수 있습니다. 맵을 만든 후 GetMapTile 함수를 사용하여 최대 16개 줌 레벨 중 하나에서 타일을 검색할 수 있습니다. 이 작업을 직접 수행하지 않고, 대신 Mapbox GL, Tangram 또는 다른 라이브러리를 사용할 것입니다.

장소 인덱스 — Esri 및 HERE에서 제공하는 인덱스 중에서 선택할 수 있습니다. 이 인덱스는 사용자가 제공하는 위치와 가장 가까운 거주지 주소 또는 관심 지점(POI라고도 함)과 같은 장소를 반환하는 SearchPlaceIndexForPosition 함수를 지원하는 동시에 역 지오코딩을 수행하여 위치(좌표 쌍)를 읽을 수 있는 주소로 변환합니다. 또한 인덱스는 주소, 이름, 도시 또는 리전과 같은 자유형 텍스트를 사용하여 주소, 기업 및 관심 지점을 검색하는 SearchPlaceIndexForText 함수를 지원합니다.

추적기 —추적기는 BatchUpdateDevicePosition 함수를 통해 하나 이상의 디바이스에서 위치 업데이트를 수신하며 현재 위치(GetDevicePosition) 또는 위치 기록(GetDevicePositionHistory)을 쿼리할 수 있습니다. 또한 추적기를 Geofence Collections에 연결하여 지오펜스 안팎으로 이동할 때 디바이스를 모니터링할 수 있습니다.

Geofence Collections — 각 컬렉션에는 지리적 경계를 정의하는 지오펜스 목록이 포함됩니다. 다음은 내 위치 근처의 공원을 간략하게 설명하는 지오펜스( geojson.io로 만듦)입니다.

Amazon Location 작동 방식
AWS Management Console을 사용하여 Amazon Location을 시작한 후 필요에 따라 AWS CLI(명령줄 인터페이스) 또는 API로 이동합니다. Amazon Location Service 콘솔을 열고 사용해보세요!(Try it!)를 클릭하여 스타터 리소스 세트를 만들거나, 왼쪽에 있는 탐색을 열어 스타터 리소스를 하나씩 만들 수 있습니다. 저는 하나씩 만들고 [맵(Maps)]을 클릭하겠습니다.

그런 다음 [맵 만들기(Create map)]를 클릭하여 계속합니다.

이름 및 설명을 입력합니다.

그런 다음 원하는 맵을 선택하고 [맵 만들기(Create map)]를 클릭합니다.

맵이 생성되어 즉시 내 애플리케이션에 추가할 수 있습니다.

이제 애플리케이션에 맵을 포함할 수 있으며, Amplify JavaScript SDK, Amplify Android SDK, Amplify iOS SDK, Tangram, Mapbox GL을 비롯한 여러 옵션이 있습니다(각 옵션에 대해 자세히 알아보려면 개발자 안내서 읽기).

그 다음, 디바이스의 위치를 추적하여 특정 리전에 들어가거나 나갈 때 알림을 받을 수 있습니다. geojson.io와 같은 GeoJSON 편집 도구를 사용하여 다각형으로 구축된 지오펜스를 만들고 결과 파일을 저장(다운로드)합니다.

왼쪽 탐색에서 [지오펜스 컬렉션 만들기(Create geofence collection)]를 클릭하고 1단계에서 GeoJSON 파일을 추가하고 이름 및 설명을 입력한 후 [다음(Next)]을 클릭합니다.

이제 트래커의 이름과 설명을 입력하고 [다음(Next)]을 클릭합니다. 방금 만든 지오펜스 컬렉션에 연결됩니다.

다음 단계는 CloudWatch Logs에서 이벤트를 모니터링할 수 있도록 추적기가 Amazon EventBridge로 이벤트를 전송하도록 정렬하는 것입니다. 설정을 그대로 두고 [다음(Next)]을 클릭하여 계속합니다.

모든 선택 사항을 검토하고 [마무리(Finalize)]를 클릭하여 계속 진행합니다.

리소스가 생성 및 설정되어 바로 사용할 수 있습니다.

그런 다음 코드를 작성하거나 CLI를 사용하여 디바이스 위치를 업데이트할 수 있습니다.

$ aws location batch-update-device-position \
   --tracker-name MyTracker1 \
   --updates "DeviceId=Jeff1,Position=-122.33805,47.62748,SampleTime=2020-11-05T02:59:07+0000"

한두 번 이 작업을 수행 한 후 디바이스의 위치 기록을 검색할 수 있습니다.

$ aws location get-device-position-history \
  -tracker-name MyTracker1 --device-id Jeff1
------------------------------------------------
|           GetDevicePositionHistory           |
+----------------------------------------------+
||               DevicePositions              ||
|+---------------+----------------------------+|
||  DeviceId     |  Jeff1                     ||
||  ReceivedTime |  2020-11-05T02:59:17.246Z  ||
||  SampleTime   |  2020-11-05T02:59:07Z      ||
|+---------------+----------------------------+|
|||                 Position                 |||
||+------------------------------------------+||
|||  -122.33805                              |||
|||  47.62748                                |||
||+------------------------------------------+||
||               DevicePositions              ||
|+---------------+----------------------------+|
||  DeviceId     |  Jeff1                     ||
||  ReceivedTime |  2020-11-05T03:02:08.002Z  ||
||  SampleTime   |  2020-11-05T03:01:29Z      ||
|+---------------+----------------------------+|
|||                 Position                 |||
||+------------------------------------------+||
|||  -122.43805                              |||
|||  47.52748                                |||
||+------------------------------------------+||

이벤트를 감시하는 Amazon EventBridge 규칙을 작성하고, 이를 사용하여 원하는 처리를 수행할 수 있습니다. 이벤트는 디바이스가 지오펜싱된 영역에 들어가거나 나갈 때 게시되며, 다음과 같이 표시됩니다.

{
  "version": "0",
  "id": "7cb6afa8-cbf0-e1d9-e585-fd5169025ee0",
  "detail-type": "Location Geofence Event",
  "source": "aws.geo",
  "account": "123456789012",
  "time": "2020-11-05T02:59:17.246Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:geo:us-east-1:123456789012:geofence-collection/MyGeoFences1",
    "arn:aws:geo:us-east-1:123456789012:tracker/MyTracker1"
  ],
  "detail": {
        "EventType": "ENTER",
        "GeofenceId": "LakeUnionPark",
        "DeviceId": "Jeff1",
        "SampleTime": "2020-11-05T02:59:07Z",
        "Position": [-122.33805, 47.52748]
  }
}

마지막으로, 지리적 객체로 작업할 수 있도록 장소 인덱스를 만들고 사용할 수 있습니다. 속도의 변화를 고려하여 CLI를 사용하겠습니다. 다음과 같이 인덱스를 만듭니다.

$ aws location create-place-index \
  --index-name MyIndex1 --data-source Here

그런 다음 해당 위치 근처의 주소와 관심 지점을 찾기 위해 다음과 같이 쿼리합니다.

$ aws location search-place-index-for-position --index-name MyIndex1 \
  --position "[-122.33805,47.62748]" --output json \
  |  jq .Results[].Place.Label
"Terry Ave N, Seattle, WA 98109, United States"
"900 Westlake Ave N, Seattle, WA 98109-3523, United States"
"851 Terry Ave N, Seattle, WA 98109-4348, United States"
"860 Terry Ave N, Seattle, WA 98109-4330, United States"
"Seattle Fireboat Duwamish, 860 Terry Ave N, Seattle, WA 98109-4330, United States"
"824 Terry Ave N, Seattle, WA 98109-4330, United States"
"9th Ave N, Seattle, WA 98109, United States"
...

다음과 같이 텍스트 기반 검색을 수행할 수도 있습니다.

$ aws location search-place-index-for-text --index-name MyIndex1 \
  --text Coffee --bias-position "[-122.33805,47.62748]" \
  --output json | jq .Results[].Place.Label
"Mohai Cafe, 860 Terry Ave N, Seattle, WA 98109, United States"
"Starbucks, 1200 Westlake Ave N, Seattle, WA 98109, United States"
"Metropolitan Deli and Cafe, 903 Dexter Ave N, Seattle, WA 98109, United States"
"Top Pot Doughnuts, 590 Terry Ave N, Seattle, WA 98109, United States"
"Caffe Umbria, 1201 Westlake Ave N, Seattle, WA 98109, United States"
"Starbucks, 515 Westlake Ave N, Seattle, WA 98109, United States"
"Cafe 815 Mercer, 815 9th Ave N, Seattle, WA 98109, United States"
"Victrola Coffee Roasters, 500 Boren Ave N, Seattle, WA 98109, United States"
"Specialty's, 520 Terry Ave N, Seattle, WA 98109, United States"
...

두 검색 모두 다른 옵션이 있습니다. 자세한 내용을 확인하려면 지오코딩, 역 지오코딩 및 검색을 읽어보세요.

주요 사항
Amazon Location은 오늘 미리 보기로 출시되며, 바로 시작할 수 있습니다. 미리 보기 중에 라우팅을 위한 API를 추가할 계획이며 고객 피드백과 기능 요청에 대응할 수 있도록 최선을 다할 것입니다.

요금은 사용량에 따라 책정되며, 초기 평가 기간은 3개월이며 Amazon Location API를 무료로 여러 번 호출할 수 있습니다. 평가 기간이 지나면 Amazon Location 요금 페이지에 표시된 요금이 적용됩니다.

이제 Amazon Location미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오레곤), EU(아일랜드)아시아 태평양(도쿄) 지역에서 사용할 수 있습니다.

Jeff