소개

Amazon Location Service 를 사용하면 맵, 관심 지점, 지오코딩, 라우팅, 지오펜스, 추적 등의 기능이 포함된 위치 데이터를 애플리케이션에 추가할 수 있습니다. Amazon Location은 신뢰할 수 있는 글로벌 공급업체 EsriHERE의 고품질 데이터를 사용하여 비용 효율적인 위치 기반 서비스(LBS) 를 제공합니다. 경제적인 데이터, 추적 및 지오펜싱 기능, 상태 모니터링을 위한 기본 제공 메트릭을 통해 정교한 위치 기반 애플리케이션을 구축할 수 있습니다.

주요 기능

지도 (Maps)

Amazon Location Service 맵을 사용하면 위치 정보를 시각화 할 수 있으며 다양한 위치 기반 서비스 기능의 기초가 됩니다. Amazon Location Service 글로벌 위치 데이터 공급자 Esri 및 HERE에서 가져온 다양한 스타일의 맵 타일을 제공합니다.

장소 (Places)

Amazon Location Service Places를 사용하면 애플리케이션에 검색 기능을 통합하고, 주소를 위도와 경도의 지리적 좌표로 변환 (지오코딩) 하고, 좌표를 거리 주소로 변환 (역방향 지오코딩) 할 수 있습니다. Amazon Location Service 장소 기능을 지원하기 위해 Esri 및 HERE의 고품질 지리 공간 데이터를 제공합니다.

경로 (Routing)

Amazon Location Service 경로를 사용하면 최신 도로 및 실시간 교통 정보를 기반으로 경로를 찾고 여행 시간을 예측할 수 있습니다. 응용 프로그램에서 두 위치 간의 이동 시간, 거리 및 방향을 요청할 수 있는 기능을 빌드합니다.

지오펜싱 (Geofencing)

지리(Geo)와 Fence(울타리)의 합성어로 Amazon Location Service Geofence를 사용하면 디바이스가 지오펜스라고 하는 지리적 경계에 진입하거나 종료할 때 애플리케이션을 감지하고 조치를 취할 수 있습니다. 지오펜스 위반이 감지되면 Amazon EventBridge 에 진입 또는 종료 이벤트를 자동으로 전송합니다. 이를 통해 대상에 알림을 보내는 등의 다운스트림 작업을 시작할 수 있습니다.

추적기 (Trackers)

Amazon Location Service Tracker를 사용하면 추적 가능 애플리케이션을 실행하는 디바이스의 현재 위치 및 과거 위치를 검색할 수 있습니다. 추적기와 Amazon Location Service 지오펜스를 연결하여 디바이스의 위치 업데이트를 지오펜스와 비교하여 자동으로 평가할 수도 있습니다.추적기를 사용하는 동안 추적된 기기의 민감한 위치 정보는AWS계정을 소개합니다. 이렇게 하면 제3자로부터 중요한 정보를 보호하고 사용자 개인 정보를 보호하며 보안 위험을 줄일 수 있습니다.


해당 사이트는 테스트 사이트이므로 참고용으로 접근 합니다.

Sample Site

http://map.studydev.com


Test Code

index.html
<html>
    <head>
        <!-- CSS dependencies -->
        <link href="https://unpkg.com/maplibre-gl@1.14.0/dist/maplibre-gl.css" rel="stylesheet" />
        <style>
            body {
                margin: 0;
            }

            #map {
                height: 100vh; /* 100% of viewport height */
            }
        </style>
    </head>
    <body>
        <!-- map container -->
        <div id="map" />
        
        <!-- JavaScript dependencies -->
        <script src="https://unpkg.com/maplibre-gl@1"></script>
        <script src="https://unpkg.com/amazon-location-helpers@1"></script>
        <script src="https://sdk.amazonaws.com/js/aws-sdk-2.937.0.min.js"></script>
        <script src="https://unpkg.com/@aws-amplify/core@3.7.0/dist/aws-amplify-core.min.js"></script>
        <script>
            // application-specific code
            
            const identityPoolId = "<<IDENTITY_POOL_ID_ARN>>";
            
            // Amazon Location Service Map name
            const mapName = "<<MAP_NAME>>";

            // extract the Region from the Identity Pool ID; this will be used for both Amazon Cognito and Amazon Location
            AWS.config.region = identityPoolId.split(":")[0];

            // instantiate an Amazon Cognito-backed credential provider
            const credentials = new AWS.CognitoIdentityCredentials({
                IdentityPoolId: identityPoolId,
            });

            async function refreshCredentials() {
                await credentials.refreshPromise();
                // schedule the next credential refresh when they're about to expire
                setTimeout(refreshCredentials, credentials.expireTime - new Date());
            }

            // use Signer from @aws-amplify/core
            const { Signer } = window.aws_amplify_core;
            
            /**
            * Sign requests made by MapLibre GL JS using AWS SigV4.
            */
            function transformRequest(url, resourceType) {
                if (resourceType === "Style" && !url.includes("://")) {
                    // resolve to an AWS URL
                    url = `https://maps.geo.${AWS.config.region}.amazonaws.com/maps/v0/maps/${url}/style-descriptor`;
                }
                
                if (url.includes("amazonaws.com")) {
                    // only sign AWS requests (with the signature as part of the query string)
                    return {
                        url: Signer.signUrl(url, {
                            access_key: credentials.accessKeyId,
                            secret_key: credentials.secretAccessKey,
                            session_token: credentials.sessionToken,
                        }),
                    };
                }
                
                // don't sign
                return { url };
            }

            async function initializeMap() {
                // load credentials and set them up to refresh
                await credentials.getPromise();
               
                // Initialize the map
                const map = new maplibregl.Map({
                  container: "map",
                  center: [126.8522, 37.3777], // initial map centerpoint
                  zoom: 15, // initial map zoom
                  style: mapName,
                  transformRequest,
                });
               
                map.addControl(new maplibregl.NavigationControl(), "top-left");

                /** 
                // Find the location and put a marker on the map
                const location = new AWS.Location({
                    credentials: await AmazonLocation.getCredentialsForIdentityPool("<<IDENTITY_POOL_ID_ARN>>"),
                    region: "ap-northeast-1"
                });

                const data = await location.searchPlaceIndexForText({
                    IndexName: "map_Index",
                    Text: "Text"
                }).promise();

                console.log(data);
                const position = data.Results[0].Place.Geometry.Point;
                */

                const marker1 = new maplibregl.Marker().setLngLat([126.8522, 37.3777]).addTo(map);
                const marker2 = new maplibregl.Marker({color: "#FFFFFF",draggable: true}).setLngLat([126.85409903526306, 37.37625341043314]).addTo(map);
            }
               
            initializeMap();

            
        </script>
    </body>
    
</html>


Geo Coding

http://geojson.io/#map=18/37.37658/126.85472



확인중인 내용

Map 리소스

OpenStreetMap 

MapLibre GL

a community led fork derived from  mapbox-gl-js  prior to their switch to a non-OSS license. https://github.com/maplibre/maplibre-gl-js

따라서 Marker는 Mapbox랑 유사: https://docs.mapbox.com/mapbox-gl-js/api/markers/https://docs.mapbox.com/mapbox-gl-js/example/cluster/

Diagram 

https://github.com/maplibre/maplibre-gl-js/tree/main/docs/diagrams

https://github.com/maplibre/maplibre-gl-js/blob/main/docs/life-of-a-tile.md

이 가이드는 새 타일을 로드할 때 발생하는 일을 추적합니다. 높은 수준에서 처리는 세 부분으로 구성됩니다.

이벤트 루프는 사용자 상호 작용에 응답하고 지도의 내부 상태(현재 뷰포트, 카메라 각도 등)를 업데이트합니다.
타일 ​​로드는 지도의 현재 상태에 필요한 타일, 이미지, 글꼴 등을 비동기식으로 가져옵니다.
렌더 루프는 지도의 현재 상태를 화면에 렌더링합니다.
이상적으로는 이벤트 루프와 렌더 프레임이 초당 60프레임으로 실행되고 타일 로드의 모든 작업이 웹 작업자 내에서 비동기적으로 발생합니다.

Event Loop 


Tile loading 


Render loop







참고 URL:

GeoJSON Korea: https://maps.elastic.co/#file/south_korea_municipalities

아파트 연도별 지역별 거래 현황: https://www.r-one.co.kr/rone/resis/common/main/main.do 부동산 거래 현황

2015~2020년 자료:

AWS Glue Databrew 




앱의 종류

오피넷, 전기차 충전소

미세미세, AirMapKorea

직방, 다방, 호갱노노

코로나맵

킥고잉


블로그

https://aws.amazon.com/ko/blogs/mobile/getting-started-with-amazon-location/

https://aws.amazon.com/ko/blogs/architecture/field-notes-fleet-tracking-using-amazon-location-service-with-aws-iot/

https://aws.amazon.com/ko/blogs/aws/amazon-location-add-maps-and-location-awareness-to-your-applications/



  • 레이블 없음