AUP Geolocator
Required roles:
AIS PIB API— Roles
Base endpoint:https://ais-pib-api.ibosoft.net.tr:2087/eurocontrol-aup-geolocator
Reference documents: EUROCONTROL ERNIP Part 3 Airspace Management Handbook, Ed. 6.1 (02/07/24)
Attribution: showibonav.aerowherever this data is displayed
Data sources: EUROCONTROL Network Manager, Ibosoft AIS Navdata, NOTAMs.
Last updated: 17 OCT 2026About the reference documents: Related Documents and Resources
Depending on your use, the original data sources may also need to be credited.
Places the active AUP/UUP release on the map: restricted airspace (RSA) allocations as polygons and ATS route / CDR closures as lines, served as GeoJSON. Processing starts automatically whenever the active release changes.
The AUP tables themselves carry no geometry. This service resolves each entry against the RAD, the airspace and ATS route data and the NOTAMs, as described in How geometry is resolved. The tables are in AUP / UUP, the RAD in RAD.
Endpoints
| Endpoint | Description |
|---|---|
GET /eurocontrol-aup-geolocator/status |
Processing state: last processed release, last run, last error, AUP and RAD versions used |
GET /eurocontrol-aup-geolocator/latest-snapshot |
The last processed release and the versions used; poll this to know when to reload the layers |
GET /eurocontrol-aup-geolocator/geojson/rsa |
RSA allocations (polygons) |
GET /eurocontrol-aup-geolocator/geojson/cdr |
ATS route / CDR closures on all ATS routes (lines) |
GET /eurocontrol-aup-geolocator/geojson/cdr/upper |
Closures matched on upper ATS routes |
GET /eurocontrol-aup-geolocator/geojson/cdr/non-upper |
Closures matched on non-upper ATS routes |
GET /eurocontrol-aup-geolocator/geojson/cdr/other |
Closures matched on other (named) routes |
POST /eurocontrol-aup-geolocator/reprocess |
Process the active release again |
How geometry is resolved
The active release is checked every 30 seconds; when it changes, the whole release is processed again. If the release tables are not available yet, processing is retried on the next check.
RSA allocations
The unit of processing is the FUA/EU RS ID, not the RSA row: each RSA row has one or more FUA/EU RS IDs in its extra table (see AUP / UUP), and each one gives its own feature.
-
Manually defined geometry — if a geometry has been defined for the FUA/EU RS ID, it is used as is (
geometry_source: "manual"). -
Entries marked "RAD ANNEX 2C" in their description — the FUA/EU RS ID is looked up in RAD Annex 2C (the RAD version in force), which gives the AIP RSA ID and the country (first two letters of NAS/FAB). If the FUA/EU RS ID has no row in Annex 2C, the entry is skipped (no NOTAM search). The AIP RSA ID can hold several terms separated by spaces; they are tried in order and the first one found is used (an empty AIP RSA ID is replaced by the RSA ID). Each term is searched in the airspace data of that country, in this order:
- airspace designator, exact match (after removing spaces and hyphens, upper case;
P1matchesP1, notP10); - country + type + designator, for prohibited, restricted and danger areas: the first two letters of the term are the country, the next letter the type (
EGD701T→ typeD, designator701T;EDR203BZ→R,203BZ); - airspace name containing the term (terms of at least 4 characters).
If found:
geometry_source: "airspace". If not, the NOTAM search below is tried. - airspace designator, exact match (after removing spaces and hyphens, upper case;
-
NOTAM search — for other entries, and for RAD Annex 2C entries not found in the airspace data: the FUA/EU RS ID is searched in the NOTAM texts, and the geometry of the matching NOTAM is used (
geometry_source: "notam"). Only NOTAMs that have a geometry, belong to the countries of the release and overlap the release validity (WEF–TIL) are searched.
When a term matches more than one geometry, the first one is used. Different FUA/EU RS IDs that share the same AIP RSA ID each get their own feature. An RSA row without an extra table, or none of whose FUA/EU RS IDs is resolved, does not appear in the output.
Countries: the countries of the release are taken from the first two letters of the RSA IDs (LTTSA11 → LT); they set which NOTAMs are searched and limit the airspace data to the area of those countries' FIRs and UIRs (all FIRs of a country together). The country of each airspace search comes from NAS/FAB, so an airspace with the same designator in another country is not matched.
ATS route / CDR closures
For each closure, the route ID and its Between and And points are read; a closure with any of the three empty is not searched.
- Route: the route ID is compared with the designator of the ATS route segments — prefix, letter, number and the parallel-route suffix (
UL607A→U+L+607+A; spaces and hyphens ignored). Routes without a designator (named routes in the "other" set, e.g.SOUTH) are matched by name. - Segments: if one segment runs from Between to And (in either direction), it is used. Otherwise the segments of the route are chained from Between to And (shortest chain, segments reversed where needed) and their coordinates are joined into one line, in the Between → And direction.
Each closure is searched independently in four route sets — all, upper, non-upper and other — so the same closure can appear in more than one of the /geojson/cdr… outputs. A closure whose route or points are not found does not appear in that output.
Response
/status
{
"module": "eurocontrol_aup_geolocator",
"state": {
"last_processed_release": "euup-20260611140000",
"last_run_at": "2026-06-11T14:05:22+00:00",
"last_error": null,
"processing": false,
"aup_info": {"type": "EUUP", "sequence": 4, "valid_wef": "2026-06-11T06:00:00Z", "valid_til": "2026-06-12T06:00:00Z"},
"rad_info": {"airac": "2606", "kind": "rolling_rad", "version_str": "1.12"}
}
}
/latest-snapshot
{
"snapshot": "euup-20260611140000",
"last_run_at": "2026-06-11T14:05:22+00:00",
"aup_info": {"type": "EUUP", "sequence": 4, "valid_wef": "…", "valid_til": "…"},
"rad_info": {"airac": "2606", "kind": "rolling_rad", "version_str": "1.12"}
}
When snapshot changes, reload the GeoJSON layers.
/geojson/rsa
A GeoJSON FeatureCollection (application/geo+json):
{
"type": "Feature",
"geometry": {"type": "Polygon", "coordinates": [[[29.1, 40.9], "…"]]},
"properties": {
"id": "LTP1R", "rsa_id": "LTP1", "aip_rsa_id": "LTP1",
"mnm_fl": "000", "max_fl": "999", "wef": "15:30", "unt": "00:00",
"geometry_source": "airspace"
}
}
| Property | Description |
|---|---|
id |
FUA/EU RS ID |
rsa_id |
RSA ID of the AUP row |
aip_rsa_id |
AIP RSA ID from RAD Annex 2C (empty when not used) |
mnm_fl, max_fl |
Lower and upper flight level |
wef, unt |
Activation start and end time (UTC) |
geometry_source |
airspace, notam or manual |
/geojson/cdr, /cdr/upper, /cdr/non-upper, /cdr/other
A GeoJSON FeatureCollection (application/geo+json):
{
"type": "Feature",
"geometry": {"type": "LineString", "coordinates": [[30.2, 41.0], "…"]},
"properties": {
"route_id": "UG802", "between": "SUTRA", "and": "LANED",
"mnm_fl": "FL245", "max_fl": "FL660", "wef": "06:00", "til": "14:00"
}
}
/reprocess
{"triggered": "euup-20260611140000"}
Errors
| Code | Meaning |
|---|---|
404 |
Nothing processed yet |
409 |
Processing is already running (/reprocess) |
503 |
The service is starting up, or the active release cannot be determined (/reprocess) |