{"id":19966187,"url":"https://github.com/jsanz/opensky-viewer","last_synced_at":"2026-01-19T06:01:47.389Z","repository":{"id":43726855,"uuid":"238966941","full_name":"jsanz/opensky-viewer","owner":"jsanz","description":"A demonstration on consuming Elasticsearch geospatial data using MapboxGL and Elastic UI framework ","archived":false,"fork":false,"pushed_at":"2022-02-21T15:16:49.000Z","size":5174,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-06T08:30:31.453Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsanz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-07T16:05:16.000Z","updated_at":"2022-02-21T15:16:46.000Z","dependencies_parsed_at":"2022-08-22T13:01:01.291Z","dependency_job_id":null,"html_url":"https://github.com/jsanz/opensky-viewer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jsanz/opensky-viewer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsanz%2Fopensky-viewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsanz%2Fopensky-viewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsanz%2Fopensky-viewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsanz%2Fopensky-viewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsanz","download_url":"https://codeload.github.com/jsanz/opensky-viewer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsanz%2Fopensky-viewer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28562237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T02:33:53.462Z","updated_at":"2026-01-19T06:01:47.375Z","avatar_url":"https://github.com/jsanz.png","language":"TypeScript","readme":"# OpenSky viewer example\n\nExample application that provides a simple API to query a Elasticsearch cluster, and a web viewer to render two layers on a map. The application is split into front and back-end subprojects:\n\n* `backend`: [NestJS](https://nestjs.com/) project with [controllers](./backend/src/controllers.ts) and [service](./backend/src/services.ts) logic separated. Configuration to connect to the Elastic cluster is located at [`config.ts`](./backend/src/config.ts). Using environment variables or an `.env` file you can run the application against [Elastic Cloud](https://cloud.elastic.co/) or any host. Adapting this to other configurations would need to tweak the `config.ts` file according to [the docs](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/client-configuration.html).\n\n  The API exposes:\n  \n  * `/airports/geojson`: a GeoJSON representation of the entire index\n  * `/positions/last/geojson`: filtering the last 15 minutes, a single last position per flight including some additional data; all represented as a GeoJSON source\n  * `/positions/count/all`: a count for all the positions stored in the index\n  * `/positions/last/feature`: the last record in the index ordered by date\n\n* `frontend`: Simple viewer using [React](https://reactjs.org/) + [Mapbox GL JS](https://docs.mapbox.com/mapbox-gl-js) + [Elastic UI](https://elastic.github.io/eui/#/) to present a minimal dashboard with the map and some additional information.\n\n\n## Elastic data\n\nThe backend assumes the following indices in your cluster:\n\n* `airports`: an index with the airports of the world. You can use Elastic Maps GeoJSON Upload to push [this file](https://github.com/jsanz/elastic-workshop/blob/master/lab/airports/airports.geo.json) or find your way to upload the original dataset from [Natural Earth](https://www.naturalearthdata.com/downloads/10m-cultural-vectors/airports/).\n* `flight_tracking*`: one or more indexes with flight positions imported from the OpenSky network. You can upload data in realtime or do a one-off with the scripts provided all in [this folder](https://github.com/jsanz/elastic-workshop/tree/master/lab/opensky-loader).\n\n## Deploy\n\nCheck the different `package.json` scripts to see how the front-end is built and then `backend` statically mounts the resulting `/frontend/build` folder as its root.\n\nThe [`package.json`](./package.json) and [`Procfile`](./Procfile) allow to deploy this project to [Heroku](https://www.heroku.com/), but any other NodeJS compatible PaaS should work as well.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsanz%2Fopensky-viewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsanz%2Fopensky-viewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsanz%2Fopensky-viewer/lists"}