How does it work?
Vlucht in beeld shows live what is flying over a place of your choice: pick your own location, an address or a point on the map, and you will see the aircraft with photo, route, altitude and distance, in 2D and 3D, plus the weather, the ISS and the bright satellites over that place.
Every airliner (and more and more small aircraft and helicopters) broadcasts its position, altitude, speed and flight number a few times a second on 1090 MHz. This is called ADS‑B (Automatic Dependent Surveillance–Broadcast). Anyone with an antenna and a receiver costing a few tens of euros can pick it up. Thousands of hobbyists do exactly that and share what they receive with networks such as adsb.fi.
The chain
- adsb.fi — every 2 seconds this site requests the air traffic within a generous radius around every place being viewed (bundled into a few large circles over Europe). That is the combined reception of community receivers in the area.
- adsbdb — an aircraft's ICAO address is translated into registration, type and owner; the flight number into a route (departure → destination).
- Planespotters.net — supplies a photo of that very aircraft, with the photographer's name.
- OpenSky Network — when you click an aircraft, the site fetches the track it actually flew, from take-off onwards. That is the solid line behind the aircraft; the dotted line ahead of it is the expected path to the destination. OpenSky is a research network (Schäfer et al., Bringing up OpenSky: A large-scale ADS-B sensor network for research, IPSN 2014).
- Logbook — every sighting goes into an SQLite database: closest point, altitude, speed, route. The daily overviews and records come from there.
- Notifications — special aircraft (military, helicopters, low flyers) trigger a push notification on your phone.
Aerial photo or map
At the bottom of the 3D bar, under ground layer, you can choose between the aerial photo and a topographic map with place and street names (the BRT Achtergrondkaart from PDOK, free and open). That map is especially helpful when you follow an aircraft: on an aerial photo you can see the landscape, but not which village you are hovering over. The map covers the Netherlands; beyond it the satellite image stays in place. Your choice is remembered in this browser.
Looking back and rarity
Each aircraft shows how often this type, this airline and this particular airframe have been seen over this place before. That is calculated only from this place's own logbook, so it says nothing about how rare an aircraft is in general — only whether you see it more often. Until a place has at least two weeks and two hundred sightings, we don't call anything "new", because then everything is new. Under Replay you can watch an earlier day again at speed. Since 18 September 2026 the track of every sighting has been kept (one point every fifteen seconds, for a month); for older days only the point of closest approach is known, so the aircraft stands still there.
The 3D view
The 3D page shows this place itself: in the Netherlands the buildings come from 3D BAG (an open 3D model of every building in the Netherlands, made by TU Delft) and the aerial photo from PDOK (8 cm per pixel). In Flanders the aerial photo comes from Digitaal Vlaanderen; elsewhere it is Esri's satellite image. So each area has exactly one photo — two aerial photos laid over each other used to cause visible seams and colour differences. The sun and the moon are where they really are at that moment — the scene calculates this from the clock, and with the time slider you can turn the day forwards or back. The weather comes from Buienradar (nearest KNMI station); you can also see rain and fog in the scene. Bear in mind: 3D asks a lot of your graphics card. The site picks a quality profile by itself; if it stutters, set the quality to "low" in the bar at the bottom (no shadows or anti-aliasing, lower resolution) or view the place in 2D on the live page. If you use Brave with "aggressive" fingerprinting protection, the labels in 3D become unreadable (Brave adds noise to text drawn on a canvas); set the Shields for this site to standard.
The aircraft in 3D
In 3D every aircraft gets its own true-to-scale model, in its own Vlucht in beeld livery (no airline logos): per type as far as possible, otherwise the model that looks most like it. Airliners from Boeing, Airbus, Embraer, Bombardier and ATR, business jets, light aircraft, ultralights and gliders, helicopters (police and air ambulance included) and military aircraft. The models are still being improved and extended.
Take a close look at the models — rotate, zoom in and, on the newest aircraft, operate the landing gear and flaps.
Not every model is our own: for special types we use work by creators on Sketchfab, under a CC BY licence. This is also shown with the model itself on the models page.
- Boeing 737-800 Cockpit by hakai315 (CC BY 4.0)
- Eurocopter EC135 P2 (FlightGear), cockpit by Heiko Schulz, Maik Justus, Melchior Franz, Oliver Thurau e.a. (FlightGear) (GPL v2)
- Eurocopter EC145 voor FlightGear, cockpit by Heiko Schulz, Maik Justus, StuartC, Melchior Franz e.a. (FlightGear) (GPL v2)
- Embraer E-Jet (E190) voor FlightGear, cockpit by Narendran Muraleedharan e.a. (FlightGear) (GPL v2)
- Boeing 777 voor FlightGear, cockpit by Syd Adams, Justin Smithies, Thorsten Brehm, Joshua Davidson e.a. (FlightGear) (GPL v2)
- Airbus A320-family voor FlightGear (IDG), cockpit by Josh Davidson, Jonathan Redpath, merspieler, Matthew Maring, Thorsten Herrmann, Semir Gebran e.a. (FlightGear) (GPL v2)
- Bombardier CRJ700 voor FlightGear, cockpit by Ryan Miller e.a. (FlightGear) (GPL v2)
- B612 (lettertype van de cockpitopschriften) by Airbus / Intactile DESIGN (SIL Open Font License 1.1)
- Cessna 172P voor FlightGear, cockpit by c172p-team (FlightGear) (GPL v2)
Controls in 3D: with the mouse, drag to rotate, scroll to zoom and drag with the right button to tilt. On a touchscreen, look around the point in the middle of the view with one finger, pan with two fingers and pinch to zoom.
Map layers
With the layers button at the top right of the map you can switch on extra layers: the rain radar (KNMI, last five minutes), Natura 2000 areas (RVO), municipal and provincial boundaries (Kadaster) and today's estimated emissions per 5×5 km square (our own count, see below). The first ones come straight from the open map services of PDOK and KNMI; your choice is remembered in your browser.
Fuel burn and emissions (estimate)
Each aircraft of a known type comes with "facts": seats, weights, wingspan, engines, and an estimate of its fuel burn at that moment. That estimate comes from OpenAP, TU Delft's open aircraft performance model: type, altitude, speed and rate of climb or descent give the fuel flow (according to its makers comparable in accuracy to BADA 3, the model the aviation industry itself uses), and from that CO₂ (3.16 kg per kg of kerosene) and NOx (ICAO engine emissions databank). What we don't know is the weight and the exact engine; we assume three quarters of the maximum take-off weight and the standard engine, so allow for ±30% per aircraft. Over a day that averages out reasonably well.
On the live page, each place in the Netherlands shows today's total: all aircraft within the chosen radius, tracked per 5×5 km square. Helicopters, turboprops, light aircraft and military aircraft are not in the model and therefore don't count; the real figure is more likely higher than lower. For comparison we use the car: an average passenger car emits about 130 grams of CO₂ per kilometre in practice, and 13,000 km is a year's driving. That is only to make the number tangible. Emissions at 10 km altitude are also something different from what comes down locally; we deliberately don't calculate that.
The flight meter (estimate)
With an aircraft that has a route, the detail panel and the 3D follow view show a running counter of what that flight costs and earns so far. It is a rough estimate with averages, not airline figures (those are confidential). Costs: fuel (OpenAP's cruise fuel flow × 80 %, because an aircraft gets lighter during the flight, × the kerosene price this site uses), plus fixed costs per flight hour for aircraft, maintenance, crew, air traffic control and overhead (from about € 2,200 for a regional jet to € 11,500 for a large widebody), plus airport charges and handling: half at departure, the other half at arrival. Revenue: seats (OpenAP) × 85 % load factor × an average fare that rises with distance (€ 60 + 6 cents per km, all cabin classes together) plus € 15 ancillary sales per passenger, and belly cargo on widebodies. Revenue builds up with the distance flown. We don't know the departure time; we estimate it from how far the aircraft already is from its departure airport. The route comes from adsbdb per flight number and is sometimes wrong; then the counter is wrong too. Turboprops, light aircraft, helicopters and flights under 150 km get no counter. The scale is based on our own worked example of a 777-300ER from Amsterdam to Shanghai, scaled by size.
What does "over this place" mean?
An aircraft counts as "over this place" if it comes within 5.6 km of the centre point. At cruising altitude (well over 10 km) that is practically straight above you; at 1,000 metres you can see it clearly pass overhead.
Another place
With the 📍 button at the top you can view the same thing over a place of your choice: your own location
(on your phone), an address or town, or a point on the map. Such an ad-hoc place has an address like
/@52.500,5.470/ and shows live traffic, weather, ISS and satellites, but keeps no logbook.
If you save the place with a name, it gets a short code (/l/abc123/) and from then on
its own logbook and statistics. Your own places are listed under the 📍 button, but only in the browser in which you
created them; on another device you need the link. A place
that hasn't been viewed for thirty days stops being logged until someone looks at it again. Coordinates are
rounded to about a hundred metres. The coverage area is Europe: adsb.fi's open API returns
a circle of at most 460 km per request, which is just enough for a few circles over Europe, but not
for the whole world.
Where each number comes from
Per item: measured, calculated or estimated, the source, and what we don't know.
| how | source | what we don't know | |
|---|---|---|---|
| Position | measured | The aircraft itself (GPS), received by adsb.fi volunteers | Between two measurements the map and 3D extrapolate on heading and speed; a position not measured for more than 20 s is drawn translucent. Aircraft without ADS-B we don't see. |
| Altitude | measured, converted | The aircraft: pressure altitude and often GPS altitude | Converted to sea level with the GPS altitude, otherwise with the pressure (QNH) low flyers report, otherwise with Buienradar's pressure. A good estimate, not a measurement above your roof. |
| Speed and heading | measured | The aircraft | |
| Type, registration, airline | looked up | adsbdb | A database, not a measurement; can be missing or outdated. |
| Route | looked up, partly measured | adsbdb per flight number; the next day OpenSky | Airlines reuse one flight number for several flights, so the adsbdb route can be wrong. OpenSky derives the airfields a day later from the flown track; those routes are marked as measured. |
| Photo | looked up | Planespotters.net, with the photographer credited | |
| Distance, 'over the place', records | calculated | From the positions above | |
| Fuel burn and emissions | estimate | OpenAP model (TU Delft) | Uses type, altitude and speed; not that aircraft's actual fuel burn. |
| Advance warning (notification) | estimate | Current heading and speed | It can't see turns coming. |
| Runways in use | derived | Our own observations of the last hour | Not an airport announcement; a go-around also counts as a landing. |
| Emergency codes | measured | The transponder code the aircraft transmits | We don't know what was going on. We don't process code 7500. |
| GPS interference | indication | The accuracy (NACp) aircraft report themselves | Not proof of interference. |
| 3D buildings | measured / partly estimated | 3D BAG (CC BY 4.0); outside the Netherlands OpenStreetMap (ODbL) | For OSM buildings without a height we estimate it from the number of storeys or use 7 m; those are drawn lighter. |
| Control towers in 3D | measured / partly estimated | Position from AHN and BAG (PDOK) | Eye height for Schiphol and Lelystad as published; for the other towers estimated (≈ on screen). |
| Tower radio | simulated | Computer voice based on what the aircraft do | Not real air traffic control. You open the real radio yourself at LiveATC. |
| Weather and showers | measured / forecast | Buienradar | |
| Clouds in 3D | weather model | Open-Meteo (KNMI Harmonie, CC BY 4.0) | Low, mid and high cloud cover on a ~28 km grid around where you look; the cloud base is estimated from temperature and dew point. Where the clouds are within a grid cell is drawn, not measured. |
| ISS and satellites | calculated | Orbital elements from CelesTrak, propagated ourselves (SGP4) |
What you do and don't see here
Everything on this site comes from public sources; the positions come from other people's receivers. Military aircraft often don't transmit, or only partially, and some aircraft don't transmit a position. On top of that, data is sometimes missing from the databases. The site doesn't make anything up: where a photo, route or type is missing, the field stays empty.
Why fighter jets are sometimes missing
You hear a jet, you look at the site, and there is nothing there. The site isn't broken: the aircraft simply isn't transmitting anything we can receive. Every position here comes from the aircraft itself. A civil aircraft broadcasts its position, altitude and speed several times a second (ADS-B), and receivers run by volunteers pick that up. Military aircraft are not required to do this. Fighter jets in particular often fly with the transponder off during exercises, or only send the encrypted military signal, which no public receiver can read.
Sometimes an aircraft does send its identity, but not its position. A network can then sometimes calculate the position from the tiny differences in arrival time at several receivers (multilateration, MLAT). That only works where enough receivers hear the signal, and for an aircraft flying low that is often not the case. Military and air traffic control radar data is not public.
Whether a military low-flying or training area is active right now is not published as a public live source as far as we could find, so the site does not show it.
What you can do: use the 👀 I see or hear something that isn't on the map button under the live map. Your report is shown on the map for an hour as a dashed circle with a question mark: a report by a visitor, not a measurement. We cannot check what flew there. The more people report the same thing around the same time and place, the clearer it becomes. All reports of the last 30 days are on the visitor reports page.
On your own website
A small live map for your own site or club page: put this in your page (the part before /embed is the place, as in the address bar here).
<iframe src="https://vluchtinbeeld.nl/boven/utrecht/embed" width="600" height="360" style="border:0" loading="lazy"></iframe>
Technology
Python/Flask with a background poller, SQLite, Leaflet for the map, CesiumJS for 3D, our own SGP4 calculations for the ISS and satellites, web push for the notifications; all in a single Docker container on our own hardware, without cloud services or paid APIs. The source code is a private project of Processware.
It is also Processware's calling card: combining open data, maps, 3D and notifications like this is exactly what I build for businesses, only then with their data. Need something similar, or just curious how this is put together? Email info@processware.nl.
App and notifications
With the 🔔 button at the top you can install the site as an app on your phone and choose what you want to be notified about: everything that passes over the place, military aircraft, helicopters, low flyers, or a specific aircraft (registration, flight number or hex) as soon as it is airborne anywhere over the Netherlands, regardless of your place. The notification also arrives when the site isn't open. On an iPhone this only works if the site is on your home screen (Share → Add to Home Screen). One subscription is stored per device, nothing else.
Beta, without accounts
Vlucht in beeld is still under development: things may occasionally hiccup, and things are still changing. There are no accounts and no personal data is logged. A saved place is nothing more than a name and a coordinate with a short code (plus a hashed fingerprint of the IP address, only to limit the number of new places per day). The list of your places and the key to delete them are stored only in your own browser. More about this on the privacy page.
The ISS
The space station's orbit is calculated here by the site itself (SGP4) from the orbital elements that CelesTrak publishes. From that follow its position, altitude, speed and — the best part — when it can be seen from this place with the naked eye: it has to be above the horizon and in sunlight itself while it is already dark here. Those are the bright, fast "stars" that cross from west to east in a few minutes. The live video is NASA's own stream from the external cameras.