dmpop/apcheck
1
0
Fork
You've already forked apcheck
0
Aviation photography checklist https://rawairplanes.com/apcheck/
  • PHP 75.1%
  • CSS 24.7%
  • JavaScript 0.2%
2026年06月26日 13:15:17 +02:00
favicons Fix PWA config and update site metadata 2026年06月08日 12:51:30 +02:00
.gitignore First commit 2026年06月05日 15:46:39 +02:00
airports.csv Add local airport lookup and runway data tables 2026年06月17日 12:19:48 +02:00
checklist.json First commit 2026年06月05日 15:46:39 +02:00
frequencies.csv Add ATC frequencies feature with sidebar display 2026年06月22日 14:10:25 +02:00
index.php Remove "you are here" marker and geolocation logic 2026年06月26日 13:15:17 +02:00
LICENSE First commit 2026年06月05日 15:46:39 +02:00
login.php Switch theme to warm earth tones and add light mode support 2026年06月09日 16:41:06 +02:00
manifest.php Switch theme to warm earth tones and add light mode support 2026年06月09日 16:41:06 +02:00
notes.txt First commit 2026年06月05日 15:46:39 +02:00
README.md Add distance measurement tool and frame fill calculator 2026年06月26日 13:05:12 +02:00
runways.csv Add runway advisor (RWY) section with OurAirports data integration 2026年06月13日 20:19:57 +02:00
style.css Add distance measurement tool and frame fill calculator 2026年06月26日 13:05:12 +02:00
sw.js Fix PWA config and update site metadata 2026年06月08日 12:51:30 +02:00

APCHECK

Aviation photography checklist — a simple web application designed specifically for aviation photographers that can be used for planning photo sessions at airports.

Features

  • Weather data — live METAR & TAF from aviationweather.gov
  • METAR/TAF reference — comprehensive code lookup table with filter
  • ATC frequencies — displays tower, ground, approach, ATIS, and other frequencies for the selected airport, sorted by relevance
  • Runway advisor — wind-optimised runway selection using OurAirports data; shows headwind/crosswind components, surface, lighting, and dimensions for every runway end
  • Photo suitability score — 0–10 rating based on visibility, wind, clouds, and precipitation
  • Sun position — solar elevation diagram, azimuth, golden hour, blue hour, and day progress timeline
  • Checklist — editable equipment & planning checklist with groups, items, and a print button for printable templates
  • Distance tool — click-to-measure map using OpenStreetMap, showing segment and total distance in meters/feet/kilometers/miles
  • Frame Fill Calculator — calculate how much of the frame an aircraft fills based on its size, focal length, distance, and sensor orientation
  • Session notes — auto-saving plain-text notepad
  • Optional password protection — bcrypt-based login via auth.json
  • Installable as a PWA — add to your device's home screen or taskbar from any modern browser

Requirements

  • PHP 7.4+ with allow_url_fopen enabled
  • No database, no Composer, no npm

Setup

  1. Place the files in a directory served by PHP (e.g. php -S localhost:8000 or any web server).
  2. Open index.php in a browser.
  3. Enter an ICAO airport code (e.g. EKCH, KJFK, EDDF).

Photo suitability score

The score starts at 10 (ideal conditions) and penalties are subtracted based on the current METAR:

Penalty Condition
–4 Visibility below 3 statute miles
–2 Visibility below 6 statute miles
–2 Wind speed above 30 knots
–1 Wind speed above 20 knots
–3 Overcast or broken ceiling below 1,500 ft
–1 Overcast or broken ceiling below 3,000 ft
–3 Thunderstorms, fog, heavy rain, snow, or drizzle

The final value is clamped to 0–10 and color-coded:

Score Label Color
8–10 Good conditions Green
5–7 Marginal Amber
0–4 Poor conditions Red

Password protection (optional)

To restrict access, create an auth.json file with a bcrypt hash:

{"hash": "2ドルy10ドル$..."}

Generate the hash with PHP on the command line:

php -r "echo password_hash('your-password', PASSWORD_BCRYPT), PHP_EOL;"

Then paste the output into auth.json as the hash value. Alternatively use a tool like htpasswd -nB. When auth.json exists, visitors are redirected to login.php.

Adding missing airports and runways

APCHECK looks up airport name and coordinates from airports.csv and runway data from runways.csv. If an airport or its runways are missing, you can add them manually.

airports.csv

Column Description
icao_code ICAO code (e.g. EGLL)
name Airport name
iso_country ISO 3166-1 alpha-2 country code
latitude_deg Latitude in decimal degrees (e.g. 51.470748)
longitude_deg Longitude in decimal degrees (e.g. -0.459909)

Append a new line at the end of airports.csv in the same format:

EGLL,London Heathrow Airport,GB,51.470748,-0.459909

Coordinates can be obtained from OurAirports, Wikipedia, or any aeronautical database.

runways.csv

Runways are matched by the airport_ident column — this must match the ICAO code used in airports.csv exactly.

Column Description
id Unique numeric ID (auto-increment from last existing)
airport_ref Reference ID (can be the same as id)
airport_ident ICAO code must match the code in airports.csv
length_ft Runway length in feet
width_ft Runway width in feet
surface Surface type (e.g. ASP, ASP-G, CON, GRVL, TURF)
lighted 1 = lighted, 0 = not lighted
closed 1 = closed (ignored by APCHECK), 0 = open
le_ident Low-end identifier (e.g. 09L)
le_heading_degT Low-end true heading in degrees
he_ident High-end identifier (e.g. 27R)
he_heading_degT High-end true heading in degrees
le_displaced_threshold_ft / he_displaced_threshold_ft Optional displaced threshold in feet
le_latitude_deg / he_latitude_deg Optional end coordinates (can be empty)
le_longitude_deg / he_longitude_deg Optional end coordinates (can be empty)
le_elevation_ft / he_elevation_ft Optional elevation (can be empty)

Only airport_ident, length_ft, width_ft, surface, lighted, closed, le_ident, le_heading_degT, he_ident, and he_heading_degT are used by APCHECK. Other columns can be left empty.

Example new runway entry for CYVR:

,,"CYVR",10600,200,"ASP",1,0,"08L",80,"26R",260,,,,,

Runway data can be obtained from OurAirports. Download the file, search for the airport_ident, and copy the matching rows into the local runways.csv.

frequencies.csv

Frequencies are matched by the airport_ident column — this must match the ICAO code used in airports.csv exactly. Frequencies are displayed in the sidebar sorted by type priority: TWR > GND > APP/DEP/ARR/A/D > ATIS > CLD > RMP > AFIS > INFO > FSS > RDO > UNIC > CTAF, then by frequency within each type.

Column Description
id Unique numeric ID (can be auto-incremented)
airport_ref Reference ID (can be the same as id)
airport_ident ICAO code must match the code in airports.csv
type Frequency type (TWR, GND, APP, ATIS, CTAF, etc.)
description Human-readable label (e.g. PALM BEACH APP)
frequency_mhz Frequency in MHz (e.g. 124.6)

Example new frequency entry for KJFK:

,,"KJFK","ATIS","ATIS",115.1

Frequency data can be obtained from OurAirports. Download the file, search for the airport_ident, and copy the matching rows into the local frequencies.csv.

Files

File Purpose
index.php Main application
login.php Password authentication page
style.css Stylesheet
manifest.php PWA manifest (name, icons, colors)
sw.js Service worker (install trigger)
favicons/ App icons for PWA & bookmarks
checklist.json Checklist data (auto-managed)
notes.txt Session notes (auto-managed)
airports.csv Airport database (name, coords)
runways.csv Runway database
frequencies.csv Radio frequency database
auth.json Optional password hash

Acknowledgements

License

GPL v3