bilawalsidhu/gods-eye-view — A spy satellite simulator in your browser, except the data is real. Live open source spatial intelligence on a photorealistic 3D globe.
실시간 공개 데이터를 3D 지구본에 모은 오픈소스 공간정보 시뮬레이터
God’s Eye View는 항공기·선박·위성·지진·날씨·공개 카메라 등 공개 데이터를 브라우저의 3D 지구본에서 탐색하는 오픈소스 프로젝트입니다. 대부분의 데이터는 API 키 없이 확인할 수 있으며, 위치 추적과 데이터 보간, 여러 데이터 계층을 결합하는 구현을 살펴볼 수 있습니다.
- 주제
AI 요약
God’s Eye View는 실시간 항공기와 선박, 위성 궤도, 지진, 날씨, 교통, 공개 카메라 정보를 한 화면에 겹쳐 보여주는 브라우저 기반 공간정보 시각화 도구입니다. 사용자는 지구본에서 대상을 선택해 추적하고, 항공기 시점으로 이동하거나 카메라를 조작할 수 있습니다. 음성 제어와 장면 질의에는 OpenAI API가 필요하지만, 시작과 다수의 데이터 계층에는 별도 API 키가 필요하지 않습니다. 프로젝트는 MIT License로 공개됐으며, 데이터 소스별 이용 조건은 따로 확인해야 합니다.
데이터 계층과 출처
각 데이터 계층은 별도 모듈로 구성합니다. 항공기 위치는 OpenSky와 adsb.lol, 선박은 AISStream, 위성은 CelesTrak, 지진은 USGS에서 가져옵니다. 날씨에는 NOAA와 ECMWF 자료를 사용하며, 산불은 NASA FIRMS, 대중교통은 운영기관의 GTFS-Realtime 피드를 이용합니다. CCTV 위치와 영상은 여러 지역 공공기관 자료를 모읍니다. OpenStreetMap에는 번호판 인식 카메라(ALPR)의 위치와 태그가 표시되지만, 번호판 정보나 영상은 제공하지 않습니다.
모든 레이어가 같은 방식으로 갱신되는 것은 아닙니다. 실시간 또는 주기적으로 갱신되는 피드와 달리, 교통 차량은 실제 개별 차량 위치가 아니라 집계 위치 자료를 바탕으로 실제 도로 위에 시뮬레이션합니다. CCTV 카메라의 방향과 시야도 추정값입니다. 로켓 발사 경로는 재구성 추정치로 표시합니다. 문서는 데이터가 지연되거나 불완전하고, 모델링·추론 결과일 수 있다고 명시하며 항해나 응급 대응 같은 안전 필수 용도로 쓰지 말라고 경고합니다.
실시간 시각화와 구현
항공기와 선박 피드는 15~30초 간격으로 도착합니다. 화면은 최신 위치를 그대로 튀듯이 옮기지 않고, 실제 시간보다 한 구간 뒤의 시점을 표시한 뒤 알려진 위치 사이를 보간합니다. 관측 간격에는 dead reckoning으로 움직임을 이어갑니다. 아이콘 방향은 지도 화면의 방향이 아니라 실제 진행 방향을 기준으로 계산하며, 카메라 시점이 바뀌어도 지구본 위에서 방향이 유지되도록 화면 좌표에 투영합니다.
위성은 SGP4로 궤도를 전파하고, GMST를 기준으로 궤도 고리를 보정해 위성 위치와 궤도 표시가 어긋나지 않게 합니다. 항공기와 카메라의 높이는 Google 3D Tiles 지형에 맞춰 조정합니다. 그 결과 항공기가 공항 활주로 위에, 카메라가 도로 주변에 놓이도록 표현합니다. 데이터 요청에는 OpenSky 크레딧 관리와 TomTom 일일 타일 예산이 적용되고, TLE 데이터는 디스크에 캐시합니다. 이런 제어가 각 제공자의 사용량 제한이나 과금 설정을 대신하지는 않습니다.
지도와 실행 환경
기본 지도는 Esri 위성 영상과 지형을 사용하며, 이용할 수 없으면 OpenStreetMap으로 대체합니다. Cesium ion 토큰을 설정하면 자격 조건과 할당량에 따라 Google Photorealistic 3D와 지형을 사용할 수 있고, Google Maps 키를 설정하면 과금이 적용되는 직접 연결 경로와 장소 검색을 사용할 수 있습니다. 문서는 기본 실행에 API 키가 필수는 아니라고 설명하면서도, 제공자별 약관과 할당량을 확인하고 브라우저에 노출되는 Google Maps·Cesium ion 키를 제공자 쪽에서 제한하라고 안내합니다.
로컬 실행은 Node.js 24.x 또는 26.x 환경에서 저장소를 복제하고 npm ci, npm run doctor, npm run dev를 차례로 실행합니다. 애플리케이션은 기본적으로 localhost에만 바인딩합니다. 프런트엔드는 Vanilla JavaScript, CesiumJS, Vite로 구성되며, 데이터 수집과 계층 조합, 음성 도구, 장면 연출 코드를 저장소에서 확인할 수 있습니다.
키 관리와 보안 범위
OpenAI, AISStream, OpenSky OAuth처럼 비밀 키가 필요한 요청은 서버 측 프록시를 거칩니다. 저장소는 이 경로에 SSRF 방어, 응답 크기 제한, 오류 메시지 정제를 적용한다고 설명합니다. OpenAI API 키는 브라우저에 전달하지 않고 짧은 수명의 세션 토큰을 사용합니다. 키는 로컬의 Git 제외 파일에 저장하며, 기본 서버 설정에서는 다른 기기에서 접근할 수 없습니다. 개발 서버를 LAN에 공개하는 설정은 가능하지만, 별도의 인증 프록시 없이 원격 접근을 열지 말라고 안내합니다.
프로젝트는 사람을 이름으로 검색하거나 얼굴을 인식하고 추적하는 기능을 만들지 않겠다고 명시합니다. 다만 공개 데이터의 위치와 시설 정보를 한데 모으는 도구인 만큼, 데이터의 한계와 제공자 약관, 서버 공개 범위를 함께 살펴야 합니다. 저자는 이 프로젝트를 검증된 운영 서비스가 아니라 탐색과 학습을 위한 시각화 기반으로 설명합니다.
원문: GitHub / 번역·요약: Trawling