https://codelabs.developers.google.com/codelabs/bigquery-maps-api/#0
Querying and Visualising Location Data in BigQuery Using Google Maps API
There are three ways to use SQL to run spatial queries against data in BigQuery: There are examples of bounding box and radius queries in the Mathematical Functions section of the BigQuery legacy SQL reference, under 'Advanced Examples'. For bounding box a
codelabs.developers.google.com
오픈소스 설치 과정은 위의 구글 코드랩을 활용하여 진행했습니다.
<설치 및 구동 목표>
- 빅쿼리를 이용한 위치 기반 데이터 쿼리
- 구글 맵 플랫폼과 자바스크립트 API를 이용해 지도를 업로드하는 웹페이지 제작 및 실행
<설치 전 과정>
- HTML, CSS, JS, Chrome DevTool 의 기초 지식이 필요합니다.
- 최신의 웹 브라우저가 필요합니다. (최신버전 Chrome, Firefox, Safari and Edge)
- 자신이 원하는 IDE가 필요합니다.
<설치 과정>
1. 구글 클라우드 플랫폼에 새로운 프로젝트를 만듭니다.
2.BigQuery API 기능을 사용하여 쿼리를 실행해 봅니다.
정상적으로 쿼리가 실행되는 것이 확인이 되었으면 출력을 시각화하여 패턴을 확인하는 작업입니다.
3. Google Maps API를 활성화해서 BigQuery로 쿼리를 보내는 웹페이지 작성
3-1 구글 클라우드 마켓 플레이스 에서 Maps JavaScript API를 검색해서 사용하기를 눌러 활성화 합니다.
3-2 크롬 웹서버 서비스를 활용하여 쉽게 웹서비스를 구현합니다.
3-3 구글 코드랩에서 제공하는 오픈소스를 다운로드 받습니다.
https://github.com/googlecodelabs/bigquery-maps-api
3-4 IDE로 index.html을 오픈해서 나의 API로 교체를 해줍니다.
3-5 시각화 라이브러리를 지용해서 지도에 그리기 기능 추가합니다
<script src='http://maps.googleapis.com/maps/api/js?libraries=visualization,drawing&callback=initMap&key=YOUR_API_KEY' async defer></script>
위의 코드로 바꾸어 주면 됩니다. 물론, Your Key에는 자신의 api key를 입력해야 합니다.
4. BigQuery 클라이언트 API사용하기
브라우저 기반 애플리케이션을 개발할 예정이므로 JavaScript 용 Google API 클라이언트 라이브러리를 통해 BigQuery API를 사용합니다 .
Google 클라이언트 API를로드 한 후 사용자에게 BigQuery의 데이터에 액세스 할 수있는 권한을 부여해야합니다. 이를 위해 OAuth 2.0을 사용할 수 있습니다. 먼저 Google Cloud Console 프로젝트에서 자격 증명을 설정해야합니다.
이제 추가된 OAuth 클라이언를 사용해서 사용자가 BigQuery에 엑세스 할 수 있는 권한을 부여합니다.
<script src='https://apis.google.com/js/client.js'></script> <script type='text/javascript'> gapi.load('client:auth', authorize); </script>
위의 코드를 사용하여서 클라이언트 라이브러리와 인증 묘듈을 로드하여 사용자를 인증할 수 있습니다.
BigQuery API 호출은 일반적으로 몇 초 안에 실행되지만 응답을 즉시 반환하지 않을 수 있습니다. 장기 실행 작업의 상태를 찾기 위해 BigQuery를 폴링하고 작업이 완료된 경우에만 결과를 가져 오는 논리가 필요합니다.
요청을 보냈을 때 CheckJobStatus를 활용하여 주기적으로 작업의 상태를 확인하는 방법을 사용합니다.
get API방식을 사용합니다.
쿼리 결과를 얻기 위해서는 getQueryResult를 이용합니다.
5. BigQuery API를 사용해서 위치 데이터를 조회합니다.
BigQuery의 데이터에 대해 공간 쿼리를 실행하기 위해 SQL을 사용하는 세 가지 방법이 있습니다.
- 사각형으로 선택하기
- 반경으로 선택하기
- 사용자정의 기능 사용하기
BigQuery 데이터를지도에 표시하는 가장 간단한 방법은 위도 및 경도가 사각형 내에 포함 된 모든 행을 요청보다 작거나 큰 비교를 사용하여 요청하는 것입니다.
drawingManager.addListener('rectanglecomplete', rectangle => rectangleQuery(rectangle.getBounds()));
위의 코드를 추가해서 getBounds()사각형 객체를 사용하여 사각형의 범위를 나타내는 객체를 지도좌표로 가져와서 함수에 전달합니다.
사각형의 모든 행에 대한 쿼리를 BigQuery로 전송하는 코드입니다.
6. 응답 시각화
BigQuery 테이블은 페타 바이트 규모의 데이터로 매우 클 수 있으며 초당 수십만 행씩 증가 할 수 있습니다. 따라서 반환되는 데이터의 양을 제한하여지도에 표시 할 수 있도록하는 것이 중요합니다. 매우 큰 결과 집합 (수만 행 이상)에서 모든 행의 위치를 그리면 읽을 수없는 맵이 생깁니다. SQL 쿼리와 맵 모두에서 위치를 집계하는 많은 기술이 있으며 쿼리가 반환하는 결과를 제한 할 수 있습니다.
Limit으로 응답 행을 제한하여 데이터 양을 조절하고 변수에 지정함으로써 모든 쿼리가 동일한 값을 사용하게 합니다.
마지막으로 위치 밀도를 시각화하기 위해 히트 맵을 사용합니다. 이러한 목적으로 Maps Javascript API에는 HeatmapLayer 클래스가 있습니다. HeatmapLayer는 위도, 경도 좌표 배열을 사용하므로 쿼리에서 반환 된 행을 히트 맵으로 쉽게 변환 할 수 있습니다.
원하는 지도 상의 아무 지점에 사각형을 그리면 아래와 같이 원하는 결과가 나옵니다.