Skip to main content

Euro AIP: European Aeronautical Information Library & Explorer

Euro AIP is a comprehensive Python library and web application for exploring, processing, and analyzing European airport and AIP (Aeronautical Information Publication) data.

Version: 2.0 - Modern API with queryable collections, transactions, and Pythonic operations


1. euro_aip Python Library

Overview

The euro_aip library provides:

  • Modern Query API: Fluent, chainable collections for powerful data queries
  • Builder API: Transaction-safe model building with bulk operations
  • Data Models: Rich Python classes for airports, runways, procedures, and AIP entries
  • Parsers: Tools to extract and standardize AIP data from various European sources
  • Data Sources: Integrations for WorldAirports, Autorouter, and more
  • Utilities: Geographic calculations, field standardization, fuzzy matching, and more

Key Features (v2.0)

  • 🔍 Queryable Collections - LINQ-style queries with method chaining
  • 📖 Dict-Style Access - Natural lookups: airports['EGLL']
  • 🔧 Set Operations - Combine queries with |, &, - operators
  • 💾 Transactions - Atomic updates with automatic rollback
  • Bulk Operations - High-performance batch processing
  • 🏗️ Builder Pattern - Fluent API for constructing airports
  • 🛂 Border Formalities - Schengen / EU-customs membership + crossing-requirements helper
  • 🔄 Full Backward Compatibility - Legacy API still supported

What Can You Use It For?

  • Programmatic access to a unified, standardized database of European airports and procedures
  • Complex queries with intuitive, chainable syntax
  • Safe model updates with transaction support
  • High-performance data loading with bulk operations
  • Custom data analysis: Build your own scripts to analyze, filter, or export aviation data
  • Integration: Use as a backend for your own aviation tools or research

Quick Examples

Query API - Finding Airports

from euro_aip.models import EuroAipModel
from euro_aip.storage import DatabaseStorage

# Load the model
storage = DatabaseStorage('airports.db')
model = storage.load_model()

# Dict-style lookup (fastest for known ICAO)
heathrow = model.airports['EGLL']
print(f"{heathrow.name} - {heathrow.elevation_ft}ft")

# Filter by country
french_airports = model.airports.by_country("FR").all()

# Complex filtering with method chaining
suitable = model.airports \
    .by_country("FR") \
    .with_hard_runway() \
    .with_min_runway_length(3000) \
    .with_fuel(avgas=True, jet_a=True) \
    .all()

# Set operations for OR logic
western_europe = (
    model.airports.by_country("FR") |
    model.airports.by_country("DE") |
    model.airports.by_country("BE")
)

# Check existence
if 'LFPG' in model.airports:
    cdg = model.airports['LFPG']

Builder API - Modifying Data

# Bulk operations (high performance)
airports_to_add = [...]  # List of Airport objects
result = model.bulk_add_airports(
    airports_to_add,
    merge="update_existing",
    update_derived=True
)
print(f"Added {result['added']}, updated {result['updated']}")

# Transaction API (atomic updates)
with model.transaction() as txn:
    txn.add_airport(airport)
    txn.bulk_add_procedures(procedures)
    # Automatic rollback on error

# Builder pattern (fluent API)
airport = model.airport_builder("EGLL") \
    .with_basic_info(
        name="London Heathrow",
        latitude_deg=51.4706,
        longitude_deg=-0.4619
    ) \
    .with_runways(runways) \
    .commit()

Border Formalities - Crossing Requirements

from euro_aip.borders import crossing_requirements, is_schengen

# What border formalities apply for a France -> Switzerland flight?
req = crossing_requirements("FR", "CH")
print(req.immigration_required)  # False (both Schengen)
print(req.customs_required)      # True  (CH is outside the EU customs union)

# A country in neither bloc (e.g. GB after Brexit) reads as a full border
req = crossing_requirements("FR", "GB")
print(req.immigration_required, req.customs_required)  # True True

# Derived airport convenience properties (from iso_country)
model.airports['LSGG'].is_schengen           # True
model.airports['LSGG'].is_eu_customs_union   # False

Documentation

Full documentation available in designs/:


2. Example Scripts

The example/ directory contains ready-to-use scripts for common tasks:

  • aipexport.py: Export AIP data to various formats (JSON, CSV, etc.)
  • bordercrossingexport.py: Export and analyze border crossing airport data
  • foreflight.py: Example for exporting data compatible with ForeFlight
  • test_*.py: Example and test scripts for validating data and demonstrating usage

Each script includes usage instructions in the file or via --help.


3. Euro AIP Web App

A modern web application for interactive exploration of European airports and AIP data.

Live Demo: The web app is available at https://maps.flyfun.aero

Database Download: The underlying database generated by this library is available for download at https://flyfun.aero/data/airports.db

Features

  • Interactive Map: Explore airports visually with Leaflet.js
  • Advanced Filtering: Filter by country (full names, UK/EU priority), runway, AIP fields, and more
  • AIP Filter Presets: Quick filters for AVGAS, Jet A, Customs, etc., plus custom field filtering
  • Route-Based Search: Find airports near a user-defined route
  • Border Crossing Points: Specialized data and filters
  • Statistics and Charts: Visual analytics with Chart.js
  • Modern UI: Responsive layout (Bootstrap 5), Font Awesome icons, scrollable panels, always-visible legend

Quick Start

  1. Clone the repository
  2. Install dependencies: pip install -r requirements.txt
  3. Run the server: cd web/server && python main.py
  4. Open http://localhost:8000 in your browser

API Endpoints

  • GET /api/airports/ - List airports with filtering (country, max_airports, AIP field, etc.)
  • GET /api/airports/{icao} - Get detailed airport information
  • GET /api/airports/route-search - Find airports near a route
  • GET /api/procedures/ - List procedures with filtering
  • GET /api/statistics/ - Get various statistics
  • GET /api/filters/countries - Get country list with full names and display order

Route Search API Example

GET /api/airports/route-search?airports=LFPO,LFOB,LFST&distance_nm=50

4. Data Sources

  • WorldAirports: Comprehensive airport database from OurAirports
  • Autorouter: European AIP data and procedures
  • France and UK AIP: Direct parsing of official published AIP data from France and the UK
  • Border Crossing Data: Specialized border crossing point information
  • Custom Parsers: For different European aviation authorities

5. Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

6. License

MIT License - see the LICENSE file for details.


7. Acknowledgments

  • OurAirports: For the comprehensive airport database
  • Autorouter: For European AIP data
  • OpenStreetMap: For map tiles
  • Leaflet.js: For the interactive map functionality
  • Bootstrap 5: For responsive layout and UI components
  • Font Awesome: For iconography
  • Chart.js: For statistical charting

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

euro_aip-0.14.0.tar.gz (261.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

euro_aip-0.14.0-py3-none-any.whl (310.3 kB view details)

Uploaded Python 3

File details

Details for the file euro_aip-0.14.0.tar.gz.

File metadata

  • Download URL: euro_aip-0.14.0.tar.gz
  • Upload date:
  • Size: 261.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for euro_aip-0.14.0.tar.gz
Algorithm Hash digest
SHA256 9fbfcb0cf631ce0002747f90316f2d580e1c256a38349eb261dea8ed25a2751d
MD5 bdedd3493d63121abcfa76bec304bc5b
BLAKE2b-256 1502556f60dc86a8ed73835752cb311b14854194cc972ef7b98106624a0e8f86

See more details on using hashes here.

File details

Details for the file euro_aip-0.14.0-py3-none-any.whl.

File metadata

  • Download URL: euro_aip-0.14.0-py3-none-any.whl
  • Upload date:
  • Size: 310.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for euro_aip-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ae8a19ec931361f0d4ece05f1aa699839c3ccabcb9198b499f3d56c672df1810
MD5 b98cad479921e51785fd2ace63661cb7
BLAKE2b-256 95898755b613de2bd75c556f4f731e37ed211c52f9f3a48a2177531c60792544

See more details on using hashes here.

Release history Release notifications | RSS feed

0.15.1

2 files

0.15.0

2 files

This release

0.14.0 This release

2 files

0.13.0

2 files

0.12.0

2 files

0.11.1

2 files

0.11.0

2 files

0.10.2

2 files

0.10.1

2 files

0.10.0

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page