Flight Paths, Feelings, and the Quest for the Perfect Route to Japan, Part 1
On the road to Japan, the journey is about the process, not the end result.Flight Paths, Feelings, and the Quest for the Perfect Route to Japan, Part 1
On the road to Japan, the journey is about the process, not the end result.Abelbeck Aviation Checklist progress: back-end is on a good way.
✅ asyncio HTTP server
✅ API module "Pilot's Logbook"
✅ API module "Aircraft Database"
✅ API module "Navigation"
✅ API module "German AIXM AIP"
✅ API module "German Print AIP"
"Navigation" offers course and wind triangle calculations.
"Aircraft database" offers take-off/landing distance calculations.
My digital local-only flight bag is evolving...
Initial release of my Python-based tool for German AIP page retrieval.
Background: Deutsche Flugsicherung publishes the AIP as per-page HTML resource, but provides the pages as PNG pictures, embedded as data URIs. This program retrieves the images and optionally transcribes them with tesseract.
Download:
https://aac.abelbeck.info/releases/getGermanAIP.py
Dependencies: Python standard library (batteries included); tesseract if you want PDFs and/or transcripts.
Slowly making progress:
✅ collect German AIP pages, OCR-ed
✅ allow search on German AIP (using grep on the transcripts; parsing ANSI colour codes to get structured results)
✅ download German electronic AIP (AIXM 5.1) and build SQLite DB
next on: integrate these parts so that they work robustly in my local server, providing feedback of what is going on.
This week's achievement: I built a #python3 web scraper to download a hierarchical and searchable copy of the German AIP. 💪
Now I have German airspace data in a database.
Ho. Ho. Ho.
#AIXM uses a #GML subset to define surfaces and curves. Arbitrary sets of primitives don't go well with relational databases, imo. Thus I converted the GML structures to semicolon-separated command strings (arc, circle, geodesic, line, curve).
Work in progress: declaring #AIXM objects in my #Python class structure. Most AIXM features (like aixm:AirportHeliport) of the datasets at https://aip.dfs.de/datasets are already defined.
Added a global linker set as class variable to the abstract object class, so that all links (like aixm:onRunway) can be collected and stored in one #sqlite3 helper table.
Work in progress: porting my AIXM XSLT back to Python's xml.etree.ElementTree.
Functional programming approach ftw! parseNode() calling parseNode(), doing tag-dependend things.
Downside: xml.etree's namespace handling and XPath parsing is rudimentary at its best. 😐
1) Cleaned up the interface by moving file operation buttons to a sub-page FILE.
2) Created the statistics page.