The objective of this project was to develop a software application that streamlines the obstacle collection process of Aerodrome Obstacle Chart's (AOC's). The existing method involved a monotonous software tool called Digital Calipers that required having to move both ends of a scale from the reference point and the obstacle's position. It was important to measure both the distance from end of runway (DER) and the lateral distance (LAT) from the runway extended line. Once the calipers' position was set to the obstacle location, the measurement would be manually recorded.
Given these conditions, charts with more than 100+ obstacle would require 2 hours to measure the required distance's, especially with airport's with multiple runways. To improve the efficiency of obstacle collections, I designed this application to allow the user to simply hover over an obstacle and click, automating the measurement and collection process.
The application framework used Flask for the backend, while the frontend was developed using native JavaScript, HTML, and CSS. The application was packaged as an executable file using the Python library PyInstaller. Development was carried out in Visual Studio Code, with GitHub Workflows implemented to automate the CI/CD pipeline. This ensured that the application could be reliably deployed and executed on a completely new machine with minimal setup.
The diagram illustrates the overall workflow and architecture of the developed application for analyzing AOC's and collecting obstacle data. The detailed process is outlined below with images defining each step's window actions.
To initiate the AOC data collection process, the user first uploads a PDF containing the relevant chart as shown in the image above. Some of the notable features on this window are the zoom level bar and the upload chart button.
The application then applies the user-defined DPI setting to enhance the image resolution using the Python library PyMuPDF. Once the images have been processed, they are displayed in a gallery format, allowing the user to select the image containing the AOC, as illustrated in the image below. As the user hovers over each image, the image will transform to slightly increase in size, indicating to the user their intention of selecting that image.
Once the user has selected the AOC image, the window switches to the obstacle collection UI where the user is guided through a series of steps to define the reference positions and key chart details such as the ICAO, runway number, and effective date for the chart. The application reference the OurAirports database to obtain runway number data for a user defined ICAO input.
Once the user has identified and selected all obstacles on the chart, they are required to manually enter the elevation for each obstacle. This step cannot be automated due to variations in how elevation information is published by different airport authorities. After all obstacle elevations have been entered, the collected data can be exported using the green Export Data button. Additionally, the application provides an option to download and save the processed image for future reference and record-keeping. The exported data is provided in both text and csv format.
Check out my project repository on GitHub for the project details & code.