Example 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:
-
backend
: NestJS project with controllers and service logic separated. Configuration to connect to the Elastic cluster is located atconfig.ts
. Using environment variables or an.env
file you can run the application against Elastic Cloud or any host. Adapting this to other configurations would need to tweak theconfig.ts
file according to the docs.The API exposes:
/airports/geojson
: a GeoJSON representation of the entire index/positions/last/geojson
: filtering the last 15 minutes, a single last position per flight including some additional data; all represented as a GeoJSON source/positions/count/all
: a count for all the positions stored in the index/positions/last/feature
: the last record in the index ordered by date
-
frontend
: Simple viewer using React + Mapbox GL JS + Elastic UI to present a minimal dashboard with the map and some additional information.
The backend assumes the following indices in your cluster:
airports
: an index with the airports of the world. You can use Elastic Maps GeoJSON Upload to push this file or find your way to upload the original dataset from Natural Earth.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.
Check 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.
The package.json
and Procfile
allow to deploy this project to Heroku, but any other NodeJS compatible PaaS should work as well.