From 8defc90e95bef013922a9d6b6fa59c996bf22c61 Mon Sep 17 00:00:00 2001 From: Maurice Date: Fri, 17 Apr 2026 14:04:40 +0200 Subject: [PATCH 1/7] feat(bookings): show transport routes on map (#384, #587) Adds from/to endpoints to flight/train/cruise/car reservations with live map rendering. Flights use geodesic arcs and a curved duration + distance badge; train/car/cruise render as straight or geodesic lines with endpoint markers. Airports come from an embedded OurAirports database (~3200 airports, offline-capable); train/cruise/car locations via Nominatim. Per-trip connection toggle sits in the day plan sidebar, persisted in localStorage. Clicking a map endpoint opens the existing transport detail popup. New display setting toggles endpoint labels on the map. Migration 105 adds the reservation_endpoints table plus needs_review flag; existing flights are backfilled from their IATA metadata on server startup. --- .gitignore | 3 +- client/src/api/client.ts | 5 + client/src/components/Map/MapView.tsx | 20 +- .../src/components/Map/ReservationOverlay.tsx | 446 ++++++++++++++++++ .../src/components/Planner/AirportSelect.tsx | 155 ++++++ .../src/components/Planner/DayPlanSidebar.tsx | 40 +- .../src/components/Planner/LocationSelect.tsx | 140 ++++++ .../components/Planner/ReservationModal.tsx | 149 +++++- .../components/Planner/ReservationsPanel.tsx | 37 +- .../Settings/DisplaySettingsTab.tsx | 31 ++ client/src/i18n/translations/de.ts | 9 + client/src/i18n/translations/en.ts | 9 + client/src/pages/TripPlannerPage.tsx | 28 ++ client/src/types.ts | 16 + server/data/airports.json | 1 + server/package-lock.json | 47 +- server/package.json | 1 + server/scripts/build-airports.mjs | 108 +++++ server/src/app.ts | 2 + server/src/db/database.ts | 7 + server/src/db/migrations.ts | 21 + server/src/routes/airports.ts | 19 + server/src/routes/reservations.ts | 10 +- server/src/services/airportService.ts | 109 +++++ server/src/services/reservationService.ts | 89 +++- server/src/types.ts | 16 + 26 files changed, 1437 insertions(+), 81 deletions(-) create mode 100644 client/src/components/Map/ReservationOverlay.tsx create mode 100644 client/src/components/Planner/AirportSelect.tsx create mode 100644 client/src/components/Planner/LocationSelect.tsx create mode 100644 server/data/airports.json create mode 100644 server/scripts/build-airports.mjs create mode 100644 server/src/routes/airports.ts create mode 100644 server/src/services/airportService.ts diff --git a/.gitignore b/.gitignore index f58a53e2..bfaa629a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,8 @@ client/public/icons/*.png *.sqlite-wal # User data -server/data/ +server/data/* +!server/data/airports.json server/uploads/ # Environment diff --git a/client/src/api/client.ts b/client/src/api/client.ts index 526a0d69..4d61426d 100644 --- a/client/src/api/client.ts +++ b/client/src/api/client.ts @@ -365,6 +365,11 @@ export const mapsApi = { resolveUrl: (url: string) => apiClient.post('/maps/resolve-url', { url }).then(r => r.data), } +export const airportsApi = { + search: (q: string, signal?: AbortSignal) => apiClient.get('/airports/search', { params: { q }, signal }).then(r => r.data), + byIata: (iata: string) => apiClient.get(`/airports/${encodeURIComponent(iata)}`).then(r => r.data), +} + export const budgetApi = { list: (tripId: number | string) => apiClient.get(`/trips/${tripId}/budget`).then(r => r.data), create: (tripId: number | string, data: Record) => apiClient.post(`/trips/${tripId}/budget`, data).then(r => r.data), diff --git a/client/src/components/Map/MapView.tsx b/client/src/components/Map/MapView.tsx index 32d1ec44..a1a2d5be 100644 --- a/client/src/components/Map/MapView.tsx +++ b/client/src/components/Map/MapView.tsx @@ -8,6 +8,8 @@ import 'leaflet.markercluster/dist/MarkerCluster.css' import 'leaflet.markercluster/dist/MarkerCluster.Default.css' import { mapsApi } from '../../api/client' import { getCategoryIcon, CATEGORY_ICON_MAP } from '../shared/categoryIcons' +import ReservationOverlay from './ReservationOverlay' +import type { Reservation } from '../../types' function categoryIconSvg(iconName: string | null | undefined, size: number): string { const IconComponent = (iconName && CATEGORY_ICON_MAP[iconName]) || CATEGORY_ICON_MAP['MapPin'] @@ -384,7 +386,16 @@ export const MapView = memo(function MapView({ rightWidth = 0, hasInspector = false, hasDayDetail = false, -}) { + reservations = [] as Reservation[], + showReservationStats = false, + visibleConnectionIds = [] as number[], + onReservationClick, +}: any) { + const visibleReservations = useMemo(() => { + if (!visibleConnectionIds || visibleConnectionIds.length === 0) return [] + const set = new Set(visibleConnectionIds) + return reservations.filter((r: Reservation) => set.has(r.id)) + }, [reservations, visibleConnectionIds]) // Dynamic padding: account for sidebars + bottom inspector + day detail panel const paddingOpts = useMemo(() => { const isMobile = typeof window !== 'undefined' && window.innerWidth < 768 @@ -569,6 +580,13 @@ export const MapView = memo(function MapView({ ) } catch { return null } })} + + ) }) diff --git a/client/src/components/Map/ReservationOverlay.tsx b/client/src/components/Map/ReservationOverlay.tsx new file mode 100644 index 00000000..74b41714 --- /dev/null +++ b/client/src/components/Map/ReservationOverlay.tsx @@ -0,0 +1,446 @@ +import { createElement, useEffect, useMemo, useRef, useState } from 'react' +import { renderToStaticMarkup } from 'react-dom/server' +import { Marker, Polyline, Tooltip, useMap, useMapEvents } from 'react-leaflet' +import L from 'leaflet' +import { Plane, Train, Ship, Car } from 'lucide-react' +import { useSettingsStore } from '../../store/settingsStore' +import type { Reservation, ReservationEndpoint } from '../../types' + +const ENDPOINT_PANE = 'reservation-endpoints' +const AIRPORT_BADGE_HALF_PX = 16 +const BADGE_GAP_PX = 5 + +type TransportType = 'flight' | 'train' | 'cruise' | 'car' +const TRANSPORT_TYPES: TransportType[] = ['flight', 'train', 'cruise', 'car'] + +const TRANSPORT_COLOR = '#3b82f6' + +const TYPE_META: Record = { + flight: { color: TRANSPORT_COLOR, icon: Plane, geodesic: true }, + train: { color: TRANSPORT_COLOR, icon: Train, geodesic: false }, + cruise: { color: TRANSPORT_COLOR, icon: Ship, geodesic: true }, + car: { color: TRANSPORT_COLOR, icon: Car, geodesic: false }, +} + +function useEndpointPane() { + const map = useMap() + useMemo(() => { + if (!map.getPane(ENDPOINT_PANE)) { + const pane = map.createPane(ENDPOINT_PANE) + pane.style.zIndex = '650' + pane.style.pointerEvents = 'auto' + } + }, [map]) +} + +function endpointIcon(type: TransportType, label: string | null): L.DivIcon { + const { icon: IconCmp, color } = TYPE_META[type] + const svg = renderToStaticMarkup(createElement(IconCmp, { size: 13, color: 'white', strokeWidth: 2.5 })) + const labelHtml = label ? `${label}` : '' + const estWidth = label ? Math.max(40, label.length * 6 + 28) : 26 + return L.divIcon({ + className: 'trek-endpoint-marker', + html: `
${svg}${labelHtml ? `${label}` : ''}
`, + iconSize: [estWidth, 22], + iconAnchor: [estWidth / 2, 11], + popupAnchor: [0, -11], + }) +} + +function toRad(d: number) { return d * Math.PI / 180 } +function toDeg(r: number) { return r * 180 / Math.PI } + +function greatCircle(a: [number, number], b: [number, number], steps = 256): [number, number][] { + const [lat1, lng1] = [toRad(a[0]), toRad(a[1])] + const [lat2, lng2] = [toRad(b[0]), toRad(b[1])] + const d = 2 * Math.asin(Math.sqrt(Math.sin((lat2 - lat1) / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin((lng2 - lng1) / 2) ** 2)) + if (d === 0) return [a, b] + const pts: [number, number][] = [] + for (let i = 0; i <= steps; i++) { + const f = i / steps + const A = Math.sin((1 - f) * d) / Math.sin(d) + const B = Math.sin(f * d) / Math.sin(d) + const x = A * Math.cos(lat1) * Math.cos(lng1) + B * Math.cos(lat2) * Math.cos(lng2) + const y = A * Math.cos(lat1) * Math.sin(lng1) + B * Math.cos(lat2) * Math.sin(lng2) + const z = A * Math.sin(lat1) + B * Math.sin(lat2) + const lat = Math.atan2(z, Math.sqrt(x * x + y * y)) + const lng = Math.atan2(y, x) + pts.push([toDeg(lat), toDeg(lng)]) + } + return pts +} + +function splitAntimeridian(points: [number, number][]): [number, number][][] { + const segments: [number, number][][] = [] + let cur: [number, number][] = [] + for (let i = 0; i < points.length; i++) { + if (i > 0 && Math.abs(points[i][1] - points[i - 1][1]) > 180) { + if (cur.length > 1) segments.push(cur) + cur = [] + } + cur.push(points[i]) + } + if (cur.length > 1) segments.push(cur) + return segments +} + +function cleanName(name: string): string { + return name.replace(/\s*\([^)]*\)/g, '').trim() +} + +function haversineKm(a: [number, number], b: [number, number]): number { + const R = 6371 + const dLat = toRad(b[0] - a[0]) + const dLng = toRad(b[1] - a[1]) + const h = Math.sin(dLat / 2) ** 2 + Math.cos(toRad(a[0])) * Math.cos(toRad(b[0])) * Math.sin(dLng / 2) ** 2 + return 2 * R * Math.asin(Math.sqrt(h)) +} + +function parseInTz(isoLocal: string, tz: string): number { + const [datePart, timePart] = isoLocal.split('T') + const [y, mo, d] = datePart.split('-').map(Number) + const [h, mi] = (timePart || '00:00').split(':').map(Number) + const guess = Date.UTC(y, mo - 1, d, h, mi) + const fmt = new Intl.DateTimeFormat('en-US', { + timeZone: tz, hour12: false, + year: 'numeric', month: '2-digit', day: '2-digit', + hour: '2-digit', minute: '2-digit', second: '2-digit', + }) + const parts = Object.fromEntries(fmt.formatToParts(new Date(guess)).filter(p => p.type !== 'literal').map(p => [p.type, p.value])) + const asUtc = Date.UTC(Number(parts.year), Number(parts.month) - 1, Number(parts.day), Number(parts.hour) % 24, Number(parts.minute), Number(parts.second)) + return guess - (asUtc - guess) +} + +function computeDuration(from: ReservationEndpoint, to: ReservationEndpoint, fallbackStart: string | null, fallbackEnd: string | null): string | null { + let start = from.local_date && from.local_time ? `${from.local_date}T${from.local_time}` : fallbackStart + let end = to.local_date && to.local_time ? `${to.local_date}T${to.local_time}` : fallbackEnd + if (!start || !end) return null + + if (!start.includes('T') && end.includes('T')) start = `${end.split('T')[0]}T${start}` + if (!end.includes('T') && start.includes('T')) end = `${start.split('T')[0]}T${end}` + if (!start.includes('T') || !end.includes('T')) return null + + const fromTz = from.timezone || to.timezone + const toTz = to.timezone || fromTz + + let startMs: number, endMs: number + if (fromTz && toTz) { + startMs = parseInTz(start, fromTz) + endMs = parseInTz(end, toTz) + } else { + startMs = new Date(start).getTime() + endMs = new Date(end).getTime() + } + if (!Number.isFinite(startMs) || !Number.isFinite(endMs)) return null + if (endMs <= startMs) endMs += 24 * 60 * 60000 + const minutes = Math.round((endMs - startMs) / 60000) + if (minutes <= 0 || minutes > 48 * 60) return null + const h = Math.floor(minutes / 60) + const m = minutes % 60 + return h > 0 ? `${h}h ${m}m` : `${m}m` +} + +interface TransportItem { + res: Reservation + from: ReservationEndpoint + to: ReservationEndpoint + type: TransportType + arcs: [number, number][][] + primaryArc: [number, number][] + fallback: [number, number] + mainLabel: string | null + subLabel: string | null +} + +function buildStatsHtml(color: string, mainLabel: string | null, subLabel: string | null): { html: string; width: number; height: number } { + const estWidth = Math.max( + mainLabel ? mainLabel.length * 6.5 : 0, + subLabel ? subLabel.length * 5.5 : 0, + ) + 22 + const hasBoth = !!mainLabel && !!subLabel + const height = hasBoth ? 36 : 22 + const main = mainLabel ? `${mainLabel}` : '' + const sub = subLabel ? `${subLabel}` : '' + const html = `
${main}${sub}
` + return { html, width: estWidth, height } +} + +function StatsLabel({ item }: { item: TransportItem }) { + const map = useMap() + const markerRef = useRef(null) + const innerRef = useRef(null) + + const arc = item.primaryArc + const color = TYPE_META[item.type].color + + const { html, width, height } = useMemo(() => buildStatsHtml(color, item.mainLabel, item.subLabel), [color, item.mainLabel, item.subLabel]) + const buffer = AIRPORT_BADGE_HALF_PX + width / 2 + BADGE_GAP_PX + + const compute = () => { + if (arc.length < 2) return null + const size = map.getSize() + const pts = arc.map(p => map.latLngToContainerPoint(p as L.LatLngTuple)) + const cum: number[] = [0] + let total = 0 + for (let i = 1; i < pts.length; i++) { + total += pts[i].distanceTo(pts[i - 1]) + cum.push(total) + } + if (total <= 0) return null + + const fromPx = map.latLngToContainerPoint([item.from.lat, item.from.lng]) + const toPx = map.latLngToContainerPoint([item.to.lat, item.to.lng]) + + const isIn = (p: L.Point) => { + if (p.x < -40 || p.x > size.x + 40 || p.y < -40 || p.y > size.y + 40) return false + if (p.distanceTo(fromPx) < buffer) return false + if (p.distanceTo(toPx) < buffer) return false + return true + } + + let firstIdx = -1 + let lastIdx = -1 + for (let i = 0; i < pts.length; i++) { + if (isIn(pts[i])) { + if (firstIdx < 0) firstIdx = i + lastIdx = i + } + } + if (firstIdx < 0) { + const target = total / 2 + let sIdx = 0 + while (sIdx < cum.length - 2 && cum[sIdx + 1] < target) sIdx++ + const span = cum[sIdx + 1] - cum[sIdx] + const tm = span > 0 ? (target - cum[sIdx]) / span : 0 + const pA = pts[sIdx] + const pB = pts[sIdx + 1] + const mx = pA.x + (pB.x - pA.x) * tm + const my = pA.y + (pB.y - pA.y) * tm + const latlng = map.containerPointToLatLng([mx, my]) + let angle = Math.atan2(pB.y - pA.y, pB.x - pA.x) * 180 / Math.PI + if (angle > 90) angle -= 180 + if (angle < -90) angle += 180 + return { point: [latlng.lat, latlng.lng] as [number, number], angle } + } + + const bisectFraction = (a: L.Point, b: L.Point) => { + let lo = 0, hi = 1 + for (let k = 0; k < 10; k++) { + const mid = (lo + hi) / 2 + const mp = L.point(a.x + (b.x - a.x) * mid, a.y + (b.y - a.y) * mid) + if (isIn(mp)) hi = mid + else lo = mid + } + return (lo + hi) / 2 + } + + let lowCum = cum[firstIdx] + if (firstIdx > 0) { + const t = bisectFraction(pts[firstIdx - 1], pts[firstIdx]) + lowCum = cum[firstIdx - 1] + (cum[firstIdx] - cum[firstIdx - 1]) * t + } + let highCum = cum[lastIdx] + if (lastIdx < pts.length - 1) { + const t = bisectFraction(pts[lastIdx + 1], pts[lastIdx]) + highCum = cum[lastIdx] + (cum[lastIdx + 1] - cum[lastIdx]) * (1 - t) + } + + const targetLen = (lowCum + highCum) / 2 + + let segIdx = 0 + while (segIdx < cum.length - 2 && cum[segIdx + 1] < targetLen) segIdx++ + const segSpan = cum[segIdx + 1] - cum[segIdx] + const t = segSpan > 0 ? (targetLen - cum[segIdx]) / segSpan : 0 + const pA = pts[segIdx] + const pB = pts[segIdx + 1] + const px = pA.x + (pB.x - pA.x) * t + const py = pA.y + (pB.y - pA.y) * t + const latlng = map.containerPointToLatLng([px, py]) + + let angle = Math.atan2(pB.y - pA.y, pB.x - pA.x) * 180 / Math.PI + if (angle > 90) angle -= 180 + if (angle < -90) angle += 180 + + return { point: [latlng.lat, latlng.lng] as [number, number], angle } + } + + const apply = () => { + const pose = compute() + const marker = markerRef.current + if (!marker) return + const el = marker.getElement() as HTMLElement | null + if (!pose) { + if (el) el.style.display = 'none' + return + } + if (el) el.style.display = '' + marker.setLatLng(pose.point as L.LatLngTuple) + if (!innerRef.current && el) innerRef.current = el.querySelector('.trek-stats-inner') as HTMLElement | null + if (innerRef.current) innerRef.current.style.transform = `rotate(${pose.angle}deg)` + } + + useEffect(() => { + const icon = L.divIcon({ + className: 'trek-endpoint-stats', + html, + iconSize: [width, height], + iconAnchor: [width / 2, height / 2], + }) + const marker = L.marker([0, 0], { icon, pane: ENDPOINT_PANE, interactive: false, keyboard: false }) + marker.addTo(map) + markerRef.current = marker + innerRef.current = null + apply() + return () => { + marker.remove() + markerRef.current = null + innerRef.current = null + } + }, [map, html, width, height]) + + useMapEvents({ + move: apply, + zoom: apply, + viewreset: apply, + resize: apply, + }) + + return null +} + +interface Props { + reservations: Reservation[] + showConnections: boolean + showStats: boolean + onEndpointClick?: (reservationId: number) => void +} + +export default function ReservationOverlay({ reservations, showConnections, showStats, onEndpointClick }: Props) { + useEndpointPane() + const map = useMap() + const [zoom, setZoom] = useState(() => map.getZoom()) + useMapEvents({ + zoomend: () => setZoom(map.getZoom()), + }) + const showEndpointLabels = useSettingsStore(s => s.settings.map_booking_labels) !== false + + const items = useMemo(() => { + const out: TransportItem[] = [] + for (const r of reservations) { + if (!TRANSPORT_TYPES.includes(r.type as TransportType)) continue + const eps = r.endpoints || [] + const from = eps.find(e => e.role === 'from') + const to = eps.find(e => e.role === 'to') + if (!from || !to) continue + const type = r.type as TransportType + const isGeo = TYPE_META[type].geodesic + const arcs = isGeo + ? splitAntimeridian(greatCircle([from.lat, from.lng], [to.lat, to.lng])) + : [[[from.lat, from.lng], [to.lat, to.lng]] as [number, number][]] + const primaryIdx = arcs.reduce((best, seg, idx, all) => seg.length > all[best].length ? idx : best, 0) + const primaryArc = arcs[primaryIdx] ?? [] + const fallback: [number, number] = primaryArc.length > 0 + ? (primaryArc[Math.floor(primaryArc.length / 2)] ?? [(from.lat + to.lat) / 2, (from.lng + to.lng) / 2]) + : [(from.lat + to.lat) / 2, (from.lng + to.lng) / 2] + + const duration = computeDuration(from, to, r.reservation_time || null, r.reservation_end_time || null) + const distance = `${Math.round(haversineKm([from.lat, from.lng], [to.lat, to.lng]))} km` + const mainLabel = from.code && to.code ? `${from.code} → ${to.code}` : null + const subParts = [duration, distance].filter(Boolean) as string[] + const subLabel = subParts.length > 0 ? subParts.join(' · ') : null + + out.push({ res: r, from, to, type, arcs, primaryArc, fallback, mainLabel, subLabel }) + } + return out + }, [reservations]) + + const visibleItems = useMemo(() => { + return items.filter(item => { + const fromPx = map.latLngToContainerPoint([item.from.lat, item.from.lng]) + const toPx = map.latLngToContainerPoint([item.to.lat, item.to.lng]) + const minPx = item.type === 'flight' ? 50 : item.type === 'cruise' ? 150 : item.type === 'car' ? 80 : 200 + return fromPx.distanceTo(toPx) >= minPx + }) + }, [items, zoom, map]) + + const labelVisibleIds = useMemo(() => { + const set = new Set() + for (const item of visibleItems) { + const fromPx = map.latLngToContainerPoint([item.from.lat, item.from.lng]) + const toPx = map.latLngToContainerPoint([item.to.lat, item.to.lng]) + const minPx = item.type === 'flight' ? 50 : item.type === 'cruise' ? 300 : item.type === 'car' ? 150 : 400 + if (fromPx.distanceTo(toPx) >= minPx) set.add(item.res.id) + } + return set + }, [visibleItems, zoom, map]) + + if (!showConnections) return null + + return ( + <> + {visibleItems.map(item => item.arcs.map((seg, segIdx) => ( + + )))} + + {visibleItems.flatMap(item => [ + onEndpointClick?.(item.res.id) }} + > + +
{item.from.name}
+ {item.res.title &&
{item.res.title}
} +
+
, + onEndpointClick?.(item.res.id) }} + > + +
{item.to.name}
+ {item.res.title &&
{item.res.title}
} +
+
, + ])} + + {showStats && visibleItems.map(item => item.type === 'flight' && (item.mainLabel || item.subLabel) && labelVisibleIds.has(item.res.id) && ( + + ))} + + ) +} diff --git a/client/src/components/Planner/AirportSelect.tsx b/client/src/components/Planner/AirportSelect.tsx new file mode 100644 index 00000000..83e9e32d --- /dev/null +++ b/client/src/components/Planner/AirportSelect.tsx @@ -0,0 +1,155 @@ +import { useEffect, useMemo, useRef, useState } from 'react' +import { Plane, X } from 'lucide-react' +import { airportsApi } from '../../api/client' +import { useTranslation } from '../../i18n' + +export interface Airport { + iata: string + icao: string | null + name: string + city: string + country: string + lat: number + lng: number + tz: string +} + +interface Props { + value: Airport | null + onChange: (airport: Airport | null) => void + placeholder?: string + style?: React.CSSProperties +} + +function formatLabel(a: Airport) { + return `${a.city || a.name} (${a.iata})` +} + +export default function AirportSelect({ value, onChange, placeholder, style }: Props) { + const { t, locale } = useTranslation() + const countryName = useMemo(() => { + try { return new Intl.DisplayNames([locale || 'en'], { type: 'region' }) } catch { return null } + }, [locale]) + const displayCountry = (code: string) => { + if (!code) return '' + try { return countryName?.of(code) || code } catch { return code } + } + const [query, setQuery] = useState(value ? formatLabel(value) : '') + const [open, setOpen] = useState(false) + const [results, setResults] = useState([]) + const [highlight, setHighlight] = useState(-1) + const [loading, setLoading] = useState(false) + const wrapRef = useRef(null) + const abortRef = useRef(null) + const debounceRef = useRef | null>(null) + + useEffect(() => { + setQuery(value ? formatLabel(value) : '') + }, [value]) + + useEffect(() => { + const handler = (e: MouseEvent) => { + if (!wrapRef.current?.contains(e.target as Node)) setOpen(false) + } + if (open) document.addEventListener('mousedown', handler) + return () => document.removeEventListener('mousedown', handler) + }, [open]) + + useEffect(() => { + if (debounceRef.current) clearTimeout(debounceRef.current) + const trimmed = query.trim() + if (trimmed.length < 2 || (value && trimmed === formatLabel(value))) { + setResults([]) + return + } + debounceRef.current = setTimeout(async () => { + abortRef.current?.abort() + const controller = new AbortController() + abortRef.current = controller + setLoading(true) + try { + const data = await airportsApi.search(trimmed, controller.signal) + setResults(Array.isArray(data) ? data : []) + setHighlight(-1) + } catch (err: any) { + if (err?.name !== 'AbortError' && err?.name !== 'CanceledError') { + setResults([]) + } + } finally { + setLoading(false) + } + }, 220) + return () => { if (debounceRef.current) clearTimeout(debounceRef.current) } + }, [query, value]) + + const pick = (a: Airport) => { + onChange(a) + setQuery(formatLabel(a)) + setOpen(false) + setResults([]) + } + + const clear = () => { + onChange(null) + setQuery('') + setResults([]) + } + + const onKey = (e: React.KeyboardEvent) => { + if (!open || results.length === 0) return + if (e.key === 'ArrowDown') { e.preventDefault(); setHighlight(h => Math.min(h + 1, results.length - 1)) } + else if (e.key === 'ArrowUp') { e.preventDefault(); setHighlight(h => Math.max(h - 1, 0)) } + else if (e.key === 'Enter' && highlight >= 0) { e.preventDefault(); pick(results[highlight]) } + else if (e.key === 'Escape') setOpen(false) + } + + return ( +
+
+ + { setQuery(e.target.value); setOpen(true); if (value) onChange(null) }} + onFocus={() => setOpen(true)} + onKeyDown={onKey} + style={{ flex: 1, minWidth: 0, background: 'transparent', border: 'none', outline: 'none', color: 'var(--text-primary)', fontSize: 13 }} + /> + {value && ( + + )} +
+ + {open && (loading || results.length > 0) && ( +
+ {loading && results.length === 0 && ( +
{t('common.loading')}
+ )} + {results.map((a, i) => ( + + ))} +
+ )} +
+ ) +} diff --git a/client/src/components/Planner/DayPlanSidebar.tsx b/client/src/components/Planner/DayPlanSidebar.tsx index f22c92fb..b9c23e8e 100644 --- a/client/src/components/Planner/DayPlanSidebar.tsx +++ b/client/src/components/Planner/DayPlanSidebar.tsx @@ -4,7 +4,7 @@ declare global { interface Window { __dragData: DragDataPayload | null } } import React, { useState, useEffect, useRef, useMemo } from 'react' import ReactDOM from 'react-dom' -import { ChevronDown, ChevronRight, ChevronUp, Navigation, RotateCcw, ExternalLink, Clock, Pencil, GripVertical, Ticket, Plus, FileText, Check, Trash2, Info, MapPin, Star, Heart, Camera, Lightbulb, Flag, Bookmark, Train, Bus, Plane, Car, Ship, Coffee, ShoppingBag, AlertTriangle, FileDown, Lock, Hotel, Utensils, Users, Undo2, X } from 'lucide-react' +import { ChevronDown, ChevronRight, ChevronUp, Navigation, RotateCcw, ExternalLink, Clock, Pencil, GripVertical, Ticket, Plus, FileText, Check, Trash2, Info, MapPin, Star, Heart, Camera, Lightbulb, Flag, Bookmark, Train, Bus, Plane, Car, Ship, Coffee, ShoppingBag, AlertTriangle, FileDown, Lock, Hotel, Utensils, Users, Undo2, X, Route as RouteIcon } from 'lucide-react' const RES_ICONS = { flight: Plane, hotel: Hotel, restaurant: Utensils, train: Train, car: Car, cruise: Ship, event: Ticket, tour: Users, other: FileText } import { assignmentsApi, reservationsApi } from '../../api/client' @@ -170,6 +170,10 @@ interface DayPlanSidebarProps { onEditPlace: (place: Place) => void onDeletePlace: (placeId: number) => void reservations?: Reservation[] + visibleConnectionIds?: number[] + onToggleConnection?: (reservationId: number) => void + externalTransportDetail?: Reservation | null + onExternalTransportDetailHandled?: () => void onAddReservation: () => void onNavigateToFiles?: () => void onAddPlace?: () => void @@ -189,6 +193,10 @@ const DayPlanSidebar = React.memo(function DayPlanSidebar({ onReorder, onUpdateDayTitle, onRouteCalculated, onAssignToDay, onRemoveAssignment, onEditPlace, onDeletePlace, reservations = [], + visibleConnectionIds = [], + onToggleConnection, + externalTransportDetail, + onExternalTransportDetailHandled, onAddReservation, onAddPlace, onAddPlaceToDay, @@ -234,6 +242,13 @@ const DayPlanSidebar = React.memo(function DayPlanSidebar({ const [hoveredId, setHoveredId] = useState(null) const [transportDetail, setTransportDetail] = useState(null) const [transportPosVersion, setTransportPosVersion] = useState(0) + + useEffect(() => { + if (externalTransportDetail) { + setTransportDetail(externalTransportDetail) + onExternalTransportDetailHandled?.() + } + }, [externalTransportDetail, onExternalTransportDetailHandled]) const [timeConfirm, setTimeConfirm] = useState<{ dayId: number; fromId: number; time: string; // For drag & drop reorder @@ -1570,6 +1585,29 @@ const DayPlanSidebar = React.memo(function DayPlanSidebar({ )} + {onToggleConnection && (res.endpoints || []).length >= 2 && (() => { + const active = visibleConnectionIds.includes(res.id) + return ( + + ) + })()} {showDropLineAfter &&
} diff --git a/client/src/components/Planner/LocationSelect.tsx b/client/src/components/Planner/LocationSelect.tsx new file mode 100644 index 00000000..f072fd32 --- /dev/null +++ b/client/src/components/Planner/LocationSelect.tsx @@ -0,0 +1,140 @@ +import { useEffect, useRef, useState } from 'react' +import { MapPin, X } from 'lucide-react' +import { mapsApi } from '../../api/client' +import { useTranslation } from '../../i18n' + +export interface LocationPoint { + name: string + lat: number + lng: number + address?: string | null +} + +interface Props { + value: LocationPoint | null + onChange: (loc: LocationPoint | null) => void + placeholder?: string + style?: React.CSSProperties +} + +export default function LocationSelect({ value, onChange, placeholder, style }: Props) { + const { t, locale } = useTranslation() + const [query, setQuery] = useState(value?.name || '') + const [open, setOpen] = useState(false) + const [results, setResults] = useState([]) + const [highlight, setHighlight] = useState(-1) + const [loading, setLoading] = useState(false) + const wrapRef = useRef(null) + const debounceRef = useRef | null>(null) + + useEffect(() => { + setQuery(value?.name || '') + }, [value]) + + useEffect(() => { + const handler = (e: MouseEvent) => { + if (!wrapRef.current?.contains(e.target as Node)) setOpen(false) + } + if (open) document.addEventListener('mousedown', handler) + return () => document.removeEventListener('mousedown', handler) + }, [open]) + + useEffect(() => { + if (debounceRef.current) clearTimeout(debounceRef.current) + const trimmed = query.trim() + if (trimmed.length < 3 || (value && trimmed === value.name)) { + setResults([]) + return + } + debounceRef.current = setTimeout(async () => { + setLoading(true) + try { + const data = await mapsApi.search(trimmed, locale) + setResults(data.places || []) + setHighlight(-1) + } catch { + setResults([]) + } finally { + setLoading(false) + } + }, 320) + return () => { if (debounceRef.current) clearTimeout(debounceRef.current) } + }, [query, value, locale]) + + const pick = (r: any) => { + const lat = Number(r.lat) + const lng = Number(r.lng) + if (!Number.isFinite(lat) || !Number.isFinite(lng)) return + const loc: LocationPoint = { name: r.name || r.address || 'Location', lat, lng, address: r.address || null } + onChange(loc) + setQuery(loc.name) + setOpen(false) + setResults([]) + } + + const clear = () => { + onChange(null) + setQuery('') + setResults([]) + } + + const onKey = (e: React.KeyboardEvent) => { + if (!open || results.length === 0) return + if (e.key === 'ArrowDown') { e.preventDefault(); setHighlight(h => Math.min(h + 1, results.length - 1)) } + else if (e.key === 'ArrowUp') { e.preventDefault(); setHighlight(h => Math.max(h - 1, 0)) } + else if (e.key === 'Enter' && highlight >= 0) { e.preventDefault(); pick(results[highlight]) } + else if (e.key === 'Escape') setOpen(false) + } + + return ( +
+
+ + { setQuery(e.target.value); setOpen(true); if (value) onChange(null) }} + onFocus={() => setOpen(true)} + onKeyDown={onKey} + style={{ flex: 1, minWidth: 0, background: 'transparent', border: 'none', outline: 'none', color: 'var(--text-primary)', fontSize: 13 }} + /> + {value && ( + + )} +
+ + {open && (loading || results.length > 0) && ( +
+ {loading && results.length === 0 && ( +
{t('common.loading')}
+ )} + {results.map((r, i) => ( + + ))} +
+ )} +
+ ) +} diff --git a/client/src/components/Planner/ReservationModal.tsx b/client/src/components/Planner/ReservationModal.tsx index fb2bb01b..9e46fda1 100644 --- a/client/src/components/Planner/ReservationModal.tsx +++ b/client/src/components/Planner/ReservationModal.tsx @@ -11,7 +11,58 @@ import { useTranslation } from '../../i18n' import { CustomDatePicker } from '../shared/CustomDateTimePicker' import CustomTimePicker from '../shared/CustomTimePicker' import { openFile } from '../../utils/fileDownload' -import type { Day, Place, Reservation, TripFile, AssignmentsMap, Accommodation } from '../../types' +import AirportSelect, { type Airport } from './AirportSelect' +import LocationSelect, { type LocationPoint } from './LocationSelect' +import type { Day, Place, Reservation, TripFile, AssignmentsMap, Accommodation, ReservationEndpoint } from '../../types' + +const TRANSPORT_TYPES = ['flight', 'train', 'cruise', 'car'] as const +type TransportType = typeof TRANSPORT_TYPES[number] +const isTransport = (t: string): t is TransportType => (TRANSPORT_TYPES as readonly string[]).includes(t) + +interface EndpointPick { + airport?: Airport + location?: LocationPoint +} + +function endpointFromAirport(a: Airport, role: 'from' | 'to', sequence: number, date: string | null, time: string | null): Omit { + return { + role, sequence, + name: a.city ? `${a.city} (${a.iata})` : a.name, + code: a.iata, + lat: a.lat, lng: a.lng, + timezone: a.tz, + local_date: date, + local_time: time, + } +} + +function endpointFromLocation(l: LocationPoint, role: 'from' | 'to', sequence: number, date: string | null, time: string | null): Omit { + return { + role, sequence, + name: l.name, + code: null, + lat: l.lat, lng: l.lng, + timezone: null, + local_date: date, + local_time: time, + } +} + +function airportFromEndpoint(e: ReservationEndpoint | undefined): Airport | null { + if (!e || !e.code) return null + return { + iata: e.code, icao: null, + name: e.name, city: e.name.replace(/\s*\([A-Z]{3}\)\s*$/, ''), + country: '', + lat: e.lat, lng: e.lng, + tz: e.timezone || '', + } +} + +function locationFromEndpoint(e: ReservationEndpoint | undefined): LocationPoint | null { + if (!e) return null + return { name: e.name, lat: e.lat, lng: e.lng, address: null } +} const TYPE_OPTIONS = [ { value: 'flight', labelKey: 'reservations.type.flight', Icon: Plane }, @@ -98,6 +149,8 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p const [showFilePicker, setShowFilePicker] = useState(false) const [linkedFileIds, setLinkedFileIds] = useState([]) const [unlinkedFileIds, setUnlinkedFileIds] = useState([]) + const [fromPick, setFromPick] = useState({}) + const [toPick, setToPick] = useState({}) const assignmentOptions = useMemo( () => buildAssignmentOptions(days, assignments, t, locale), @@ -148,6 +201,20 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p price: meta.price || '', budget_category: (meta.budget_category && budgetItems.some(i => i.category === meta.budget_category)) ? meta.budget_category : '', }) + + const eps = reservation.endpoints || [] + const from = eps.find(e => e.role === 'from') + const to = eps.find(e => e.role === 'to') + if (reservation.type === 'flight') { + setFromPick({ airport: airportFromEndpoint(from) || undefined }) + setToPick({ airport: airportFromEndpoint(to) || undefined }) + } else if (isTransport(reservation.type)) { + setFromPick({ location: locationFromEndpoint(from) || undefined }) + setToPick({ location: locationFromEndpoint(to) || undefined }) + } else { + setFromPick({}) + setToPick({}) + } } else { setForm({ title: '', type: 'other', status: 'pending', @@ -160,6 +227,8 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p meta_check_in_time: '', meta_check_in_end_time: '', meta_check_out_time: '', }) setPendingFiles([]) + setFromPick({}) + setToPick({}) } }, [reservation, isOpen, selectedDayId]) @@ -202,10 +271,14 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p if (form.type === 'flight') { if (form.meta_airline) metadata.airline = form.meta_airline if (form.meta_flight_number) metadata.flight_number = form.meta_flight_number - if (form.meta_departure_airport) metadata.departure_airport = form.meta_departure_airport - if (form.meta_arrival_airport) metadata.arrival_airport = form.meta_arrival_airport - if (form.meta_departure_timezone) metadata.departure_timezone = form.meta_departure_timezone - if (form.meta_arrival_timezone) metadata.arrival_timezone = form.meta_arrival_timezone + if (fromPick.airport) { + metadata.departure_airport = fromPick.airport.iata + metadata.departure_timezone = fromPick.airport.tz + } + if (toPick.airport) { + metadata.arrival_airport = toPick.airport.iata + metadata.arrival_timezone = toPick.airport.tz + } } else if (form.type === 'hotel') { if (form.meta_check_in_time) metadata.check_in_time = form.meta_check_in_time if (form.meta_check_in_end_time) metadata.check_in_end_time = form.meta_check_in_end_time @@ -224,6 +297,21 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p if (form.price) metadata.price = form.price if (form.budget_category) metadata.budget_category = form.budget_category } + const endpoints: ReturnType[] = [] + if (isTransport(form.type)) { + const startDate = (form.reservation_time || '').split('T')[0] || null + const startTime = (form.reservation_time || '').split('T')[1]?.slice(0, 5) || null + const endDate = form.end_date || null + const endTime = form.reservation_end_time || null + if (form.type === 'flight') { + if (fromPick.airport) endpoints.push(endpointFromAirport(fromPick.airport, 'from', 0, startDate, startTime)) + if (toPick.airport) endpoints.push(endpointFromAirport(toPick.airport, 'to', 1, endDate, endTime)) + } else { + if (fromPick.location) endpoints.push(endpointFromLocation(fromPick.location, 'from', 0, startDate, startTime)) + if (toPick.location) endpoints.push(endpointFromLocation(toPick.location, 'to', 1, endDate, endTime)) + } + } + const saveData: Record = { title: form.title, type: form.type, status: form.status, reservation_time: form.type === 'hotel' ? null : form.reservation_time, @@ -233,6 +321,8 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p assignment_id: form.assignment_id || null, accommodation_id: form.type === 'hotel' ? (form.accommodation_id || null) : null, metadata: Object.keys(metadata).length > 0 ? metadata : null, + endpoints: isTransport(form.type) ? endpoints : [], + needs_review: false, } // Auto-create/update budget entry if price is set, or signal removal if cleared if (isBudgetEnabled) { @@ -394,11 +484,12 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p }} />
- {form.type === 'flight' && ( + {form.type === 'flight' && fromPick.airport && (
- set('meta_departure_timezone', e.target.value)} - placeholder="e.g. CET, UTC+1" style={inputStyle} /> +
+ {fromPick.airport.tz} +
)} @@ -414,11 +505,12 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p set('reservation_end_time', v)} /> - {form.type === 'flight' && ( + {form.type === 'flight' && toPick.airport && (
- set('meta_arrival_timezone', e.target.value)} - placeholder="e.g. JST, UTC+9" style={inputStyle} /> +
+ {toPick.airport.tz} +
)} @@ -456,9 +548,30 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p - {/* Type-specific fields */} + {/* From / To endpoints for transport bookings */} + {isTransport(form.type) && ( +
+
+ + {form.type === 'flight' ? ( + setFromPick({ airport: a || undefined })} /> + ) : ( + setFromPick({ location: l || undefined })} /> + )} +
+
+ + {form.type === 'flight' ? ( + setToPick({ airport: a || undefined })} /> + ) : ( + setToPick({ location: l || undefined })} /> + )} +
+
+ )} + {form.type === 'flight' && ( -
+
set('meta_airline', e.target.value)} @@ -469,16 +582,6 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p set('meta_flight_number', e.target.value)} placeholder="LH 123" style={inputStyle} />
-
- - set('meta_departure_airport', e.target.value)} - placeholder="FRA" style={inputStyle} /> -
-
- - set('meta_arrival_airport', e.target.value)} - placeholder="NRT" style={inputStyle} /> -
)} diff --git a/client/src/components/Planner/ReservationsPanel.tsx b/client/src/components/Planner/ReservationsPanel.tsx index 51f85e5e..965e51d2 100644 --- a/client/src/components/Planner/ReservationsPanel.tsx +++ b/client/src/components/Planner/ReservationsPanel.tsx @@ -8,7 +8,7 @@ import { useTranslation } from '../../i18n' import { Plane, Hotel, Utensils, Train, Car, Ship, Ticket, FileText, MapPin, Calendar, Hash, CheckCircle2, Circle, Pencil, Trash2, Plus, ChevronDown, ChevronRight, Users, - ExternalLink, BookMarked, Lightbulb, Link2, Clock, + ExternalLink, BookMarked, Lightbulb, Link2, Clock, ArrowRight, AlertCircle, } from 'lucide-react' import { openFile } from '../../utils/fileDownload' import type { Reservation, Day, TripFile, AssignmentsMap } from '../../types' @@ -142,6 +142,17 @@ function ReservationCard({ r, tripId, onEdit, onDelete, files = [], onNavigateTo {t(typeInfo.labelKey)} + {r.needs_review ? ( + + + {t('reservations.needsReview')} + + ) : null}
)} + {(() => { + const eps = r.endpoints || [] + const from = eps.find(e => e.role === 'from') + const to = eps.find(e => e.role === 'to') + if (!from || !to) return null + return ( +
+ {from.name} + + {to.name} +
+ ) + })()} + {/* Type-specific metadata */} {(() => { const meta = typeof r.metadata === 'string' ? JSON.parse(r.metadata || '{}') : (r.metadata || {}) if (!meta || Object.keys(meta).length === 0) return null + const hasEndpoints = (r.endpoints || []).some(e => e.role === 'from') && (r.endpoints || []).some(e => e.role === 'to') const cells: { label: string; value: string }[] = [] if (meta.airline) cells.push({ label: t('reservations.meta.airline'), value: meta.airline }) if (meta.flight_number) cells.push({ label: t('reservations.meta.flightNumber'), value: meta.flight_number }) - if (meta.departure_airport) cells.push({ label: t('reservations.meta.from'), value: meta.departure_airport }) - if (meta.arrival_airport) cells.push({ label: t('reservations.meta.to'), value: meta.arrival_airport }) + if (!hasEndpoints && meta.departure_airport) cells.push({ label: t('reservations.meta.from'), value: meta.departure_airport }) + if (!hasEndpoints && meta.arrival_airport) cells.push({ label: t('reservations.meta.to'), value: meta.arrival_airport }) if (meta.train_number) cells.push({ label: t('reservations.meta.trainNumber'), value: meta.train_number }) if (meta.platform) cells.push({ label: t('reservations.meta.platform'), value: meta.platform }) if (meta.seat) cells.push({ label: t('reservations.meta.seat'), value: meta.seat }) diff --git a/client/src/components/Settings/DisplaySettingsTab.tsx b/client/src/components/Settings/DisplaySettingsTab.tsx index ed066701..e84f00e1 100644 --- a/client/src/components/Settings/DisplaySettingsTab.tsx +++ b/client/src/components/Settings/DisplaySettingsTab.tsx @@ -172,6 +172,37 @@ export default function DisplaySettingsTab(): React.ReactElement {
+ {/* Booking route labels */} +
+ +
+ {[ + { value: true, label: t('settings.on') || 'On' }, + { value: false, label: t('settings.off') || 'Off' }, + ].map(opt => ( + + ))} +
+

{t('settings.bookingLabelsHint')}

+
+ {/* Blur Booking Codes */}
diff --git a/client/src/i18n/translations/de.ts b/client/src/i18n/translations/de.ts index dcf9492e..17848b88 100644 --- a/client/src/i18n/translations/de.ts +++ b/client/src/i18n/translations/de.ts @@ -176,6 +176,8 @@ const de: Record = { 'settings.temperature': 'Temperatureinheit', 'settings.timeFormat': 'Zeitformat', 'settings.routeCalculation': 'Routenberechnung', + 'settings.bookingLabels': 'Orts-Labels auf Buchungsrouten', + 'settings.bookingLabelsHint': 'Zeigt Bahnhofs-/Flughafennamen auf der Karte. Wenn aus, wird nur das Icon angezeigt.', 'settings.blurBookingCodes': 'Buchungscodes verbergen', 'settings.notifications': 'Benachrichtigungen', 'settings.notifyTripInvite': 'Trip-Einladungen', @@ -1017,6 +1019,13 @@ const de: Record = { 'reservations.meta.flightNumber': 'Flugnr.', 'reservations.meta.from': 'Von', 'reservations.meta.to': 'Nach', + 'reservations.needsReview': 'Prüfen', + 'reservations.needsReviewHint': 'Flughafen konnte nicht automatisch erkannt werden — bitte Ort bestätigen.', + 'reservations.searchLocation': 'Bahnhof, Hafen, Adresse suchen…', + 'airport.searchPlaceholder': 'Flughafencode oder Stadt (z. B. FRA)', + 'map.connections': 'Verbindungen', + 'map.showConnections': 'Buchungsrouten anzeigen', + 'map.hideConnections': 'Buchungsrouten ausblenden', 'reservations.meta.trainNumber': 'Zugnr.', 'reservations.meta.platform': 'Gleis', 'reservations.meta.seat': 'Sitzplatz', diff --git a/client/src/i18n/translations/en.ts b/client/src/i18n/translations/en.ts index e0fb72c7..2ca59d37 100644 --- a/client/src/i18n/translations/en.ts +++ b/client/src/i18n/translations/en.ts @@ -176,6 +176,8 @@ const en: Record = { 'settings.temperature': 'Temperature Unit', 'settings.timeFormat': 'Time Format', 'settings.routeCalculation': 'Route Calculation', + 'settings.bookingLabels': 'Booking route labels', + 'settings.bookingLabelsHint': 'Show station / airport names on the map. When off, only the icon is shown.', 'settings.blurBookingCodes': 'Blur Booking Codes', 'settings.notifications': 'Notifications', 'settings.notifyTripInvite': 'Trip invitations', @@ -1070,6 +1072,13 @@ const en: Record = { 'reservations.meta.flightNumber': 'Flight No.', 'reservations.meta.from': 'From', 'reservations.meta.to': 'To', + 'reservations.needsReview': 'Review', + 'reservations.needsReviewHint': 'Airport could not be matched automatically — please confirm the location.', + 'reservations.searchLocation': 'Search station, port, address…', + 'airport.searchPlaceholder': 'Airport code or city (e.g. FRA)', + 'map.connections': 'Connections', + 'map.showConnections': 'Show booking routes', + 'map.hideConnections': 'Hide booking routes', 'reservations.meta.trainNumber': 'Train No.', 'reservations.meta.platform': 'Platform', 'reservations.meta.seat': 'Seat', diff --git a/client/src/pages/TripPlannerPage.tsx b/client/src/pages/TripPlannerPage.tsx index 0f152392..3ab627e6 100644 --- a/client/src/pages/TripPlannerPage.tsx +++ b/client/src/pages/TripPlannerPage.tsx @@ -168,6 +168,23 @@ export default function TripPlannerPage(): React.ReactElement | null { const [mobileSidebarOpen, setMobileSidebarOpen] = useState<'left' | 'right' | null>(null) const [deletePlaceId, setDeletePlaceId] = useState(null) + const connectionsStorageKey = tripId ? `trek:visible-connections:${tripId}` : null + const [visibleConnections, setVisibleConnections] = useState(() => { + if (typeof window === 'undefined' || !connectionsStorageKey) return [] + try { + const stored = window.localStorage.getItem(connectionsStorageKey) + return stored ? JSON.parse(stored) as number[] : [] + } catch { return [] } + }) + useEffect(() => { + if (typeof window === 'undefined' || !connectionsStorageKey) return + window.localStorage.setItem(connectionsStorageKey, JSON.stringify(visibleConnections)) + }, [connectionsStorageKey, visibleConnections]) + const toggleConnection = useCallback((id: number) => { + setVisibleConnections(prev => prev.includes(id) ? prev.filter(x => x !== id) : [...prev, id]) + }, []) + const [mapTransportDetail, setMapTransportDetail] = useState(null) + const [isMobile, setIsMobile] = useState(() => window.innerWidth < 768) useEffect(() => { const mq = window.matchMedia('(max-width: 767px)') @@ -626,6 +643,13 @@ export default function TripPlannerPage(): React.ReactElement | null { rightWidth={rightCollapsed ? 0 : rightWidth} hasInspector={!!selectedPlace} hasDayDetail={!!showDayDetail && !selectedPlace} + reservations={reservations} + showReservationStats={settings.route_calculation !== false} + visibleConnectionIds={visibleConnections} + onReservationClick={(rid) => { + const r = reservations.find(x => x.id === rid) + if (r) setMapTransportDetail(r) + }} /> @@ -672,6 +696,10 @@ export default function TripPlannerPage(): React.ReactElement | null { onAssignToDay={handleAssignToDay} onRouteCalculated={(r) => { if (r) { setRoute(r.coordinates); setRouteInfo({ distance: r.distanceText, duration: r.durationText, walkingText: r.walkingText, drivingText: r.drivingText }) } else { setRoute(null); setRouteInfo(null) } }} reservations={reservations} + visibleConnectionIds={visibleConnections} + onToggleConnection={toggleConnection} + externalTransportDetail={mapTransportDetail} + onExternalTransportDetailHandled={() => setMapTransportDetail(null)} onAddReservation={(dayId) => { setEditingReservation(null); tripActions.setSelectedDay(dayId); setShowReservationModal(true) }} onDayDetail={(day) => { setShowDayDetail(day); setSelectedPlaceId(null); selectAssignment(null) }} onRemoveAssignment={handleRemoveAssignment} diff --git a/client/src/types.ts b/client/src/types.ts index c0ef08db..4bcfa22a 100644 --- a/client/src/types.ts +++ b/client/src/types.ts @@ -137,6 +137,20 @@ export interface BudgetMember { paid: boolean } +export interface ReservationEndpoint { + id?: number + reservation_id?: number + role: 'from' | 'to' | 'stop' + sequence: number + name: string + code: string | null + lat: number + lng: number + timezone: string | null + local_time: string | null + local_date: string | null +} + export interface Reservation { id: number trip_id: number @@ -158,6 +172,8 @@ export interface Reservation { accommodation_id?: number | null day_plan_position?: number | null metadata?: Record | string | null + needs_review?: number + endpoints?: ReservationEndpoint[] created_at: string } diff --git a/server/data/airports.json b/server/data/airports.json new file mode 100644 index 00000000..b3ac4dcf --- /dev/null +++ b/server/data/airports.json @@ -0,0 +1 @@ +[{"iata":"AAA","icao":"NTGA","name":"Anaa Airport","city":"Anaa","country":"PF","lat":-17.3526,"lng":-145.509995,"tz":"Pacific/Tahiti"},{"iata":"AAC","icao":"HEAR","name":"El Arish International Airport","city":"El Arish","country":"EG","lat":31.055324,"lng":33.827964,"tz":"Africa/Cairo"},{"iata":"AAE","icao":"DABB","name":"Annaba Rabah Bitat Airport","city":"Annaba","country":"DZ","lat":36.826781,"lng":7.81334,"tz":"Africa/Algiers"},{"iata":"AAL","icao":"EKYT","name":"Aalborg Airport","city":"Aalborg","country":"DK","lat":57.094763,"lng":9.84993,"tz":"Europe/Copenhagen"},{"iata":"AAN","icao":"OMAL","name":"Al Ain International Airport","city":"Al Ain","country":"AE","lat":24.2617,"lng":55.6092,"tz":"Asia/Dubai"},{"iata":"AAP","icao":"WALS","name":"Aji Pangeran Tumenggung Pranoto International Airport","city":"Samarinda","country":"ID","lat":-0.374478,"lng":117.250128,"tz":"Asia/Makassar"},{"iata":"AAQ","icao":"URKA","name":"Anapa Vityazevo Airport","city":"Krasnyi Kurgan","country":"RU","lat":45.002102,"lng":37.347301,"tz":"Europe/Moscow"},{"iata":"AAR","icao":"EKAH","name":"Aarhus Airport","city":"Aarhus","country":"DK","lat":56.303331,"lng":10.618286,"tz":"Europe/Copenhagen"},{"iata":"AAT","icao":"ZWAT","name":"Altay Xuedu Airport","city":"Altay","country":"CN","lat":47.749886,"lng":88.085808,"tz":"Asia/Urumqi"},{"iata":"AAX","icao":"SBAX","name":"Romeu Zema Airport","city":"Araxá","country":"BR","lat":-19.5632,"lng":-46.9604,"tz":"America/Sao_Paulo"},{"iata":"AAY","icao":"OYGD","name":"Al Ghaydah International Airport","city":"Al Ghaydah","country":"YE","lat":16.193341,"lng":52.174186,"tz":"Asia/Aden"},{"iata":"ABA","icao":"UNAA","name":"Abakan International Airport","city":"Abakan","country":"RU","lat":53.740002,"lng":91.385002,"tz":"Asia/Krasnoyarsk"},{"iata":"ABB","icao":"DNAS","name":"Asaba International Airport","city":"Asaba","country":"NG","lat":6.204167,"lng":6.665278,"tz":"Africa/Lagos"},{"iata":"ABD","icao":"OIAA","name":"Abadan Ayatollah Jami International Airport","city":"Abadan","country":"IR","lat":30.367887,"lng":48.230075,"tz":"Asia/Tehran"},{"iata":"ABE","icao":"KABE","name":"Lehigh Valley International Airport","city":"Allentown/Bethlehem","country":"US","lat":40.651773,"lng":-75.442797,"tz":"America/New_York"},{"iata":"ABI","icao":"KABI","name":"Abilene Regional Airport","city":"Abilene","country":"US","lat":32.411301,"lng":-99.6819,"tz":"America/Chicago"},{"iata":"ABJ","icao":"DIAP","name":"Félix-Houphouët-Boigny International Airport","city":"Abidjan","country":"CI","lat":5.26139,"lng":-3.92629,"tz":"Africa/Abidjan"},{"iata":"ABK","icao":"HAKD","name":"Kebri Dahar Airport","city":"Kebri Dahar","country":"ET","lat":6.732577,"lng":44.241339,"tz":"Africa/Addis_Ababa"},{"iata":"ABL","icao":"PAFM","name":"Ambler Airport","city":"Ambler","country":"US","lat":67.105529,"lng":-157.855339,"tz":"America/Anchorage"},{"iata":"ABQ","icao":"KABQ","name":"Albuquerque International Sunport","city":"Albuquerque","country":"US","lat":35.039976,"lng":-106.608925,"tz":"America/Denver"},{"iata":"ABR","icao":"KABR","name":"Aberdeen Regional Airport","city":"Aberdeen","country":"US","lat":45.4491,"lng":-98.421799,"tz":"America/Chicago"},{"iata":"ABS","icao":"HEBL","name":"Abu Simbel Airport","city":"Abu Simbel","country":"EG","lat":22.375924,"lng":31.611734,"tz":"Africa/Cairo"},{"iata":"ABT","icao":"OEBA","name":"King Saud Bin Abdulaziz (Al Baha) Airport","city":"Al-Baha","country":"SA","lat":20.298506,"lng":41.636153,"tz":"Asia/Riyadh"},{"iata":"ABV","icao":"DNAA","name":"Nnamdi Azikiwe International Airport","city":"Abuja","country":"NG","lat":9.00679,"lng":7.26317,"tz":"Africa/Lagos"},{"iata":"ABX","icao":"YMAY","name":"Albury Airport","city":"East Albury","country":"AU","lat":-36.066758,"lng":146.959148,"tz":"Australia/Sydney"},{"iata":"ABY","icao":"KABY","name":"Southwest Georgia Regional Airport","city":"Albany","country":"US","lat":31.532946,"lng":-84.196215,"tz":"America/New_York"},{"iata":"ABZ","icao":"EGPD","name":"Aberdeen International Airport","city":"Aberdeen","country":"GB","lat":57.2019,"lng":-2.19778,"tz":"Europe/London"},{"iata":"ACA","icao":"MMAA","name":"General Juan N. Álvarez International Airport","city":"Acapulco","country":"MX","lat":16.757126,"lng":-99.753113,"tz":"America/Mexico_City"},{"iata":"ACC","icao":"DGAA","name":"Kotoka International Airport","city":"Accra","country":"GH","lat":5.60519,"lng":-0.166786,"tz":"Africa/Accra"},{"iata":"ACE","icao":"GCRR","name":"César Manrique-Lanzarote Airport","city":"San Bartolomé","country":"ES","lat":28.945499,"lng":-13.6052,"tz":"Atlantic/Canary"},{"iata":"ACH","icao":"LSZR","name":"Sankt Gallen Altenrhein Airport","city":"St. Gallen","country":"CH","lat":47.485001,"lng":9.56077,"tz":"Europe/Zurich"},{"iata":"ACI","icao":"EGJA","name":"Alderney Airport","city":"Saint Anne","country":"GG","lat":49.706104,"lng":-2.21472,"tz":"Europe/Guernsey"},{"iata":"ACK","icao":"KACK","name":"Nantucket Memorial Airport","city":"Nantucket","country":"US","lat":41.253101,"lng":-70.060204,"tz":"America/New_York"},{"iata":"ACT","icao":"KACT","name":"Waco Regional Airport","city":"Waco","country":"US","lat":31.6113,"lng":-97.230499,"tz":"America/Chicago"},{"iata":"ACV","icao":"KACV","name":"California Redwood Coast-Humboldt County Airport","city":"Arcata/Eureka","country":"US","lat":40.978101,"lng":-124.109,"tz":"America/Los_Angeles"},{"iata":"ACX","icao":"ZUYI","name":"Xingyi Wanfenglin Airport","city":"Xingyi","country":"CN","lat":25.083423,"lng":104.960804,"tz":"Asia/Shanghai"},{"iata":"ACY","icao":"KACY","name":"Atlantic City International Airport","city":"Atlantic City","country":"US","lat":39.456201,"lng":-74.577511,"tz":"America/New_York"},{"iata":"ADA","icao":"LTAF","name":"Adana Şakirpaşa Airport","city":"Seyhan","country":"TR","lat":36.982201,"lng":35.280399,"tz":"Europe/Istanbul"},{"iata":"ADB","icao":"LTBJ","name":"Adnan Menderes International Airport","city":"Gaziemir","country":"TR","lat":38.2924,"lng":27.157,"tz":"Europe/Istanbul"},{"iata":"ADD","icao":"HAAB","name":"Addis Ababa Bole International Airport","city":"Addis Ababa","country":"ET","lat":8.97789,"lng":38.799301,"tz":"Africa/Addis_Ababa"},{"iata":"ADE","icao":"OYAA","name":"Aden International Airport","city":"Aden","country":"YE","lat":12.829564,"lng":45.029976,"tz":"Asia/Aden"},{"iata":"ADF","icao":"LTCP","name":"Adıyaman Airport","city":"Adıyaman","country":"TR","lat":37.7314,"lng":38.468899,"tz":"Europe/Istanbul"},{"iata":"ADJ","icao":"OJAM","name":"Marka International (Amman Civil) Airport","city":"Amman","country":"JO","lat":31.9727,"lng":35.9916,"tz":"Asia/Amman"},{"iata":"ADK","icao":"PADK","name":"Adak Airport","city":"Adak","country":"US","lat":51.883564,"lng":-176.642783,"tz":"America/Adak"},{"iata":"ADL","icao":"YPAD","name":"Adelaide International Airport","city":"Adelaide","country":"AU","lat":-34.947512,"lng":138.533393,"tz":"Australia/Adelaide"},{"iata":"ADQ","icao":"PADQ","name":"Kodiak Airport","city":"Kodiak","country":"US","lat":57.75,"lng":-152.494003,"tz":"America/Anchorage"},{"iata":"ADU","icao":"OITL","name":"Ardabil Airport","city":"Ardabil","country":"IR","lat":38.325699,"lng":48.4244,"tz":"Asia/Tehran"},{"iata":"ADZ","icao":"SKSP","name":"Gustavo Rojas Pinilla International Airport","city":"San Andrés","country":"CO","lat":12.5836,"lng":-81.7112,"tz":"America/Bogota"},{"iata":"AEB","icao":"ZGBS","name":"Baise (Bose) Bama Airport","city":"Baise (Tianyang)","country":"CN","lat":23.7206,"lng":106.959999,"tz":"Asia/Shanghai"},{"iata":"AEH","icao":"FTTC","name":"Abeche Airport","city":"Abeche","country":"TD","lat":13.847,"lng":20.844299,"tz":"Africa/Ndjamena"},{"iata":"AEP","icao":"SABE","name":"Aeroparque Jorge Newbery","city":"Buenos Aires","country":"AR","lat":-34.559419,"lng":-58.415536,"tz":"America/Argentina/Buenos_Aires"},{"iata":"AER","icao":"URSS","name":"Sochi International Airport","city":"Sochi","country":"RU","lat":43.449902,"lng":39.9566,"tz":"Europe/Moscow"},{"iata":"AES","icao":"ENAL","name":"Ålesund Airport","city":"Ålesund","country":"NO","lat":62.560443,"lng":6.110845,"tz":"Europe/Oslo"},{"iata":"AEU","icao":"OIBA","name":"Abu Musa Island Airport","city":"Abu Musa","country":"IR","lat":25.8757,"lng":55.033001,"tz":"Asia/Tehran"},{"iata":"AEX","icao":"KAEX","name":"Alexandria International Airport","city":"Alexandria","country":"US","lat":31.325828,"lng":-92.546702,"tz":"America/Chicago"},{"iata":"AEY","icao":"BIAR","name":"Akureyri International Airport","city":"Akureyri","country":"IS","lat":65.656573,"lng":-18.072018,"tz":"Atlantic/Reykjavik"},{"iata":"AFA","icao":"SAMR","name":"Suboficial Ay Santiago Germano Airport","city":"San Rafael","country":"AR","lat":-34.588299,"lng":-68.4039,"tz":"America/Argentina/Mendoza"},{"iata":"AFL","icao":"SBAT","name":"Piloto Osvaldo Marques Dias Airport","city":"Alta Floresta","country":"BR","lat":-9.866389,"lng":-56.106298,"tz":"America/Cuiaba"},{"iata":"AFZ","icao":"OIMS","name":"Sabzevar National Airport","city":"Sabzevar","country":"IR","lat":36.168098,"lng":57.5952,"tz":"Asia/Tehran"},{"iata":"AGA","icao":"GMAD","name":"Al Massira Airport","city":"Agadir (Temsia)","country":"MA","lat":30.322478,"lng":-9.412003,"tz":"Africa/Casablanca"},{"iata":"AGH","icao":"ESTA","name":"Ängelholm-Helsingborg Airport","city":"Ängelholm","country":"SE","lat":56.296101,"lng":12.8471,"tz":"Europe/Stockholm"},{"iata":"AGP","icao":"LEMG","name":"Málaga-Costa del Sol Airport","city":"Málaga","country":"ES","lat":36.6749,"lng":-4.49911,"tz":"Europe/Madrid"},{"iata":"AGR","icao":"VIAG","name":"Agra Airport / Agra Air Force Station","city":"Agra","country":"IN","lat":27.157975,"lng":77.961025,"tz":"Asia/Kolkata"},{"iata":"AGS","icao":"KAGS","name":"Augusta Regional At Bush Field","city":"Augusta","country":"US","lat":33.3699,"lng":-81.9645,"tz":"America/New_York"},{"iata":"AGT","icao":"SGES","name":"Guaraní International Airport","city":"Ciudad del Este","country":"PY","lat":-25.457186,"lng":-54.839544,"tz":"America/Asuncion"},{"iata":"AGU","icao":"MMAS","name":"Aguascalientes International Airport","city":"Aguascalientes","country":"MX","lat":21.699589,"lng":-102.318372,"tz":"America/Mexico_City"},{"iata":"AGX","icao":"VOAT","name":"Agatti Airport","city":"Agatti","country":"IN","lat":10.8237,"lng":72.176003,"tz":"Asia/Kolkata"},{"iata":"AHA","icao":"VEAP","name":"Maa Mahamaya Airport","city":"Ambikapur","country":"IN","lat":22.98753,"lng":83.19612,"tz":"Asia/Kolkata"},{"iata":"AHB","icao":"OEAB","name":"Abha International Airport","city":"Abha","country":"SA","lat":18.2404,"lng":42.656601,"tz":"Asia/Riyadh"},{"iata":"AHE","icao":"NTHE","name":"Ahe Airport","city":"Ahe Atoll","country":"PF","lat":-14.4281,"lng":-146.257004,"tz":"Pacific/Tahiti"},{"iata":"AHO","icao":"LIEA","name":"Alghero-Fertilia Airport","city":"Alghero","country":"IT","lat":40.632099,"lng":8.29077,"tz":"Europe/Rome"},{"iata":"AIA","icao":"KAIA","name":"Alliance Municipal Airport","city":"Alliance","country":"US","lat":42.052543,"lng":-102.803965,"tz":"America/Denver"},{"iata":"AIN","icao":"PAWI","name":"Wainwright Airport","city":"Wainwright","country":"US","lat":70.638,"lng":-159.994995,"tz":"America/Anchorage"},{"iata":"AJA","icao":"LFKJ","name":"Ajaccio Napoléon Bonaparte airport","city":"Ajaccio","country":"FR","lat":41.923599,"lng":8.80292,"tz":"Europe/Paris"},{"iata":"AJF","icao":"OESK","name":"Al-Jawf International Airport","city":"Al-Jawf","country":"SA","lat":29.783301,"lng":40.100905,"tz":"Asia/Riyadh"},{"iata":"AJI","icao":"LTCO","name":"Ağrı Airport","city":"Ağrı","country":"TR","lat":39.655642,"lng":43.025742,"tz":"Europe/Istanbul"},{"iata":"AJL","icao":"VELP","name":"Lengpui Airport","city":"Aizawl (Lengpui)","country":"IN","lat":23.840599,"lng":92.619698,"tz":"Asia/Kolkata"},{"iata":"AJN","icao":"FMCV","name":"Ouani Airport","city":"Ouani","country":"KM","lat":-12.131047,"lng":44.430044,"tz":"Indian/Comoro"},{"iata":"AJR","icao":"ESNX","name":"Arvidsjaur Airport","city":"Arvidsjaur","country":"SE","lat":65.590302,"lng":19.2819,"tz":"Europe/Stockholm"},{"iata":"AJU","icao":"SBAR","name":"Aracaju - Santa Maria Airport","city":"Aracaju","country":"BR","lat":-10.98394,"lng":-37.072873,"tz":"America/Maceio"},{"iata":"AKF","icao":"HLKF","name":"Kufra Airport","city":"Kufra","country":"LY","lat":24.178699,"lng":23.313999,"tz":"Africa/Tripoli"},{"iata":"AKJ","icao":"RJEC","name":"Asahikawa Airport","city":"Higashikagura","country":"JP","lat":43.670799,"lng":142.447006,"tz":"Asia/Tokyo"},{"iata":"AKL","icao":"NZAA","name":"Auckland International Airport","city":"Auckland","country":"NZ","lat":-37.01199,"lng":174.786331,"tz":"Pacific/Auckland"},{"iata":"AKN","icao":"PAKN","name":"King Salmon Airport","city":"King Salmon","country":"US","lat":58.677845,"lng":-156.651965,"tz":"America/Anchorage"},{"iata":"AKP","icao":"PAKP","name":"Anaktuvuk Pass Airport","city":"Anaktuvuk Pass","country":"US","lat":68.133598,"lng":-151.742996,"tz":"America/Anchorage"},{"iata":"AKR","icao":"DNAK","name":"Akure Airport","city":"Akure","country":"NG","lat":7.24674,"lng":5.30101,"tz":"Africa/Lagos"},{"iata":"AKU","icao":"ZWAK","name":"Aksu Hongqipo Airport","city":"Aksu (Onsu)","country":"CN","lat":41.262501,"lng":80.291702,"tz":"Asia/Urumqi"},{"iata":"AKX","icao":"UATT","name":"Aktobe International Airport","city":"Aktobe","country":"KZ","lat":50.248116,"lng":57.204144,"tz":"Asia/Aqtobe"},{"iata":"AKY","icao":"VYSW","name":"Sittwe Airport","city":"Sittwe","country":"MM","lat":20.133165,"lng":92.870693,"tz":"Asia/Yangon"},{"iata":"ALA","icao":"UAAA","name":"Almaty International Airport","city":"Almaty","country":"KZ","lat":43.354267,"lng":77.042828,"tz":"Asia/Almaty"},{"iata":"ALB","icao":"KALB","name":"Albany International Airport","city":"Albany","country":"US","lat":42.748299,"lng":-73.801697,"tz":"America/New_York"},{"iata":"ALC","icao":"LEAL","name":"Alicante-Elche Miguel Hernández Airport","city":"Alicante","country":"ES","lat":38.2822,"lng":-0.558156,"tz":"Europe/Madrid"},{"iata":"ALF","icao":"ENAT","name":"Alta Airport","city":"Alta","country":"NO","lat":69.976097,"lng":23.3717,"tz":"Europe/Oslo"},{"iata":"ALG","icao":"DAAG","name":"Houari Boumediene Airport","city":"Algiers","country":"DZ","lat":36.693886,"lng":3.214531,"tz":"Africa/Algiers"},{"iata":"ALH","icao":"YABA","name":"Albany Airport","city":"Albany","country":"AU","lat":-34.943333,"lng":117.808889,"tz":"Australia/Perth"},{"iata":"ALO","icao":"KALO","name":"Waterloo Regional Airport","city":"Waterloo","country":"US","lat":42.557098,"lng":-92.400299,"tz":"America/Chicago"},{"iata":"ALP","icao":"OSAP","name":"Aleppo International Airport","city":"Aleppo","country":"SY","lat":36.181262,"lng":37.226869,"tz":"Asia/Damascus"},{"iata":"ALS","icao":"KALS","name":"San Luis Valley Regional Airport/Bergman Field","city":"Alamosa","country":"US","lat":37.434898,"lng":-105.866997,"tz":"America/Denver"},{"iata":"ALW","icao":"KALW","name":"Walla Walla Regional Airport","city":"Walla Walla","country":"US","lat":46.094898,"lng":-118.288002,"tz":"America/Los_Angeles"},{"iata":"AMA","icao":"KAMA","name":"Rick Husband Amarillo International Airport","city":"Amarillo","country":"US","lat":35.217857,"lng":-101.706444,"tz":"America/Chicago"},{"iata":"AMD","icao":"VAAH","name":"Sardar Vallabh Patel International Airport","city":"Ahmedabad","country":"IN","lat":23.0772,"lng":72.634697,"tz":"Asia/Kolkata"},{"iata":"AMH","icao":"HAAM","name":"Arba Minch Airport","city":"Arba Minch","country":"ET","lat":6.03939,"lng":37.5905,"tz":"Africa/Addis_Ababa"},{"iata":"AMM","icao":"OJAI","name":"Queen Alia International Airport","city":"Amman","country":"JO","lat":31.722601,"lng":35.993198,"tz":"Asia/Amman"},{"iata":"AMQ","icao":"WAPP","name":"Pattimura International Airport","city":"Ambon","country":"ID","lat":-3.71026,"lng":128.089005,"tz":"Asia/Jayapura"},{"iata":"AMS","icao":"EHAM","name":"Amsterdam Airport Schiphol","city":"Amsterdam","country":"NL","lat":52.308601,"lng":4.76389,"tz":"Europe/Amsterdam"},{"iata":"AMV","icao":"ULDD","name":"Amderma Airport","city":"Amderma","country":"RU","lat":69.763298,"lng":61.5564,"tz":"Europe/Moscow"},{"iata":"ANC","icao":"PANC","name":"Ted Stevens Anchorage International Airport","city":"Anchorage","country":"US","lat":61.179004,"lng":-149.992561,"tz":"America/Anchorage"},{"iata":"ANF","icao":"SCFA","name":"Andrés Sabella Gálvez International Airport","city":"Antofagasta","country":"CL","lat":-23.445274,"lng":-70.445232,"tz":"America/Santiago"},{"iata":"ANI","icao":"PANI","name":"Aniak Airport","city":"Aniak","country":"US","lat":61.5816,"lng":-159.542999,"tz":"America/Anchorage"},{"iata":"ANR","icao":"EBAW","name":"Antwerp International Airport (Deurne)","city":"Antwerp","country":"BE","lat":51.190667,"lng":4.463153,"tz":"Europe/Brussels"},{"iata":"ANU","icao":"TAPA","name":"V. C. Bird International Airport","city":"Osbourn","country":"AG","lat":17.1367,"lng":-61.792702,"tz":"America/Antigua"},{"iata":"ANV","icao":"PANV","name":"Anvik Airport","city":"Anvik","country":"US","lat":62.646702,"lng":-160.190994,"tz":"America/Anchorage"},{"iata":"ANX","icao":"ENAN","name":"Andøya Airport, Andenes","city":"Andenes","country":"NO","lat":69.295193,"lng":16.139379,"tz":"Europe/Oslo"},{"iata":"AOE","icao":"LTBY","name":"Hasan Polatkan Airport","city":"Eskişehir","country":"TR","lat":39.811644,"lng":30.519268,"tz":"Europe/Istanbul"},{"iata":"AOG","icao":"ZYAS","name":"Anshan Teng'ao Airport / Anshan Air Base","city":"Anshan","country":"CN","lat":41.105301,"lng":122.853996,"tz":"Asia/Shanghai"},{"iata":"AOI","icao":"LIPY","name":"Marche Airport","city":"Falconara Marittima (AN)","country":"IT","lat":43.616299,"lng":13.3623,"tz":"Europe/Rome"},{"iata":"AOJ","icao":"RJSA","name":"Aomori Airport","city":"Aomori","country":"JP","lat":40.733777,"lng":140.689477,"tz":"Asia/Tokyo"},{"iata":"AOK","icao":"LGKP","name":"Karpathos Airport","city":"Karpathos Island","country":"GR","lat":35.421398,"lng":27.146,"tz":"Europe/Athens"},{"iata":"AOO","icao":"KAOO","name":"Altoona Blair County Airport","city":"Altoona","country":"US","lat":40.296398,"lng":-78.32,"tz":"America/New_York"},{"iata":"AOR","icao":"WMKA","name":"Sultan Abdul Halim Airport","city":"Alor Satar","country":"MY","lat":6.18967,"lng":100.398003,"tz":"Asia/Kuala_Lumpur"},{"iata":"APL","icao":"FQNP","name":"Nampula Airport","city":"Nampula","country":"MZ","lat":-15.1056,"lng":39.281799,"tz":"Africa/Maputo"},{"iata":"APN","icao":"KAPN","name":"Alpena County Regional Airport","city":"Alpena","country":"US","lat":45.078098,"lng":-83.560303,"tz":"America/Detroit"},{"iata":"APO","icao":"SKLC","name":"Antonio Roldán Betancur Airport","city":"Carepa","country":"CO","lat":7.81196,"lng":-76.7164,"tz":"America/Bogota"},{"iata":"APW","icao":"NSFA","name":"Faleolo International Airport","city":"Apia","country":"WS","lat":-13.83,"lng":-172.007996,"tz":"Pacific/Apia"},{"iata":"AQA","icao":"SBAQ","name":"Araraquara Airport","city":"Araraquara","country":"BR","lat":-21.812,"lng":-48.132999,"tz":"America/Sao_Paulo"},{"iata":"AQG","icao":"ZSAQ","name":"Anqing Tianzhushan Airport / Anqing North Air Base","city":"Anqing","country":"CN","lat":30.582199,"lng":117.050003,"tz":"Asia/Shanghai"},{"iata":"AQI","icao":"OEPA","name":"Qaisumah–Hafar Al-Batin International Airport","city":"Qaisumah","country":"SA","lat":28.335726,"lng":46.127108,"tz":"Asia/Riyadh"},{"iata":"AQJ","icao":"OJAQ","name":"King Hussein International Airport","city":"Aqaba","country":"JO","lat":29.611601,"lng":35.018101,"tz":"Asia/Amman"},{"iata":"AQP","icao":"SPQU","name":"Rodríguez Ballón International Airport","city":"Arequipa","country":"PE","lat":-16.340786,"lng":-71.569485,"tz":"America/Lima"},{"iata":"ARC","icao":"PARC","name":"Arctic Village Airport","city":"Arctic Village","country":"US","lat":68.1147,"lng":-145.578995,"tz":"America/Anchorage"},{"iata":"ARH","icao":"ULAA","name":"Talagi Airport","city":"Archangelsk","country":"RU","lat":64.600304,"lng":40.716702,"tz":"Europe/Moscow"},{"iata":"ARI","icao":"SCAR","name":"Chacalluta International Airport","city":"Arica","country":"CL","lat":-18.348499,"lng":-70.338699,"tz":"America/Santiago"},{"iata":"ARK","icao":"HTAR","name":"Arusha Airport","city":"Arusha","country":"TZ","lat":-3.36779,"lng":36.633301,"tz":"Africa/Dar_es_Salaam"},{"iata":"ARM","icao":"YARM","name":"Armidale Airport","city":"Armidale","country":"AU","lat":-30.528099,"lng":151.617004,"tz":"Australia/Sydney"},{"iata":"ARN","icao":"ESSA","name":"Stockholm-Arlanda Airport","city":"Stockholm","country":"SE","lat":59.64849,"lng":17.928829,"tz":"Europe/Stockholm"},{"iata":"ART","icao":"KART","name":"Watertown International Airport","city":"Watertown","country":"US","lat":43.991901,"lng":-76.021698,"tz":"America/New_York"},{"iata":"ARU","icao":"SBAU","name":"Araçatuba Airport","city":"Araçatuba","country":"BR","lat":-21.141479,"lng":-50.424575,"tz":"America/Sao_Paulo"},{"iata":"ARW","icao":"LRAR","name":"Arad International Airport","city":"Arad","country":"RO","lat":46.176136,"lng":21.264322,"tz":"Europe/Bucharest"},{"iata":"ASB","icao":"UTAA","name":"Ashgabat International Airport","city":"Ashgabat","country":"TM","lat":37.986801,"lng":58.361,"tz":"Asia/Ashgabat"},{"iata":"ASD","icao":"MYAF","name":"Andros Town Airport","city":"Andros Town","country":"BS","lat":24.697901,"lng":-77.795601,"tz":"America/Nassau"},{"iata":"ASE","icao":"KASE","name":"Aspen-Pitkin County Airport (Sardy Field)","city":"Aspen","country":"US","lat":39.223202,"lng":-106.869003,"tz":"America/Denver"},{"iata":"ASF","icao":"URWA","name":"Astrakhan Narimanovo Boris M. Kustodiev International Airport","city":"Astrakhan","country":"RU","lat":46.282843,"lng":48.010511,"tz":"Europe/Astrakhan"},{"iata":"ASI","icao":"FHAW","name":"RAF Ascension Island","city":"Cat Hill","country":"SH","lat":-7.970179,"lng":-14.392744,"tz":"Atlantic/St_Helena"},{"iata":"ASJ","icao":"RJKA","name":"Amami Airport","city":"Amami","country":"JP","lat":28.430599,"lng":129.712997,"tz":"Asia/Tokyo"},{"iata":"ASM","icao":"HHAS","name":"Asmara International Airport","city":"Asmara","country":"ER","lat":15.2919,"lng":38.910702,"tz":"Africa/Asmara"},{"iata":"ASO","icao":"HASO","name":"Asosa Airport","city":"Asosa","country":"ET","lat":10.0185,"lng":34.5863,"tz":"Africa/Addis_Ababa"},{"iata":"ASP","icao":"YBAS","name":"Alice Springs Airport","city":"Alice Springs","country":"AU","lat":-23.806588,"lng":133.903427,"tz":"Australia/Darwin"},{"iata":"ASR","icao":"LTAU","name":"Kayseri Erkilet International Airport","city":"Kayseri","country":"TR","lat":38.770401,"lng":35.495399,"tz":"Europe/Istanbul"},{"iata":"ASU","icao":"SGAS","name":"Silvio Pettirossi International Airport","city":"Asunción","country":"PY","lat":-25.240156,"lng":-57.519227,"tz":"America/Asuncion"},{"iata":"ASV","icao":"HKAM","name":"Amboseli Airport","city":"Ol Tukai","country":"KE","lat":-2.644786,"lng":37.252922,"tz":"Africa/Nairobi"},{"iata":"ASW","icao":"HESN","name":"Aswan International Airport","city":"Aswan","country":"EG","lat":23.961075,"lng":32.820382,"tz":"Africa/Cairo"},{"iata":"ATC","icao":"MYCA","name":"Arthur's Town Airport","city":"Arthur's Town","country":"BS","lat":24.6294,"lng":-75.673797,"tz":"America/Nassau"},{"iata":"ATH","icao":"LGAV","name":"Athens Eleftherios Venizelos International Airport","city":"Spata-Artemida","country":"GR","lat":37.936401,"lng":23.9445,"tz":"Europe/Athens"},{"iata":"ATK","icao":"PATQ","name":"Atqasuk Edward Burnell Sr Memorial Airport","city":"Atqasuk","country":"US","lat":70.46704,"lng":-157.436013,"tz":"America/Anchorage"},{"iata":"ATL","icao":"KATL","name":"Hartsfield Jackson Atlanta International Airport","city":"Atlanta","country":"US","lat":33.6367,"lng":-84.428101,"tz":"America/New_York"},{"iata":"ATM","icao":"SBHT","name":"Altamira Interstate Airport","city":"Altamira","country":"BR","lat":-3.253144,"lng":-52.253938,"tz":"America/Belem"},{"iata":"ATQ","icao":"VIAR","name":"Sri Guru Ram Das Ji International Airport","city":"Amritsar","country":"IN","lat":31.7096,"lng":74.797302,"tz":"Asia/Kolkata"},{"iata":"ATW","icao":"KATW","name":"Appleton International Airport","city":"Appleton","country":"US","lat":44.258515,"lng":-88.519,"tz":"America/Chicago"},{"iata":"ATY","icao":"KATY","name":"Watertown Regional Airport","city":"Watertown","country":"US","lat":44.914001,"lng":-97.154701,"tz":"America/Chicago"},{"iata":"ATZ","icao":"HEAT","name":"Asyut International Airport","city":"Asyut","country":"EG","lat":27.045962,"lng":31.01276,"tz":"Africa/Cairo"},{"iata":"AUA","icao":"TNCA","name":"Queen Beatrix International Airport","city":"Oranjestad","country":"AW","lat":12.501056,"lng":-70.014281,"tz":"America/Aruba"},{"iata":"AUC","icao":"SKUC","name":"Santiago Perez Airport","city":"Arauca","country":"CO","lat":7.06888,"lng":-70.7369,"tz":"America/Bogota"},{"iata":"AUG","icao":"KAUG","name":"Augusta State Airport","city":"Augusta","country":"US","lat":44.320599,"lng":-69.797302,"tz":"America/New_York"},{"iata":"AUH","icao":"OMAA","name":"Zayed International Airport","city":"Abu Dhabi","country":"AE","lat":24.440966,"lng":54.649237,"tz":"Asia/Dubai"},{"iata":"AUQ","icao":"NTMN","name":"Hiva Oa-Atuona Airport","city":"Hiva Oa Island","country":"PF","lat":-9.76879,"lng":-139.011002,"tz":"Pacific/Marquesas"},{"iata":"AUR","icao":"LFLW","name":"Aurillac airport","city":"Aurillac","country":"FR","lat":44.891399,"lng":2.42194,"tz":"Europe/Paris"},{"iata":"AUS","icao":"KAUS","name":"Austin Bergstrom International Airport","city":"Austin","country":"US","lat":30.197535,"lng":-97.662015,"tz":"America/Chicago"},{"iata":"AUX","icao":"SWGN","name":"Araguaína Airport","city":"Araguaína","country":"BR","lat":-7.22787,"lng":-48.240501,"tz":"America/Araguaina"},{"iata":"AVA","icao":"ZUAS","name":"Anshun Huangguoshu Airport","city":"Anshun (Xixiu)","country":"CN","lat":26.260556,"lng":105.873333,"tz":"Asia/Shanghai"},{"iata":"AVK","icao":"ZMAH","name":"Arvaikheer Airport","city":"Arvaikheer","country":"MN","lat":46.250301,"lng":102.802002,"tz":"Asia/Ulaanbaatar"},{"iata":"AVL","icao":"KAVL","name":"Asheville Regional Airport","city":"Asheville","country":"US","lat":35.435488,"lng":-82.541853,"tz":"America/New_York"},{"iata":"AVN","icao":"LFMV","name":"Avignon Caumont airport","city":"Avignon","country":"FR","lat":43.907299,"lng":4.90183,"tz":"Europe/Paris"},{"iata":"AVP","icao":"KAVP","name":"Wilkes-Barre/Scranton International Airport","city":"Wilkes-Barre/Scranton","country":"US","lat":41.337064,"lng":-75.724232,"tz":"America/New_York"},{"iata":"AVV","icao":"YMAV","name":"Melbourne Avalon International Airport","city":"Geelong/Melbourne","country":"AU","lat":-38.040269,"lng":144.467196,"tz":"Australia/Melbourne"},{"iata":"AWA","icao":"HALA","name":"Hawassa International Airport","city":"Hawassa","country":"ET","lat":7.100611,"lng":38.396455,"tz":"Africa/Addis_Ababa"},{"iata":"AWK","icao":"PWAK","name":"Wake Island Airfield","city":"Wake Island","country":"UM","lat":19.282437,"lng":166.636637,"tz":"Pacific/Wake"},{"iata":"AWZ","icao":"OIAW","name":"Qasem Soleimani International Airport","city":"Ahvaz","country":"IR","lat":31.3364,"lng":48.763789,"tz":"Asia/Tehran"},{"iata":"AXA","icao":"TQPF","name":"Clayton J. Lloyd International Airport","city":"The Valley","country":"AI","lat":18.204773,"lng":-63.05383,"tz":"America/Anguilla"},{"iata":"AXD","icao":"LGAL","name":"Alexandroupoli Democritus Airport","city":"Alexandroupolis","country":"GR","lat":40.8559,"lng":25.956301,"tz":"Europe/Athens"},{"iata":"AXF","icao":"ZBAL","name":"Alxa Left Banner Bayanhot Airport","city":"Bayanhot","country":"CN","lat":38.748317,"lng":105.58416,"tz":"Asia/Shanghai"},{"iata":"AXJ","icao":"RJDA","name":"Amakusa Airport","city":"Amakusa","country":"JP","lat":32.482498,"lng":130.158997,"tz":"Asia/Tokyo"},{"iata":"AXM","icao":"SKAR","name":"El Eden Airport","city":"Armenia","country":"CO","lat":4.45278,"lng":-75.7664,"tz":"America/Bogota"},{"iata":"AXP","icao":"MYAP","name":"Spring Point Airport","city":"Spring Point","country":"BS","lat":22.441799,"lng":-73.970901,"tz":"America/Nassau"},{"iata":"AXR","icao":"NTGU","name":"Arutua Airport","city":"","country":"PF","lat":-15.2483,"lng":-146.617004,"tz":"Pacific/Tahiti"},{"iata":"AXT","icao":"RJSK","name":"Akita Airport","city":"Akita","country":"JP","lat":39.615601,"lng":140.218994,"tz":"Asia/Tokyo"},{"iata":"AXU","icao":"HAAX","name":"Axum Airport","city":"Axum","country":"ET","lat":14.1468,"lng":38.7728,"tz":"Africa/Addis_Ababa"},{"iata":"AYJ","icao":"VEAY","name":"Maharshi Valmiki International Airport","city":"Faizabad","country":"IN","lat":26.747736,"lng":82.163664,"tz":"Asia/Kolkata"},{"iata":"AYP","icao":"SPHO","name":"Air Force Colonel Alfredo Mendivil Duarte Airport","city":"Ayacucho","country":"PE","lat":-13.1548,"lng":-74.204399,"tz":"America/Lima"},{"iata":"AYQ","icao":"YAYE","name":"Ayers Rock Connellan Airport","city":"Yulara","country":"AU","lat":-25.185913,"lng":130.97703,"tz":"Australia/Darwin"},{"iata":"AYT","icao":"LTAI","name":"Antalya International Airport","city":"Antalya","country":"TR","lat":36.898701,"lng":30.800501,"tz":"Europe/Istanbul"},{"iata":"AZA","icao":"KIWA","name":"Mesa Gateway Airport","city":"Mesa","country":"US","lat":33.3078,"lng":-111.654999,"tz":"America/Phoenix"},{"iata":"AZD","icao":"OIYY","name":"Shahid Sadooghi Airport","city":"Yazd","country":"IR","lat":31.9049,"lng":54.276501,"tz":"Asia/Tehran"},{"iata":"AZN","icao":"UZFA","name":"Andijan International Airport","city":"Andijan","country":"UZ","lat":40.727699,"lng":72.293999,"tz":"Asia/Tashkent"},{"iata":"AZO","icao":"KAZO","name":"Kalamazoo/Battle Creek International Airport","city":"Kalamazoo","country":"US","lat":42.232105,"lng":-85.549637,"tz":"America/Detroit"},{"iata":"AZR","icao":"DAUA","name":"Touat-Cheikh Sidi Mohamed Belkebir Airport","city":"Adrar","country":"DZ","lat":27.837601,"lng":-0.186414,"tz":"Africa/Algiers"},{"iata":"AZS","icao":"MDCY","name":"Samaná El Catey International Airport","city":"Samana","country":"DO","lat":19.269259,"lng":-69.737405,"tz":"America/Santo_Domingo"},{"iata":"BAG","icao":"RPUB","name":"Loakan Airport","city":"Baguio","country":"PH","lat":16.375034,"lng":120.619949,"tz":"Asia/Manila"},{"iata":"BAH","icao":"OBBI","name":"Bahrain International Airport","city":"Manama","country":"BH","lat":26.267295,"lng":50.63764,"tz":"Asia/Tehran"},{"iata":"BAL","icao":"LTCJ","name":"Batman Airport","city":"Batman","country":"TR","lat":37.929001,"lng":41.1166,"tz":"Europe/Istanbul"},{"iata":"BAQ","icao":"SKBQ","name":"Ernesto Cortissoz International Airport","city":"Barranquilla","country":"CO","lat":10.8896,"lng":-74.7808,"tz":"America/Bogota"},{"iata":"BAR","icao":"ZJQH","name":"Qionghai Bo'ao Airport","city":"Qionghai (Basuo)","country":"CN","lat":19.140951,"lng":110.452766,"tz":"Asia/Shanghai"},{"iata":"BAV","icao":"ZBOW","name":"Baotou Donghe International Airport","city":"Baotou","country":"CN","lat":40.560001,"lng":109.997002,"tz":"Asia/Shanghai"},{"iata":"BAX","icao":"UNBB","name":"Barnaul Gherman Titov International Airport","city":"Barnaul","country":"RU","lat":53.361285,"lng":83.539701,"tz":"Asia/Barnaul"},{"iata":"BAY","icao":"LRBM","name":"Maramureș International Airport","city":"Tăuții-Măgherăuș","country":"RO","lat":47.658444,"lng":23.464445,"tz":"Europe/Bucharest"},{"iata":"BBA","icao":"SCBA","name":"Balmaceda Airport","city":"Balmaceda","country":"CL","lat":-45.915968,"lng":-71.689499,"tz":"America/Argentina/Catamarca"},{"iata":"BBI","icao":"VEBS","name":"Biju Patnaik International Airport","city":"Bhubaneswar","country":"IN","lat":20.251021,"lng":85.814747,"tz":"Asia/Kolkata"},{"iata":"BBK","icao":"FBKE","name":"Kasane International Airport","city":"Kasane","country":"BW","lat":-17.831653,"lng":25.166195,"tz":"Africa/Gaborone"},{"iata":"BBM","icao":"VDBG","name":"Battambang Airport","city":"Battambang","country":"KH","lat":13.0956,"lng":103.223999,"tz":"Asia/Phnom_Penh"},{"iata":"BBN","icao":"WBGZ","name":"Bario Airport","city":"Bario","country":"MY","lat":3.734648,"lng":115.478548,"tz":"Asia/Makassar"},{"iata":"BBO","icao":"HCMI","name":"Berbera Airport","city":"Berbera","country":"SO","lat":10.385035,"lng":44.936723,"tz":"Africa/Mogadishu"},{"iata":"BBQ","icao":"TAPB","name":"Burton-Nibbs International Airport","city":"Codrington","country":"AG","lat":17.621194,"lng":-61.798347,"tz":"America/Antigua"},{"iata":"BBU","icao":"LRBS","name":"Bucharest Băneasa Aurel Vlaicu International Airport","city":"Bucharest","country":"RO","lat":44.503133,"lng":26.102944,"tz":"Europe/Bucharest"},{"iata":"BCA","icao":"MUBA","name":"Gustavo Rizo Airport","city":"Baracoa","country":"CU","lat":20.365299,"lng":-74.506203,"tz":"America/Havana"},{"iata":"BCD","icao":"RPVB","name":"Bacolod-Silay International Airport","city":"Bacolod City","country":"PH","lat":10.776237,"lng":123.018879,"tz":"Asia/Manila"},{"iata":"BCH","icao":"WPEC","name":"Baucau Airport","city":"Baucau","country":"TL","lat":-8.486479,"lng":126.399981,"tz":"Asia/Dili"},{"iata":"BCI","icao":"YBAR","name":"Barcaldine Airport","city":"Barcaldine","country":"AU","lat":-23.566268,"lng":145.302086,"tz":"Australia/Brisbane"},{"iata":"BCM","icao":"LRBC","name":"Bacău George Enescu International Airport","city":"Bacău","country":"RO","lat":46.5219,"lng":26.910299,"tz":"Europe/Bucharest"},{"iata":"BCN","icao":"LEBL","name":"Josep Tarradellas Barcelona-El Prat Airport","city":"Barcelona","country":"ES","lat":41.2971,"lng":2.07846,"tz":"Europe/Madrid"},{"iata":"BCO","icao":"HABC","name":"Jinka Airport","city":"Jinka","country":"ET","lat":5.749655,"lng":36.560165,"tz":"Africa/Addis_Ababa"},{"iata":"BCU","icao":"DNBC","name":"Sir Abubakar Tafawa Balewa Bauchi State International Airport","city":"Bauchi","country":"NG","lat":10.482833,"lng":9.744,"tz":"Africa/Lagos"},{"iata":"BDA","icao":"TXKF","name":"L.F. Wade International Airport","city":"Hamilton","country":"BM","lat":32.363802,"lng":-64.67824,"tz":"Atlantic/Bermuda"},{"iata":"BDB","icao":"YBUD","name":"Bundaberg Airport","city":"Bundaberg","country":"AU","lat":-24.905039,"lng":152.322612,"tz":"Australia/Brisbane"},{"iata":"BDH","icao":"OIBL","name":"Bandar Lengeh International Airport","city":"Bandar Lengeh","country":"IR","lat":26.532283,"lng":54.82484,"tz":"Asia/Tehran"},{"iata":"BDJ","icao":"WAOO","name":"Syamsudin Noor International Airport","city":"Banjarbaru","country":"ID","lat":-3.440112,"lng":114.761209,"tz":"Asia/Makassar"},{"iata":"BDL","icao":"KBDL","name":"Bradley International Airport","city":"Hartford","country":"US","lat":41.938555,"lng":-72.688016,"tz":"America/New_York"},{"iata":"BDO","icao":"WICC","name":"Husein Sastranegara International Airport","city":"Bandung","country":"ID","lat":-6.90063,"lng":107.575996,"tz":"Asia/Jakarta"},{"iata":"BDQ","icao":"VABO","name":"Vadodara International Airport","city":"Vadodara","country":"IN","lat":22.336201,"lng":73.226303,"tz":"Asia/Kolkata"},{"iata":"BDS","icao":"LIBR","name":"Brindisi Airport","city":"Brindisi","country":"IT","lat":40.6576,"lng":17.947001,"tz":"Europe/Rome"},{"iata":"BDT","icao":"FZFD","name":"Gbadolite Airport","city":"Gbadolite","country":"CD","lat":4.252745,"lng":20.975271,"tz":"Africa/Bangui"},{"iata":"BDU","icao":"ENDU","name":"Bardufoss Airport","city":"Målselv","country":"NO","lat":69.055801,"lng":18.5404,"tz":"Europe/Oslo"},{"iata":"BEB","icao":"EGPL","name":"Benbecula Airport","city":"Balivanich","country":"GB","lat":57.481098,"lng":-7.36278,"tz":"Europe/London"},{"iata":"BED","icao":"KBED","name":"Laurence G Hanscom Field","city":"Bedford","country":"US","lat":42.470001,"lng":-71.289001,"tz":"America/New_York"},{"iata":"BEF","icao":"MNBL","name":"Bluefields Airport","city":"Bluefields","country":"NI","lat":11.991,"lng":-83.774101,"tz":"America/Managua"},{"iata":"BEG","icao":"LYBE","name":"Belgrade Nikola Tesla Airport","city":"Belgrade","country":"RS","lat":44.818401,"lng":20.309099,"tz":"Europe/Belgrade"},{"iata":"BEJ","icao":"WAQT","name":"Kalimarau Airport","city":"Tanjung Redeb - Borneo Island","country":"ID","lat":2.14776,"lng":117.430705,"tz":"Asia/Makassar"},{"iata":"BEK","icao":"VIBY","name":"Bareilly Air Force Station","city":"Bareilly","country":"IN","lat":28.4221,"lng":79.450798,"tz":"Asia/Kolkata"},{"iata":"BEL","icao":"SBBE","name":"Val de Cans/Júlio Cezar Ribeiro International Airport","city":"Belém","country":"BR","lat":-1.379279,"lng":-48.476207,"tz":"America/Belem"},{"iata":"BEM","icao":"GMMD","name":"Beni Mellal Airport","city":"Oulad Yaich","country":"MA","lat":32.401895,"lng":-6.315905,"tz":"Africa/Casablanca"},{"iata":"BEN","icao":"HLLB","name":"Benina International Airport","city":"Benina","country":"LY","lat":32.096802,"lng":20.269501,"tz":"Africa/Tripoli"},{"iata":"BER","icao":"EDDB","name":"Berlin Brandenburg Airport","city":"Berlin","country":"DE","lat":52.361738,"lng":13.502341,"tz":"Europe/Berlin"},{"iata":"BES","icao":"LFRB","name":"Brest Bretagne airport","city":"Brest","country":"FR","lat":48.447899,"lng":-4.41854,"tz":"Europe/Paris"},{"iata":"BET","icao":"PABE","name":"Bethel Airport","city":"Bethel","country":"US","lat":60.7798,"lng":-161.837997,"tz":"America/Nome"},{"iata":"BEU","icao":"YBIE","name":"Bedourie Airport","city":"Bedourie","country":"AU","lat":-24.3461,"lng":139.460007,"tz":"Australia/Brisbane"},{"iata":"BEW","icao":"FQBR","name":"Beira International Airport","city":"Beira","country":"MZ","lat":-19.7964,"lng":34.9076,"tz":"Africa/Maputo"},{"iata":"BEY","icao":"OLBA","name":"Beirut Rafic Hariri International Airport","city":"Beirut","country":"LB","lat":33.819833,"lng":35.487443,"tz":"Asia/Beirut"},{"iata":"BFD","icao":"KBFD","name":"Bradford Regional Airport","city":"Bradford","country":"US","lat":41.803101,"lng":-78.640099,"tz":"America/New_York"},{"iata":"BFF","icao":"KBFF","name":"Western Neb. Rgnl/William B. Heilig Airport","city":"Scottsbluff","country":"US","lat":41.874001,"lng":-103.596001,"tz":"America/Denver"},{"iata":"BFI","icao":"KBFI","name":"King County International Airport - Boeing Field","city":"Seattle","country":"US","lat":47.527042,"lng":-122.29995,"tz":"America/Los_Angeles"},{"iata":"BFJ","icao":"ZUBJ","name":"Bijie Feixiong Airport","city":"Bijie","country":"CN","lat":27.267066,"lng":105.472097,"tz":"Asia/Shanghai"},{"iata":"BFL","icao":"KBFL","name":"Meadows Field","city":"Bakersfield","country":"US","lat":35.433601,"lng":-119.056999,"tz":"America/Los_Angeles"},{"iata":"BFN","icao":"FABL","name":"Bram Fischer International Airport","city":"Bloemfontein","country":"ZA","lat":-29.092699,"lng":26.302401,"tz":"Africa/Johannesburg"},{"iata":"BFS","icao":"EGAA","name":"Belfast International Airport","city":"Belfast","country":"GB","lat":54.657501,"lng":-6.21583,"tz":"Europe/London"},{"iata":"BFV","icao":"VTUO","name":"Buri Ram Airport","city":"Buriram","country":"TH","lat":15.2295,"lng":103.252998,"tz":"Asia/Bangkok"},{"iata":"BFY","icao":"ZSBA","name":"Bengbu Tenghu Airport","city":"Bengbu","country":"CN","lat":33.166292,"lng":117.058344,"tz":"Asia/Shanghai"},{"iata":"BGA","icao":"SKBG","name":"Palonegro Airport","city":"Bucaramanga","country":"CO","lat":7.1265,"lng":-73.1848,"tz":"America/Bogota"},{"iata":"BGC","icao":"LPBG","name":"Bragança Airport","city":"Bragança","country":"PT","lat":41.8578,"lng":-6.70713,"tz":"Europe/Lisbon"},{"iata":"BGF","icao":"FEFF","name":"Bangui M'Poko International Airport","city":"Bangui","country":"CF","lat":4.39848,"lng":18.518801,"tz":"Africa/Bangui"},{"iata":"BGI","icao":"TBPB","name":"Grantley Adams International Airport","city":"Bridgetown","country":"BB","lat":13.074667,"lng":-59.491034,"tz":"America/Barbados"},{"iata":"BGM","icao":"KBGM","name":"Greater Binghamton/Edwin A Link field","city":"Binghamton","country":"US","lat":42.208698,"lng":-75.979797,"tz":"America/New_York"},{"iata":"BGO","icao":"ENBR","name":"Bergen Airport, Flesland","city":"Bergen","country":"NO","lat":60.2934,"lng":5.21814,"tz":"Europe/Oslo"},{"iata":"BGR","icao":"KBGR","name":"Bangor International Airport","city":"Bangor","country":"US","lat":44.806364,"lng":-68.826668,"tz":"America/New_York"},{"iata":"BGW","icao":"ORBI","name":"Baghdad International Airport / New Al Muthana Air Base","city":"Baghdad","country":"IQ","lat":33.262501,"lng":44.2346,"tz":"Asia/Baghdad"},{"iata":"BGY","icao":"LIME","name":"Il Caravaggio International Airport","city":"Orio al Serio (BG)","country":"IT","lat":45.669362,"lng":9.708851,"tz":"Europe/Rome"},{"iata":"BHB","icao":"KBHB","name":"Hancock County-Bar Harbor Airport","city":"Bar Harbor","country":"US","lat":44.450001,"lng":-68.361504,"tz":"America/New_York"},{"iata":"BHD","icao":"EGAC","name":"George Best Belfast City Airport","city":"Belfast","country":"GB","lat":54.618099,"lng":-5.8725,"tz":"Europe/London"},{"iata":"BHE","icao":"NZWB","name":"Woodbourne Airport","city":"Blenheim","country":"NZ","lat":-41.518299,"lng":173.869995,"tz":"Pacific/Auckland"},{"iata":"BHH","icao":"OEBH","name":"Bisha Airport","city":"Bisha","country":"SA","lat":19.9844,"lng":42.620899,"tz":"Asia/Riyadh"},{"iata":"BHI","icao":"SAZB","name":"Comandante Espora Airport","city":"Bahía Blanca","country":"AR","lat":-38.725,"lng":-62.1693,"tz":"America/Argentina/Buenos_Aires"},{"iata":"BHJ","icao":"VABJ","name":"Bhuj Airport","city":"Bhuj","country":"IN","lat":23.2878,"lng":69.670197,"tz":"Asia/Kolkata"},{"iata":"BHK","icao":"UZSB","name":"Bukhara International Airport","city":"Bukhara","country":"UZ","lat":39.775319,"lng":64.482279,"tz":"Asia/Samarkand"},{"iata":"BHM","icao":"KBHM","name":"Birmingham-Shuttlesworth International Airport","city":"Birmingham","country":"US","lat":33.562877,"lng":-86.750712,"tz":"America/Chicago"},{"iata":"BHO","icao":"VABP","name":"Raja Bhoj International Airport","city":"Bhopal","country":"IN","lat":23.2875,"lng":77.337402,"tz":"Asia/Kolkata"},{"iata":"BHQ","icao":"YBHI","name":"Broken Hill Airport","city":"Broken Hill","country":"AU","lat":-32.0014,"lng":141.472,"tz":"Australia/Broken_Hill"},{"iata":"BHS","icao":"YBTH","name":"Bathurst Airport","city":"Bathurst","country":"AU","lat":-33.406817,"lng":149.651161,"tz":"Australia/Sydney"},{"iata":"BHU","icao":"VABV","name":"Bhavnagar Airport","city":"Bhavnagar","country":"IN","lat":21.752199,"lng":72.185204,"tz":"Asia/Kolkata"},{"iata":"BHV","icao":"OPBW","name":"Bahawalpur Airport","city":"Bahawalpur","country":"PK","lat":29.348101,"lng":71.718002,"tz":"Asia/Karachi"},{"iata":"BHX","icao":"EGBB","name":"Birmingham Airport","city":"Birmingham, West Midlands","country":"GB","lat":52.453899,"lng":-1.74803,"tz":"Europe/London"},{"iata":"BHY","icao":"ZGBH","name":"Beihai Fucheng Airport","city":"Beihai","country":"CN","lat":21.538659,"lng":109.293683,"tz":"Asia/Shanghai"},{"iata":"BIA","icao":"LFKB","name":"Bastia-Poretta International airport","city":"Bastia","country":"FR","lat":42.5527,"lng":9.48373,"tz":"Europe/Paris"},{"iata":"BIH","icao":"KBIH","name":"Eastern Sierra Regional Airport","city":"Bishop","country":"US","lat":37.3731,"lng":-118.363998,"tz":"America/Los_Angeles"},{"iata":"BIK","icao":"WABB","name":"Frans Kaisiepo Airport","city":"Biak","country":"ID","lat":-1.19002,"lng":136.108002,"tz":"Asia/Jayapura"},{"iata":"BIL","icao":"KBIL","name":"Billings Logan International Airport","city":"Billings","country":"US","lat":45.808932,"lng":-108.541242,"tz":"America/Denver"},{"iata":"BIM","icao":"MYBS","name":"South Bimini Airport","city":"South Bimini","country":"BS","lat":25.6999,"lng":-79.264702,"tz":"America/Nassau"},{"iata":"BIO","icao":"LEBB","name":"Bilbao Airport","city":"Bilbao","country":"ES","lat":43.301102,"lng":-2.91061,"tz":"Europe/Madrid"},{"iata":"BIQ","icao":"LFBZ","name":"Biarritz Pays Basque airport","city":"Biarritz","country":"FR","lat":43.468372,"lng":-1.523223,"tz":"Europe/Paris"},{"iata":"BIR","icao":"VNVT","name":"Biratnagar Airport","city":"Biratnagar","country":"NP","lat":26.481501,"lng":87.264,"tz":"Asia/Kathmandu"},{"iata":"BIS","icao":"KBIS","name":"Bismarck Municipal Airport","city":"Bismarck","country":"US","lat":46.772734,"lng":-100.746874,"tz":"America/Chicago"},{"iata":"BJA","icao":"DAAE","name":"Soummam–Abane Ramdane Airport","city":"Béjaïa","country":"DZ","lat":36.712547,"lng":5.069909,"tz":"Africa/Algiers"},{"iata":"BJB","icao":"OIMN","name":"Bojnord Airport","city":"Bojnord","country":"IR","lat":37.493,"lng":57.308201,"tz":"Asia/Tehran"},{"iata":"BJC","icao":"KBJC","name":"Rocky Mountain Metropolitan Airport","city":"Denver","country":"US","lat":39.908798,"lng":-105.116997,"tz":"America/Denver"},{"iata":"BJF","icao":"ENBS","name":"Båtsfjord Airport","city":"Båtsfjord","country":"NO","lat":70.60025,"lng":29.692612,"tz":"Europe/Oslo"},{"iata":"BJL","icao":"GBYD","name":"Banjul International Airport","city":"Yundum","country":"GM","lat":13.338,"lng":-16.652201,"tz":"Africa/Banjul"},{"iata":"BJM","icao":"HBBA","name":"Bujumbura Melchior Ndadaye International Airport","city":"Bujumbura","country":"BI","lat":-3.32402,"lng":29.318501,"tz":"Africa/Bujumbura"},{"iata":"BJR","icao":"HABD","name":"Bahir Dar Airport","city":"Bahir Dar","country":"ET","lat":11.6081,"lng":37.321602,"tz":"Africa/Addis_Ababa"},{"iata":"BJV","icao":"LTFE","name":"Milas Bodrum International Airport","city":"Bodrum","country":"TR","lat":37.249314,"lng":27.66401,"tz":"Europe/Istanbul"},{"iata":"BJX","icao":"MMLO","name":"Guanajuato International Airport","city":"Silao","country":"MX","lat":20.992695,"lng":-101.480284,"tz":"America/Mexico_City"},{"iata":"BJZ","icao":"LEBZ","name":"Badajoz Airport","city":"Badajoz","country":"ES","lat":38.8913,"lng":-6.82133,"tz":"Europe/Madrid"},{"iata":"BKG","icao":"KBBG","name":"Branson Airport","city":"Branson","country":"US","lat":36.532082,"lng":-93.200544,"tz":"America/Chicago"},{"iata":"BKI","icao":"WBKK","name":"Kota Kinabalu International Airport","city":"Kota Kinabalu","country":"MY","lat":5.932743,"lng":116.049324,"tz":"Asia/Kuching"},{"iata":"BKK","icao":"VTBS","name":"Suvarnabhumi Airport","city":"Bangkok","country":"TH","lat":13.6811,"lng":100.747002,"tz":"Asia/Bangkok"},{"iata":"BKN","icao":"UTAN","name":"Balkanabat International Airport","city":"Balkanabat","country":"TM","lat":39.681052,"lng":54.206008,"tz":"Asia/Ashgabat"},{"iata":"BKO","icao":"GABS","name":"Modibo Keita International Airport","city":"Bamako","country":"ML","lat":12.5335,"lng":-7.94994,"tz":"Africa/Bamako"},{"iata":"BKQ","icao":"YBCK","name":"Blackall Airport","city":"Blackall","country":"AU","lat":-24.431678,"lng":145.429716,"tz":"Australia/Brisbane"},{"iata":"BKS","icao":"WIGG","name":"Fatmawati Soekarno Airport","city":"Bengkulu","country":"ID","lat":-3.8637,"lng":102.338997,"tz":"Asia/Jakarta"},{"iata":"BKW","icao":"KBKW","name":"Raleigh County Memorial Airport","city":"Beaver","country":"US","lat":37.7873,"lng":-81.124199,"tz":"America/New_York"},{"iata":"BLA","icao":"SVBC","name":"General José Antonio Anzoategui International Airport","city":"Barcelona","country":"VE","lat":10.111111,"lng":-64.692222,"tz":"America/Caracas"},{"iata":"BLD","icao":null,"name":"Boulder City Municipal Airport","city":"Boulder City","country":"US","lat":35.947161,"lng":-114.858799,"tz":"America/Los_Angeles"},{"iata":"BLE","icao":"ESSD","name":"Dala Airport","city":"Borlange","country":"SE","lat":60.422001,"lng":15.5152,"tz":"Europe/Stockholm"},{"iata":"BLI","icao":"KBLI","name":"Bellingham International Airport","city":"Bellingham","country":"US","lat":48.792801,"lng":-122.538002,"tz":"America/Los_Angeles"},{"iata":"BLJ","icao":"DABT","name":"Batna Mostefa Ben Boulaid Airport","city":"Batna","country":"DZ","lat":35.752102,"lng":6.30859,"tz":"Africa/Algiers"},{"iata":"BLL","icao":"EKBI","name":"Billund Airport","city":"Billund","country":"DK","lat":55.740335,"lng":9.157019,"tz":"Europe/Copenhagen"},{"iata":"BLQ","icao":"LIPE","name":"Bologna Guglielmo Marconi Airport","city":"Bologna","country":"IT","lat":44.5354,"lng":11.2887,"tz":"Europe/Rome"},{"iata":"BLR","icao":"VOBL","name":"Kempegowda International Airport Bengaluru","city":"Bengaluru","country":"IN","lat":13.1979,"lng":77.706299,"tz":"Asia/Kolkata"},{"iata":"BLV","icao":"KBLV","name":"Scott AFB/Midamerica Airport","city":"Belleville","country":"US","lat":38.5452,"lng":-89.835197,"tz":"America/Chicago"},{"iata":"BLZ","icao":"FWCL","name":"Chileka International Airport","city":"Blantyre","country":"MW","lat":-15.677189,"lng":34.972319,"tz":"Africa/Blantyre"},{"iata":"BMA","icao":"ESSB","name":"Stockholm-Bromma Airport","city":"Stockholm","country":"SE","lat":59.354401,"lng":17.9417,"tz":"Europe/Stockholm"},{"iata":"BME","icao":"YBRM","name":"Broome International Airport","city":"Broome","country":"AU","lat":-17.949194,"lng":122.2283,"tz":"Australia/Perth"},{"iata":"BMI","icao":"KBMI","name":"Central Illinois Regional Airport at Bloomington-Normal","city":"Bloomington/Normal","country":"US","lat":40.4771,"lng":-88.915901,"tz":"America/Chicago"},{"iata":"BMU","icao":"WADB","name":"Sultan Muhammad Salahuddin Airport","city":"Bima","country":"ID","lat":-8.537184,"lng":118.685002,"tz":"Asia/Makassar"},{"iata":"BMV","icao":"VVBM","name":"Buon Ma Thuot Airport","city":"Buon Ma Thuot","country":"VN","lat":12.6683,"lng":108.120003,"tz":"Asia/Ho_Chi_Minh"},{"iata":"BNA","icao":"KBNA","name":"Nashville International Airport","city":"Nashville","country":"US","lat":36.1245,"lng":-86.6782,"tz":"America/Chicago"},{"iata":"BND","icao":"OIKB","name":"Bandar Abbas International Airport","city":"Bandar Abbas","country":"IR","lat":27.2183,"lng":56.3778,"tz":"Asia/Tehran"},{"iata":"BNE","icao":"YBBN","name":"Brisbane International Airport","city":"Brisbane","country":"AU","lat":-27.384199,"lng":153.117004,"tz":"Australia/Brisbane"},{"iata":"BNI","icao":"DNBE","name":"Benin Airport","city":"Benin","country":"NG","lat":6.31698,"lng":5.5995,"tz":"Africa/Lagos"},{"iata":"BNK","icao":"YBNA","name":"Ballina Byron Gateway Airport","city":"Ballina","country":"AU","lat":-28.833236,"lng":153.561471,"tz":"Australia/Sydney"},{"iata":"BNN","icao":"ENBN","name":"Brønnøysund Airport, Brønnøy","city":"Brønnøy","country":"NO","lat":65.461098,"lng":12.2175,"tz":"Europe/Oslo"},{"iata":"BNS","icao":"SVBI","name":"Barinas Airport","city":"Barinas","country":"VE","lat":8.615,"lng":-70.214167,"tz":"America/Caracas"},{"iata":"BNX","icao":"LQBK","name":"Banja Luka International Airport","city":"Mahovljani","country":"BA","lat":44.941399,"lng":17.297501,"tz":"Europe/Sarajevo"},{"iata":"BOB","icao":"NTTB","name":"Bora Bora Airport","city":"Motu Mute","country":"PF","lat":-16.444401,"lng":-151.751007,"tz":"Pacific/Tahiti"},{"iata":"BOC","icao":"MPBO","name":"Bocas del Toro \"Isla Colón\" International Airport","city":"Isla Colón","country":"PA","lat":9.34085,"lng":-82.250801,"tz":"America/Panama"},{"iata":"BOD","icao":"LFBD","name":"Bordeaux–Mérignac Airport","city":"Bordeaux","country":"FR","lat":44.82865,"lng":-0.715356,"tz":"Europe/Paris"},{"iata":"BOG","icao":"SKBO","name":"El Dorado International Airport","city":"Bogota","country":"CO","lat":4.70159,"lng":-74.1469,"tz":"America/Bogota"},{"iata":"BOH","icao":"EGHH","name":"Bournemouth Airport","city":"Bournemouth","country":"GB","lat":50.780483,"lng":-1.839576,"tz":"Europe/London"},{"iata":"BOI","icao":"KBOI","name":"Boise Air Terminal/Gowen Field","city":"Boise","country":"US","lat":43.5644,"lng":-116.223,"tz":"America/Boise"},{"iata":"BOJ","icao":"LBBG","name":"Burgas Airport","city":"Burgas","country":"BG","lat":42.569917,"lng":27.515173,"tz":"Europe/Sofia"},{"iata":"BOM","icao":"VABB","name":"Chhatrapati Shivaji Maharaj International Airport","city":"Mumbai","country":"IN","lat":19.088699,"lng":72.867897,"tz":"Asia/Kolkata"},{"iata":"BON","icao":"TNCB","name":"Flamingo International Airport","city":"Kralendijk","country":"BQ","lat":12.131,"lng":-68.268501,"tz":"America/Caracas"},{"iata":"BOO","icao":"ENBO","name":"Bodø Airport","city":"Bodø","country":"NO","lat":67.269203,"lng":14.3653,"tz":"Europe/Oslo"},{"iata":"BOR","icao":"VLBK","name":"Bokeo International Airport","city":"Ton Phueng","country":"LA","lat":20.323986,"lng":100.165392,"tz":"Asia/Bangkok"},{"iata":"BOS","icao":"KBOS","name":"Boston Logan International Airport","city":"Boston","country":"US","lat":42.36197,"lng":-71.0079,"tz":"America/New_York"},{"iata":"BOY","icao":"DFOO","name":"Bobo Dioulasso Airport","city":"Bobo Dioulasso","country":"BF","lat":11.1601,"lng":-4.33097,"tz":"Africa/Ouagadougou"},{"iata":"BPE","icao":"ZBDH","name":"Qinhuangdao Beidaihe Airport","city":"Qinhuangdao (Changli)","country":"CN","lat":39.666384,"lng":119.061384,"tz":"Asia/Shanghai"},{"iata":"BPL","icao":"ZWBL","name":"Bole Alashankou Airport","city":"Bole","country":"CN","lat":44.895461,"lng":82.30007,"tz":"Asia/Urumqi"},{"iata":"BPN","icao":"WALL","name":"Sultan Aji Muhammad Sulaiman Sepinggan International Airport","city":"Balikpapan","country":"ID","lat":-1.268342,"lng":116.89452,"tz":"Asia/Makassar"},{"iata":"BPS","icao":"SBPS","name":"Porto Seguro International Airport","city":"Porto Seguro","country":"BR","lat":-16.438426,"lng":-39.080584,"tz":"America/Bahia"},{"iata":"BPT","icao":"KBPT","name":"Jack Brooks Regional Airport","city":"Beaumont/Port Arthur","country":"US","lat":29.9508,"lng":-94.020699,"tz":"America/Chicago"},{"iata":"BPX","icao":"ZUBD","name":"Qamdo Bangda Airport","city":"Bangda","country":"CN","lat":30.5536,"lng":97.108299,"tz":"Asia/Shanghai"},{"iata":"BPY","icao":"FMNQ","name":"Besalampy Airport","city":"Besalampy","country":"MG","lat":-16.74453,"lng":44.482484,"tz":"Indian/Antananarivo"},{"iata":"BQK","icao":"KBQK","name":"Brunswick Golden Isles Airport","city":"Brunswick","country":"US","lat":31.258801,"lng":-81.466499,"tz":"America/New_York"},{"iata":"BQL","icao":"YBOU","name":"Boulia Airport","city":"","country":"AU","lat":-22.9133,"lng":139.899994,"tz":"Australia/Brisbane"},{"iata":"BQN","icao":"TJBQ","name":"Rafael Hernández International Airport","city":"Aguadilla","country":"PR","lat":18.4949,"lng":-67.129402,"tz":"America/Puerto_Rico"},{"iata":"BQS","icao":"UHBB","name":"Ignatyevo Airport","city":"Blagoveschensk","country":"RU","lat":50.4254,"lng":127.412003,"tz":"Asia/Yakutsk"},{"iata":"BQT","icao":"UMBB","name":"Brest International Airport","city":"Brest","country":"BY","lat":52.108138,"lng":23.89676,"tz":"Europe/Minsk"},{"iata":"BQU","icao":"TVSB","name":"J F Mitchell Airport","city":"Bequia","country":"VC","lat":12.9884,"lng":-61.262001,"tz":"America/Grenada"},{"iata":"BRC","icao":"SAZS","name":"Teniente Luis Candelaria International Airport","city":"San Carlos de Bariloche","country":"AR","lat":-41.151199,"lng":-71.157501,"tz":"America/Argentina/Salta"},{"iata":"BRD","icao":"KBRD","name":"Brainerd Lakes Regional Airport","city":"Brainerd","country":"US","lat":46.402861,"lng":-94.129727,"tz":"America/Chicago"},{"iata":"BRE","icao":"EDDW","name":"Bremen Airport","city":"Bremen","country":"DE","lat":53.046786,"lng":8.78932,"tz":"Europe/Berlin"},{"iata":"BRI","icao":"LIBD","name":"Bari Karol Wojtyła International Airport","city":"Bari","country":"IT","lat":41.138901,"lng":16.760599,"tz":"Europe/Rome"},{"iata":"BRK","icao":"YBKE","name":"Bourke Airport","city":"","country":"AU","lat":-30.0392,"lng":145.951996,"tz":"Australia/Sydney"},{"iata":"BRL","icao":"KBRL","name":"Southeast Iowa Regional Airport","city":"Burlington","country":"US","lat":40.783199,"lng":-91.125504,"tz":"America/Chicago"},{"iata":"BRM","icao":"SVBM","name":"Jacinto Lara International Airport","city":"Barquisimeto","country":"VE","lat":10.042747,"lng":-69.35862,"tz":"America/Caracas"},{"iata":"BRN","icao":"LSZB","name":"Bern Airport","city":"Bern","country":"CH","lat":46.912736,"lng":7.498819,"tz":"Europe/Zurich"},{"iata":"BRO","icao":"KBRO","name":"Brownsville South Padre Island International Airport","city":"Brownsville","country":"US","lat":25.907238,"lng":-97.425235,"tz":"America/Chicago"},{"iata":"BRQ","icao":"LKTB","name":"Brno-Tuřany Airport","city":"Brno","country":"CZ","lat":49.151276,"lng":16.693972,"tz":"Europe/Prague"},{"iata":"BRR","icao":"EGPR","name":"Barra Airport","city":"Eoligarry","country":"GB","lat":57.0228,"lng":-7.44306,"tz":"Europe/London"},{"iata":"BRS","icao":"EGGD","name":"Bristol Airport","city":"Bristol","country":"GB","lat":51.382326,"lng":-2.716453,"tz":"Europe/London"},{"iata":"BRU","icao":"EBBR","name":"Brussels Airport","city":"Zaventem","country":"BE","lat":50.901402,"lng":4.48444,"tz":"Europe/Brussels"},{"iata":"BRW","icao":"PABR","name":"Wiley Post Will Rogers Memorial Airport","city":"Utqiaġvik","country":"US","lat":71.285402,"lng":-156.766008,"tz":"America/Anchorage"},{"iata":"BRX","icao":"MDBH","name":"Maria Montez International Airport","city":"Barahona","country":"DO","lat":18.251499,"lng":-71.120399,"tz":"America/Santo_Domingo"},{"iata":"BSA","icao":"HCMF","name":"Bender Qassim International Airport","city":"Bosaso","country":"SO","lat":11.275235,"lng":49.139231,"tz":"Africa/Mogadishu"},{"iata":"BSB","icao":"SBBR","name":"Presidente Juscelino Kubitschek International Airport","city":"Brasília","country":"BR","lat":-15.869167,"lng":-47.920834,"tz":"America/Sao_Paulo"},{"iata":"BSC","icao":"SKBS","name":"José Celestino Mutis Airport","city":"Bahía Solano","country":"CO","lat":6.20292,"lng":-77.3947,"tz":"America/Bogota"},{"iata":"BSD","icao":"ZPBS","name":"Baoshan Yunrui Airport","city":"Baoshan (Longyang)","country":"CN","lat":25.053301,"lng":99.168297,"tz":"Asia/Shanghai"},{"iata":"BSG","icao":"FGBT","name":"Bata International Airport","city":"Bata","country":"GQ","lat":1.90547,"lng":9.80568,"tz":"Africa/Douala"},{"iata":"BSK","icao":"DAUB","name":"Biskra - Mohamed Khider Airport","city":"Biskra","country":"DZ","lat":34.79318,"lng":5.738899,"tz":"Africa/Algiers"},{"iata":"BSL","icao":"LFSB","name":"EuroAirport Basel–Mulhouse–Freiburg","city":"Bâle / Mulhouse","country":"FR","lat":47.60068,"lng":7.521117,"tz":"Europe/Paris"},{"iata":"BSO","icao":"RPUO","name":"Basco Airport","city":"Basco","country":"PH","lat":20.4513,"lng":121.980003,"tz":"Asia/Manila"},{"iata":"BSR","icao":"ORMM","name":"Basra International Airport","city":"Basra","country":"IQ","lat":30.549101,"lng":47.662102,"tz":"Asia/Baghdad"},{"iata":"BSZ","icao":"UCFM","name":"Manas International Airport","city":"Bishkek","country":"KG","lat":43.061298,"lng":74.4776,"tz":"Asia/Bishkek"},{"iata":"BTC","icao":"VCCB","name":"Batticaloa International Airport","city":"Batticaloa","country":"LK","lat":7.705073,"lng":81.677163,"tz":"Asia/Colombo"},{"iata":"BTH","icao":"WIDD","name":"Hang Nadim International Airport","city":"Batam","country":"ID","lat":1.12103,"lng":104.119003,"tz":"Asia/Jakarta"},{"iata":"BTI","icao":"PABA","name":"Barter Island Long Range Radar Station Airport","city":"Barter Island","country":"US","lat":70.134003,"lng":-143.582001,"tz":"America/Anchorage"},{"iata":"BTJ","icao":"WITT","name":"Sultan Iskandar Muda International Airport","city":"Banda Aceh","country":"ID","lat":5.525087,"lng":95.41997,"tz":"Asia/Jakarta"},{"iata":"BTK","icao":"UIBB","name":"Bratsk Airport","city":"Bratsk","country":"RU","lat":56.3696,"lng":101.701822,"tz":"Asia/Irkutsk"},{"iata":"BTM","icao":"KBTM","name":"Bert Mooney Airport","city":"Butte","country":"US","lat":45.9548,"lng":-112.497002,"tz":"America/Denver"},{"iata":"BTR","icao":"KBTR","name":"Baton Rouge Metropolitan Airport","city":"Baton Rouge","country":"US","lat":30.533199,"lng":-91.149597,"tz":"America/Chicago"},{"iata":"BTS","icao":"LZIB","name":"M. R. Štefánik Airport","city":"Bratislava","country":"SK","lat":48.1702,"lng":17.2127,"tz":"Europe/Bratislava"},{"iata":"BTU","icao":"WBGB","name":"Bintulu Airport","city":"Bintulu","country":"MY","lat":3.12385,"lng":113.019997,"tz":"Asia/Kuching"},{"iata":"BTV","icao":"KBTV","name":"Patrick Leahy Burlington International Airport","city":"Burlington","country":"US","lat":44.471901,"lng":-73.153297,"tz":"America/New_York"},{"iata":"BUA","icao":"AYBK","name":"Buka Airport","city":"Buka Island","country":"PG","lat":-5.422299,"lng":154.672698,"tz":"Pacific/Bougainville"},{"iata":"BUD","icao":"LHBP","name":"Budapest Liszt Ferenc International Airport","city":"Budapest","country":"HU","lat":47.43018,"lng":19.262393,"tz":"Europe/Budapest"},{"iata":"BUF","icao":"KBUF","name":"Buffalo Niagara International Airport","city":"Buffalo","country":"US","lat":42.940498,"lng":-78.732201,"tz":"America/New_York"},{"iata":"BUN","icao":"SKBU","name":"Gerardo Tobar López Airport","city":"Buenaventura","country":"CO","lat":3.81963,"lng":-76.9898,"tz":"America/Bogota"},{"iata":"BUQ","icao":"FVJN","name":"Joshua Mqabuko Nkomo International Airport","city":"Bulawayo","country":"ZW","lat":-20.016284,"lng":28.622897,"tz":"Africa/Harare"},{"iata":"BUR","icao":"KBUR","name":"Hollywood Burbank/Bob Hope Airport","city":"Burbank","country":"US","lat":34.202834,"lng":-118.35805,"tz":"America/Los_Angeles"},{"iata":"BUS","icao":"UGSB","name":"Alexander Kartveli Batumi International Airport","city":"Batumi","country":"GE","lat":41.60939,"lng":41.600315,"tz":"Asia/Tbilisi"},{"iata":"BUX","icao":"FZKA","name":"Bunia Airport","city":"Bunia","country":"CD","lat":1.565743,"lng":30.220685,"tz":"Africa/Lubumbashi"},{"iata":"BUZ","icao":"OIBB","name":"Bushehr Airport","city":"Bushehr","country":"IR","lat":28.944799,"lng":50.834599,"tz":"Asia/Tehran"},{"iata":"BVA","icao":"LFOB","name":"Beauvais-Tillé airport","city":"Beauvais","country":"FR","lat":49.454399,"lng":2.11278,"tz":"Europe/Paris"},{"iata":"BVB","icao":"SBBV","name":"Atlas Brasil Cantanhede International Airport","city":"Boa Vista","country":"BR","lat":2.84615,"lng":-60.690648,"tz":"America/Boa_Vista"},{"iata":"BVC","icao":"GVBA","name":"Aristides Pereira International Airport","city":"Rabil","country":"CV","lat":16.136499,"lng":-22.888901,"tz":"Atlantic/Cape_Verde"},{"iata":"BVE","icao":"LFSL","name":"Brive Souillac airport","city":"Brive","country":"FR","lat":45.039722,"lng":1.485556,"tz":"Europe/Paris"},{"iata":"BVG","icao":"ENBV","name":"Berlevåg Airport","city":"Berlevåg","country":"NO","lat":70.871517,"lng":29.034097,"tz":"Europe/Oslo"},{"iata":"BVH","icao":"SBVH","name":"Brigadeiro Camarão Airport","city":"Vilhena","country":"BR","lat":-12.6944,"lng":-60.098301,"tz":"America/Porto_Velho"},{"iata":"BVI","icao":"YBDV","name":"Birdsville Airport","city":"","country":"AU","lat":-25.897499,"lng":139.348007,"tz":"Australia/Brisbane"},{"iata":"BVJ","icao":"USDB","name":"Bovanenkovo Airport","city":"Bovanenkovo","country":"RU","lat":70.315278,"lng":68.333611,"tz":"Asia/Yekaterinburg"},{"iata":"BWA","icao":"VNBW","name":"Gautam Buddha International Airport","city":"Siddharthanagar (Bhairahawa)","country":"NP","lat":27.504636,"lng":83.410381,"tz":"Asia/Kathmandu"},{"iata":"BWI","icao":"KBWI","name":"Baltimore/Washington International Thurgood Marshall Airport","city":"Baltimore","country":"US","lat":39.1754,"lng":-76.668297,"tz":"America/New_York"},{"iata":"BWK","icao":"LDSB","name":"Brač Airport","city":"Gornji Humac","country":"HR","lat":43.284454,"lng":16.678362,"tz":"Europe/Zagreb"},{"iata":"BWN","icao":"WBSB","name":"Brunei International Airport","city":"Bandar Seri Begawan","country":"BN","lat":4.9442,"lng":114.928001,"tz":"Asia/Brunei"},{"iata":"BWO","icao":"UWSB","name":"Balakovo Airport","city":"Balakovo","country":"RU","lat":51.858299,"lng":47.745602,"tz":"Europe/Saratov"},{"iata":"BWT","icao":"YWYY","name":"Wynyard Airport","city":"Burnie","country":"AU","lat":-40.997039,"lng":145.726,"tz":"Australia/Hobart"},{"iata":"BXH","icao":"UAAH","name":"Balkhash Airport","city":"Balkhash","country":"KZ","lat":46.894246,"lng":75.004533,"tz":"Asia/Almaty"},{"iata":"BXR","icao":"OIKM","name":"Bam Airport","city":"Bam","country":"IR","lat":29.0842,"lng":58.450001,"tz":"Asia/Tehran"},{"iata":"BXU","icao":"RPME","name":"Bancasi Airport","city":"Butuan","country":"PH","lat":8.9515,"lng":125.4788,"tz":"Asia/Manila"},{"iata":"BXY","icao":"UAOL","name":"Baikonur Krayniy International Airport","city":"Baikonur","country":"KZ","lat":45.621994,"lng":63.210773,"tz":"Asia/Qyzylorda"},{"iata":"BYK","icao":"DIBK","name":"Bouaké Airport","city":"Bouaké","country":"CI","lat":7.7388,"lng":-5.07367,"tz":"Africa/Abidjan"},{"iata":"BYM","icao":"MUBY","name":"Carlos Manuel de Cespedes Airport","city":"Bayamo","country":"CU","lat":20.3964,"lng":-76.621399,"tz":"America/Havana"},{"iata":"BYN","icao":"ZMBH","name":"Bayankhongor Airport","city":"Bayankhongor","country":"MN","lat":46.1633,"lng":100.704002,"tz":"Asia/Ulaanbaatar"},{"iata":"BZE","icao":"MZBZ","name":"Philip S. W. Goldson International Airport","city":"Belize City","country":"BZ","lat":17.539951,"lng":-88.303556,"tz":"America/Belize"},{"iata":"BZG","icao":"EPBY","name":"Ignacy Jan Paderewski Bydgoszcz Airport","city":"Bydgoszcz","country":"PL","lat":53.096802,"lng":17.977699,"tz":"Europe/Warsaw"},{"iata":"BZI","icao":"LTBF","name":"Balıkesir Airport","city":"Balıkesir","country":"TR","lat":39.619301,"lng":27.926001,"tz":"Europe/Istanbul"},{"iata":"BZK","icao":"UUBP","name":"Bryansk International Airport","city":"Bryansk","country":"RU","lat":53.214403,"lng":34.175965,"tz":"Europe/Moscow"},{"iata":"BZL","icao":"VGBR","name":"Barisal Airport","city":"Barisal","country":"BD","lat":22.801001,"lng":90.301201,"tz":"Asia/Dhaka"},{"iata":"BZN","icao":"KBZN","name":"Bozeman Yellowstone International Airport","city":"Bozeman","country":"US","lat":45.778853,"lng":-111.153711,"tz":"America/Denver"},{"iata":"BZO","icao":"LIPB","name":"Bolzano Airport","city":"Bolzano (BZ)","country":"IT","lat":46.459245,"lng":11.326125,"tz":"Europe/Rome"},{"iata":"BZR","icao":"LFMU","name":"Béziers Vias airport","city":"Béziers","country":"FR","lat":43.323502,"lng":3.3539,"tz":"Europe/Paris"},{"iata":"BZV","icao":"FCBB","name":"Maya-Maya International Airport","city":"Brazzaville","country":"CG","lat":-4.2517,"lng":15.253,"tz":"Africa/Brazzaville"},{"iata":"BZX","icao":"ZUBZ","name":"Bazhong Enyang Airport","city":"Bazhong","country":"CN","lat":31.73842,"lng":106.644872,"tz":"Asia/Shanghai"},{"iata":"CAB","icao":"FNCA","name":"Cabinda Airport","city":"Cabinda","country":"AO","lat":-5.59839,"lng":12.188145,"tz":"Africa/Luanda"},{"iata":"CAC","icao":"SBCA","name":"Coronel Adalberto Mendes da Silva Airport","city":"Cascavel","country":"BR","lat":-25.000323,"lng":-53.501208,"tz":"America/Sao_Paulo"},{"iata":"CAE","icao":"KCAE","name":"Columbia Metropolitan Airport","city":"Columbia","country":"US","lat":33.938172,"lng":-81.123022,"tz":"America/New_York"},{"iata":"CAG","icao":"LIEE","name":"Cagliari Elmas Airport","city":"Cagliari","country":"IT","lat":39.251499,"lng":9.05428,"tz":"Europe/Rome"},{"iata":"CAH","icao":"VVCM","name":"Cà Mau Airport","city":"Ca Mau City","country":"VN","lat":9.177667,"lng":105.177778,"tz":"Asia/Ho_Chi_Minh"},{"iata":"CAI","icao":"HECA","name":"Cairo International Airport","city":"Cairo","country":"EG","lat":30.111534,"lng":31.396694,"tz":"Africa/Cairo"},{"iata":"CAJ","icao":"SVCN","name":"Canaima Airport","city":"Canaima","country":"VE","lat":6.231989,"lng":-62.85485,"tz":"America/Caracas"},{"iata":"CAK","icao":"KCAK","name":"Akron Canton Regional Airport","city":"Akron","country":"US","lat":40.9161,"lng":-81.4422,"tz":"America/New_York"},{"iata":"CAL","icao":"EGEC","name":"Campbeltown Airport","city":"Campbeltown","country":"GB","lat":55.437199,"lng":-5.68639,"tz":"Europe/London"},{"iata":"CAN","icao":"ZGGG","name":"Guangzhou Baiyun International Airport","city":"Guangzhou (Huadu)","country":"CN","lat":23.392401,"lng":113.299004,"tz":"Asia/Shanghai"},{"iata":"CAP","icao":"MTCH","name":"Cap Haitien International Airport","city":"Cap Haitien","country":"HT","lat":19.725547,"lng":-72.20071,"tz":"America/Port-au-Prince"},{"iata":"CAT","icao":"LPCS","name":"Cascais Airport","city":"Cascais","country":"PT","lat":38.724998,"lng":-9.35523,"tz":"Europe/Lisbon"},{"iata":"CAW","icao":"SBCP","name":"Bartolomeu Lisandro Airport","city":"Campos dos Goytacazes","country":"BR","lat":-21.698299,"lng":-41.301701,"tz":"America/Sao_Paulo"},{"iata":"CAY","icao":"SOCA","name":"Cayenne – Félix Eboué Airport","city":"Matoury","country":"GF","lat":4.819964,"lng":-52.361326,"tz":"America/Cayenne"},{"iata":"CAZ","icao":"YCBA","name":"Cobar Airport","city":"","country":"AU","lat":-31.5383,"lng":145.794006,"tz":"Australia/Sydney"},{"iata":"CBB","icao":"SLCB","name":"Jorge Wilsterman International Airport","city":"Cochabamba","country":"BO","lat":-17.421105,"lng":-66.177102,"tz":"America/La_Paz"},{"iata":"CBH","icao":"DAOR","name":"Béchar Boudghene Ben Ali Lotfi Airport","city":"Béchar","country":"DZ","lat":31.6457,"lng":-2.26986,"tz":"Africa/Algiers"},{"iata":"CBO","icao":"RPMC","name":"Cotabato (Awang) Airport","city":"Datu Odin Sinsuat","country":"PH","lat":7.164753,"lng":124.209938,"tz":"Asia/Manila"},{"iata":"CBQ","icao":"DNCA","name":"Margaret Ekpo International Airport","city":"Calabar","country":"NG","lat":4.97602,"lng":8.3472,"tz":"Africa/Lagos"},{"iata":"CBR","icao":"YSCB","name":"Canberra Airport","city":"Canberra","country":"AU","lat":-35.3069,"lng":149.195007,"tz":"Australia/Sydney"},{"iata":"CBT","icao":"FNCT","name":"Catumbela Airport","city":"Catumbela","country":"AO","lat":-12.4792,"lng":13.4869,"tz":"Africa/Luanda"},{"iata":"CCC","icao":"MUCC","name":"Jardines Del Rey Airport","city":"Cayo Coco","country":"CU","lat":22.461,"lng":-78.3284,"tz":"America/Havana"},{"iata":"CCE","icao":"HECP","name":"Capital International Airport","city":"New Cairo","country":"EG","lat":30.06465,"lng":31.839974,"tz":"Africa/Cairo"},{"iata":"CCF","icao":"LFMK","name":"Carcassonne Salvaza Airport","city":"Carcassonne","country":"FR","lat":43.216,"lng":2.30632,"tz":"Europe/Paris"},{"iata":"CCJ","icao":"VOCL","name":"Calicut International Airport","city":"Calicut","country":"IN","lat":11.135996,"lng":75.955152,"tz":"Asia/Kolkata"},{"iata":"CCK","icao":"YPCC","name":"Cocos (Keeling) Islands Airport","city":"West Island","country":"CC","lat":-12.192218,"lng":96.834103,"tz":"Indian/Cocos"},{"iata":"CCM","icao":null,"name":"Forquilhinha - Criciúma Airport","city":"Criciúma","country":"BR","lat":-28.725743,"lng":-49.424475,"tz":"America/Sao_Paulo"},{"iata":"CCP","icao":"SCIE","name":"Carriel Sur International Airport","city":"Concepcion","country":"CL","lat":-36.77235,"lng":-73.062828,"tz":"America/Santiago"},{"iata":"CCR","icao":"KCCR","name":"Buchanan Field","city":"Concord","country":"US","lat":37.9897,"lng":-122.056999,"tz":"America/Los_Angeles"},{"iata":"CCS","icao":"SVMI","name":"Maiquetía Simón Bolívar International Airport","city":"Maiquetía","country":"VE","lat":10.602214,"lng":-66.991174,"tz":"America/Caracas"},{"iata":"CCU","icao":"VECC","name":"Netaji Subhash Chandra Bose International Airport","city":"Kolkata","country":"IN","lat":22.654012,"lng":88.44765,"tz":"Asia/Kolkata"},{"iata":"CCZ","icao":"MYBC","name":"Chub Cay Airport","city":"Chub Cay","country":"BS","lat":25.417101,"lng":-77.880898,"tz":"America/Nassau"},{"iata":"CDB","icao":"PACD","name":"Cold Bay Airport","city":"Cold Bay","country":"US","lat":55.207871,"lng":-162.725029,"tz":"America/Nome"},{"iata":"CDC","icao":"KCDC","name":"Cedar City Regional Airport","city":"Cedar City","country":"US","lat":37.701,"lng":-113.098999,"tz":"America/Denver"},{"iata":"CDE","icao":"ZBCD","name":"Chengde Puning Airport","city":"Chengde","country":"CN","lat":41.1225,"lng":118.073889,"tz":"Asia/Shanghai"},{"iata":"CDG","icao":"LFPG","name":"Charles de Gaulle International Airport","city":"Paris (Roissy-en-France, Val-d'Oise)","country":"FR","lat":49.00896,"lng":2.554117,"tz":"Europe/Paris"},{"iata":"CDP","icao":"VOCP","name":"Kadapa Airport","city":"Kadapa","country":"IN","lat":14.513154,"lng":78.769183,"tz":"Asia/Kolkata"},{"iata":"CDR","icao":"KCDR","name":"Chadron Municipal Airport","city":"Chadron","country":"US","lat":42.837601,"lng":-103.095001,"tz":"America/Denver"},{"iata":"CDT","icao":"LECH","name":"Castellón-Costa Azahar Airport","city":"Castellón de la Plana","country":"ES","lat":40.213889,"lng":0.073333,"tz":"Europe/Madrid"},{"iata":"CDV","icao":"PACV","name":"Merle K (Mudhole) Smith Airport","city":"Cordova","country":"US","lat":60.491798,"lng":-145.477997,"tz":"America/Anchorage"},{"iata":"CEB","icao":"RPVM","name":"Mactan Cebu International Airport","city":"Cebu City/Lapu-Lapu City","country":"PH","lat":10.309261,"lng":123.97974,"tz":"Asia/Manila"},{"iata":"CEC","icao":"KCEC","name":"Jack Mc Namara Field Airport","city":"Crescent City","country":"US","lat":41.778929,"lng":-124.236403,"tz":"America/Los_Angeles"},{"iata":"CED","icao":"YCDU","name":"Ceduna Airport","city":"","country":"AU","lat":-32.1306,"lng":133.710007,"tz":"Australia/Adelaide"},{"iata":"CEE","icao":"ULWC","name":"Cherepovets Airport","city":"Cherepovets","country":"RU","lat":59.273602,"lng":38.0158,"tz":"Europe/Moscow"},{"iata":"CEI","icao":"VTCT","name":"Mae Fah Luang - Chiang Rai International Airport","city":"Chiang Rai","country":"TH","lat":19.952299,"lng":99.882896,"tz":"Asia/Bangkok"},{"iata":"CEK","icao":"USCC","name":"Kurchatov Chelyabinsk International Airport","city":"Chelyabinsk","country":"RU","lat":55.303141,"lng":61.504927,"tz":"Asia/Yekaterinburg"},{"iata":"CEN","icao":"MMCN","name":"Ciudad Obregón International Airport","city":"Ciudad Obregón","country":"MX","lat":27.392599,"lng":-109.833,"tz":"America/Hermosillo"},{"iata":"CEZ","icao":"KCEZ","name":"Cortez Municipal Airport","city":"Cortez","country":"US","lat":37.303001,"lng":-108.627998,"tz":"America/Denver"},{"iata":"CFE","icao":"LFLC","name":"Clermont-Ferrand Auvergne airport","city":"Clermont-Ferrand","country":"FR","lat":45.786701,"lng":3.16917,"tz":"Europe/Paris"},{"iata":"CFG","icao":"MUCF","name":"Jaime Gonzalez Airport","city":"Cienfuegos","country":"CU","lat":22.15,"lng":-80.4142,"tz":"America/Havana"},{"iata":"CFK","icao":"DAOI","name":"Chlef Aboubakr Belkaid International Airport","city":"Chlef","country":"DZ","lat":36.216614,"lng":1.341114,"tz":"Africa/Algiers"},{"iata":"CFN","icao":"EIDL","name":"Donegal Airport","city":"Donegal","country":"IE","lat":55.044201,"lng":-8.341,"tz":"Europe/Dublin"},{"iata":"CFR","icao":"LFRK","name":"Caen Carpiquet airport","city":"Caen","country":"FR","lat":49.17678,"lng":-0.454883,"tz":"Europe/Paris"},{"iata":"CFS","icao":"YCFS","name":"Coffs Harbour Airport","city":"Coffs Harbour","country":"AU","lat":-30.320601,"lng":153.115997,"tz":"Australia/Sydney"},{"iata":"CFU","icao":"LGKR","name":"Corfu Ioannis Kapodistrias International Airport","city":"Kerkyra (Corfu)","country":"GR","lat":39.60145,"lng":19.912179,"tz":"Europe/Athens"},{"iata":"CGB","icao":"SBCY","name":"Várzea Grande–Marechal Rondon International Airport","city":"Cuiabá","country":"BR","lat":-15.6529,"lng":-56.116699,"tz":"America/Cuiaba"},{"iata":"CGD","icao":"ZGCD","name":"Changde Taohuayuan Airport","city":"Changde (Dingcheng)","country":"CN","lat":28.9189,"lng":111.639999,"tz":"Asia/Shanghai"},{"iata":"CGH","icao":"SBSP","name":"Congonhas–Deputado Freitas Nobre Airport","city":"São Paulo","country":"BR","lat":-23.627657,"lng":-46.654601,"tz":"America/Sao_Paulo"},{"iata":"CGI","icao":"KCGI","name":"Cape Girardeau Regional Airport","city":"Cape Girardeau","country":"US","lat":37.2253,"lng":-89.570801,"tz":"America/Chicago"},{"iata":"CGK","icao":"WIII","name":"Soekarno-Hatta International Airport","city":"Jakarta","country":"ID","lat":-6.12557,"lng":106.655998,"tz":"Asia/Jakarta"},{"iata":"CGM","icao":"RPMH","name":"Camiguin Airport","city":"Mambajao","country":"PH","lat":9.253894,"lng":124.709115,"tz":"Asia/Manila"},{"iata":"CGN","icao":"EDDK","name":"Cologne Bonn Airport","city":"Köln (Cologne)","country":"DE","lat":50.865898,"lng":7.14274,"tz":"Europe/Berlin"},{"iata":"CGO","icao":"ZHCC","name":"Zhengzhou Xinzheng International Airport","city":"Zhengzhou","country":"CN","lat":34.526497,"lng":113.849165,"tz":"Asia/Shanghai"},{"iata":"CGP","icao":"VGEG","name":"Shah Amanat International Airport","city":"Chattogram (Chittagong)","country":"BD","lat":22.249599,"lng":91.813301,"tz":"Asia/Dhaka"},{"iata":"CGQ","icao":"ZYCC","name":"Changchun Longjia International Airport","city":"Changchun","country":"CN","lat":43.996201,"lng":125.684998,"tz":"Asia/Shanghai"},{"iata":"CGR","icao":"SBCG","name":"Campo Grande Airport","city":"Campo Grande","country":"BR","lat":-20.469998,"lng":-54.673988,"tz":"America/Campo_Grande"},{"iata":"CGY","icao":"RPMY","name":"Laguindingan International Airport","city":"Laguindingan","country":"PH","lat":8.612203,"lng":124.456496,"tz":"Asia/Manila"},{"iata":"CHA","icao":"KCHA","name":"Chattanooga Metropolitan Airport (Lovell Field)","city":"Chattanooga","country":"US","lat":35.035301,"lng":-85.203796,"tz":"America/New_York"},{"iata":"CHC","icao":"NZCH","name":"Christchurch International Airport","city":"Christchurch","country":"NZ","lat":-43.489029,"lng":172.532065,"tz":"Pacific/Auckland"},{"iata":"CHG","icao":"ZYCY","name":"Chaoyang Airport","city":"Shuangta, Chaoyang","country":"CN","lat":41.538101,"lng":120.434998,"tz":"Asia/Shanghai"},{"iata":"CHH","icao":"SPPY","name":"Chachapoyas Airport","city":"Chachapoyas","country":"PE","lat":-6.201911,"lng":-77.856195,"tz":"America/Lima"},{"iata":"CHM","icao":"SPEO","name":"FAP Lieutenant Jaime Andres de Montreuil Morales Airport","city":"Chimbote","country":"PE","lat":-9.14961,"lng":-78.523804,"tz":"America/Lima"},{"iata":"CHO","icao":"KCHO","name":"Charlottesville Albemarle Airport","city":"Charlottesville","country":"US","lat":38.138599,"lng":-78.452904,"tz":"America/New_York"},{"iata":"CHQ","icao":"LGSA","name":"Chania International Airport","city":"Souda","country":"GR","lat":35.531207,"lng":24.150673,"tz":"Europe/Athens"},{"iata":"CHS","icao":"KCHS","name":"Charleston International Airport","city":"Charleston","country":"US","lat":32.896159,"lng":-80.038151,"tz":"America/New_York"},{"iata":"CHT","icao":"NZCI","name":"Inia William Tuuta Memorial Airport","city":"Te One","country":"NZ","lat":-43.81189,"lng":-176.46514,"tz":"Pacific/Chatham"},{"iata":"CHX","icao":"MPCH","name":"Changuinola Captain Manuel Niño International Airport","city":"Changuinola","country":"PA","lat":9.458962,"lng":-82.515062,"tz":"America/Costa_Rica"},{"iata":"CIA","icao":"LIRA","name":"Ciampino–G. B. Pastine International Airport","city":"Rome","country":"IT","lat":41.798769,"lng":12.595331,"tz":"Europe/Rome"},{"iata":"CID","icao":"KCID","name":"The Eastern Iowa Airport","city":"Cedar Rapids","country":"US","lat":41.884701,"lng":-91.7108,"tz":"America/Chicago"},{"iata":"CIF","icao":"ZBCF","name":"Chifeng Yulong Airport","city":"Chifeng","country":"CN","lat":42.159723,"lng":118.840971,"tz":"Asia/Shanghai"},{"iata":"CIJ","icao":"SLCO","name":"Capitán Aníbal Arab Airport","city":"Cobija","country":"BO","lat":-11.039109,"lng":-68.782774,"tz":"America/Rio_Branco"},{"iata":"CIT","icao":"UAII","name":"Shymkent International Airport","city":"Shymkent","country":"KZ","lat":42.365021,"lng":69.47564,"tz":"Asia/Almaty"},{"iata":"CIU","icao":"KCIU","name":"Chippewa County International Airport","city":"Kincheloe","country":"US","lat":46.242038,"lng":-84.462082,"tz":"America/Detroit"},{"iata":"CIW","icao":"TVSC","name":"Canouan Airport","city":"Canouan","country":"VC","lat":12.699,"lng":-61.3424,"tz":"America/Grenada"},{"iata":"CIX","icao":"SPHI","name":"Capitán FAP José A. Quiñones González International Airport","city":"Chiclayo","country":"PE","lat":-6.789223,"lng":-79.828254,"tz":"America/Lima"},{"iata":"CIY","icao":"LICB","name":"Comiso Airport","city":"Comiso","country":"IT","lat":36.99583,"lng":14.60889,"tz":"Europe/Rome"},{"iata":"CJA","icao":"SPJR","name":"Mayor General FAP Armando Revoredo Iglesias Airport","city":"Cajamarca","country":"PE","lat":-7.13918,"lng":-78.489403,"tz":"America/Lima"},{"iata":"CJB","icao":"VOCB","name":"Coimbatore International Airport","city":"Coimbatore","country":"IN","lat":11.03,"lng":77.043404,"tz":"Asia/Kolkata"},{"iata":"CJC","icao":"SCCF","name":"El Loa Airport","city":"Calama","country":"CL","lat":-22.498199,"lng":-68.903603,"tz":"America/Santiago"},{"iata":"CJJ","icao":"RKTU","name":"Cheongju International Airport/Cheongju Air Base (K-59/G-513)","city":"Cheongju","country":"KR","lat":36.71556,"lng":127.500289,"tz":"Asia/Seoul"},{"iata":"CJL","icao":"OPCH","name":"Chitral Airport","city":"Chitral","country":"PK","lat":35.886213,"lng":71.799922,"tz":"Asia/Karachi"},{"iata":"CJM","icao":"VTSE","name":"Chumphon Airport","city":"Chumphon","country":"TH","lat":10.7112,"lng":99.361702,"tz":"Asia/Bangkok"},{"iata":"CJS","icao":"MMCS","name":"Abraham González International Airport","city":"Ciudad Juárez","country":"MX","lat":31.636673,"lng":-106.428533,"tz":"America/Ojinaga"},{"iata":"CJU","icao":"RKPC","name":"Jeju International Airport","city":"Jeju City","country":"KR","lat":33.512058,"lng":126.492548,"tz":"Asia/Seoul"},{"iata":"CKB","icao":"KCKB","name":"North Central West Virginia Airport","city":"Bridgeport","country":"US","lat":39.2966,"lng":-80.228104,"tz":"America/New_York"},{"iata":"CKG","icao":"ZUCK","name":"Chongqing Jiangbei International Airport","city":"Chongqing","country":"CN","lat":29.712254,"lng":106.651895,"tz":"Asia/Shanghai"},{"iata":"CKH","icao":"UESO","name":"Chokurdakh Airport","city":"Chokurdah","country":"RU","lat":70.6231,"lng":147.901993,"tz":"Asia/Srednekolymsk"},{"iata":"CKS","icao":"SBCJ","name":"Carajás Airport","city":"Parauapebas","country":"BR","lat":-6.117841,"lng":-50.003372,"tz":"America/Belem"},{"iata":"CKY","icao":"GUCY","name":"Ahmed Sékou Touré International Airport","city":"Conakry","country":"GN","lat":9.57689,"lng":-13.612,"tz":"Africa/Conakry"},{"iata":"CKZ","icao":"LTBH","name":"Çanakkale Airport","city":"Çanakkale","country":"TR","lat":40.137699,"lng":26.4268,"tz":"Europe/Istanbul"},{"iata":"CLD","icao":"KCRQ","name":"McClellan-Palomar Airport","city":"Carlsbad","country":"US","lat":33.1283,"lng":-117.279999,"tz":"America/Los_Angeles"},{"iata":"CLE","icao":"KCLE","name":"Cleveland Hopkins International Airport","city":"Cleveland","country":"US","lat":41.411701,"lng":-81.8498,"tz":"America/New_York"},{"iata":"CLJ","icao":"LRCL","name":"Avram Iancu Cluj International Airport","city":"Cluj-Napoca","country":"RO","lat":46.786042,"lng":23.685733,"tz":"Europe/Bucharest"},{"iata":"CLL","icao":"KCLL","name":"Easterwood Field","city":"College Station","country":"US","lat":30.5886,"lng":-96.3638,"tz":"America/Chicago"},{"iata":"CLO","icao":"SKCL","name":"Alfonso Bonilla Aragon International Airport","city":"Cali","country":"CO","lat":3.542717,"lng":-76.381898,"tz":"America/Bogota"},{"iata":"CLQ","icao":"MMIA","name":"Licenciado Miguel de la Madrid International Airport","city":"Colima","country":"MX","lat":19.277,"lng":-103.577002,"tz":"America/Mexico_City"},{"iata":"CLT","icao":"KCLT","name":"Charlotte Douglas International Airport","city":"Charlotte","country":"US","lat":35.214001,"lng":-80.9431,"tz":"America/New_York"},{"iata":"CLY","icao":"LFKC","name":"Calvi Sainte Catherine Airport","city":"Calvi","country":"FR","lat":42.530422,"lng":8.792984,"tz":"Europe/Paris"},{"iata":"CMA","icao":"YCMU","name":"Cunnamulla Airport","city":"","country":"AU","lat":-28.030001,"lng":145.621994,"tz":"Australia/Brisbane"},{"iata":"CMB","icao":"VCBI","name":"Bandaranaike International Colombo Airport","city":"Colombo","country":"LK","lat":7.18076,"lng":79.884102,"tz":"Asia/Colombo"},{"iata":"CME","icao":"MMCE","name":"Ciudad del Carmen International Airport","city":"Ciudad del Carmen","country":"MX","lat":18.651516,"lng":-91.799355,"tz":"America/Merida"},{"iata":"CMF","icao":"LFLB","name":"Chambéry Aix les Bains airport","city":"Chambéry","country":"FR","lat":45.6381,"lng":5.88023,"tz":"Europe/Paris"},{"iata":"CMG","icao":"SBCR","name":"Corumbá International Airport","city":"Corumbá","country":"BR","lat":-19.01193,"lng":-57.672772,"tz":"America/Campo_Grande"},{"iata":"CMH","icao":"KCMH","name":"John Glenn Columbus International Airport","city":"Columbus","country":"US","lat":39.998001,"lng":-82.891899,"tz":"America/New_York"},{"iata":"CMI","icao":"KCMI","name":"University of Illinois Willard Airport","city":"Savoy","country":"US","lat":40.039819,"lng":-88.276249,"tz":"America/Chicago"},{"iata":"CMN","icao":"GMMN","name":"Mohammed V International Airport","city":"Casablanca","country":"MA","lat":33.3675,"lng":-7.58997,"tz":"Africa/Casablanca"},{"iata":"CMU","icao":"AYCH","name":"Chimbu Airport","city":"Kundiawa","country":"PG","lat":-6.02429,"lng":144.970993,"tz":"Pacific/Port_Moresby"},{"iata":"CMW","icao":"MUCM","name":"Ignacio Agramonte International Airport","city":"Camaguey","country":"CU","lat":21.419909,"lng":-77.848039,"tz":"America/Havana"},{"iata":"CMX","icao":"KCMX","name":"Houghton County Memorial Airport","city":"Hancock","country":"US","lat":47.1684,"lng":-88.489098,"tz":"America/Detroit"},{"iata":"CNB","icao":"YCNM","name":"Coonamble Airport","city":"","country":"AU","lat":-30.980946,"lng":148.377833,"tz":"Australia/Sydney"},{"iata":"CND","icao":"LRCK","name":"Mihail Kogălniceanu International Airport","city":"Constanța","country":"RO","lat":44.362202,"lng":28.4883,"tz":"Europe/Bucharest"},{"iata":"CNF","icao":"SBCF","name":"Tancredo Neves International Airport","city":"Belo Horizonte","country":"BR","lat":-19.63571,"lng":-43.966928,"tz":"America/Sao_Paulo"},{"iata":"CNJ","icao":"YCCY","name":"Cloncurry Airport","city":"Cloncurry","country":"AU","lat":-20.6686,"lng":140.503998,"tz":"Australia/Brisbane"},{"iata":"CNM","icao":"KCNM","name":"Cavern City Air Terminal","city":"Carlsbad","country":"US","lat":32.337502,"lng":-104.263,"tz":"America/Denver"},{"iata":"CNN","icao":"VOKN","name":"Kannur International Airport","city":"Kannur","country":"IN","lat":11.916343,"lng":75.544979,"tz":"Asia/Kolkata"},{"iata":"CNP","icao":"BGCO","name":"Neerlerit Inaat Airport","city":"Neerlerit Inaat","country":"GL","lat":70.743103,"lng":-22.650499,"tz":"America/Godthab"},{"iata":"CNQ","icao":"SARC","name":"Corrientes Airport","city":"Corrientes","country":"AR","lat":-27.4455,"lng":-58.7619,"tz":"America/Argentina/Cordoba"},{"iata":"CNS","icao":"YBCS","name":"Cairns International Airport","city":"Cairns","country":"AU","lat":-16.878921,"lng":145.74948,"tz":"Australia/Brisbane"},{"iata":"CNX","icao":"VTCC","name":"Chiang Mai International Airport","city":"Chiang Mai","country":"TH","lat":18.7668,"lng":98.962601,"tz":"Asia/Bangkok"},{"iata":"CNY","icao":"KCNY","name":"Canyonlands Regional Airport","city":"Moab","country":"US","lat":38.755001,"lng":-109.754997,"tz":"America/Denver"},{"iata":"COD","icao":"KCOD","name":"Yellowstone Regional Airport","city":"Cody","country":"US","lat":44.520199,"lng":-109.024002,"tz":"America/Denver"},{"iata":"COK","icao":"VOCI","name":"Cochin International Airport","city":"Kochi","country":"IN","lat":10.151047,"lng":76.400838,"tz":"Asia/Kolkata"},{"iata":"COO","icao":"DBBB","name":"Cotonou Cadjehoun International Airport","city":"Cotonou","country":"BJ","lat":6.35723,"lng":2.38435,"tz":"Africa/Porto-Novo"},{"iata":"COQ","icao":"ZMCD","name":"Choibalsan Airport","city":"","country":"MN","lat":48.135381,"lng":114.647231,"tz":"Asia/Choibalsan"},{"iata":"COR","icao":"SACO","name":"Ingeniero Aeronáutico Ambrosio L.V. Taravella International Airport","city":"Cordoba","country":"AR","lat":-31.312346,"lng":-64.208329,"tz":"America/Argentina/Cordoba"},{"iata":"COS","icao":"KCOS","name":"City of Colorado Springs Municipal Airport","city":"Colorado Springs","country":"US","lat":38.805801,"lng":-104.700996,"tz":"America/Denver"},{"iata":"COU","icao":"KCOU","name":"Columbia Regional Airport","city":"Columbia","country":"US","lat":38.8181,"lng":-92.219597,"tz":"America/Chicago"},{"iata":"COV","icao":"LTDB","name":"Çukurova International Airport","city":"Tarsus","country":"TR","lat":36.891478,"lng":35.071235,"tz":"Europe/Istanbul"},{"iata":"CPC","icao":"SAZY","name":"Aviador C. Campos Airport","city":"Chapelco/San Martin de los Andes","country":"AR","lat":-40.075401,"lng":-71.137299,"tz":"America/Argentina/Salta"},{"iata":"CPD","icao":"YCBP","name":"Coober Pedy Airport","city":"Coober Pedy","country":"AU","lat":-29.038312,"lng":134.722166,"tz":"Australia/Adelaide"},{"iata":"CPE","icao":"MMCP","name":"Ingeniero Alberto Acuña Ongay International Airport","city":"Campeche","country":"MX","lat":19.815969,"lng":-90.500125,"tz":"America/Merida"},{"iata":"CPH","icao":"EKCH","name":"Copenhagen Kastrup Airport","city":"Copenhagen","country":"DK","lat":55.617901,"lng":12.656,"tz":"Europe/Copenhagen"},{"iata":"CPO","icao":"SCAT","name":"Desierto de Atacama Airport","city":"Copiapo","country":"CL","lat":-27.2612,"lng":-70.779198,"tz":"America/Santiago"},{"iata":"CPR","icao":"KCPR","name":"Casper-Natrona County International Airport","city":"Casper","country":"US","lat":42.907381,"lng":-106.461609,"tz":"America/Denver"},{"iata":"CPT","icao":"FACT","name":"Cape Town International Airport","city":"Cape Town","country":"ZA","lat":-33.97403,"lng":18.604333,"tz":"Africa/Johannesburg"},{"iata":"CPV","icao":"SBKG","name":"Presidente João Suassuna Airport","city":"Campina Grande","country":"BR","lat":-7.269662,"lng":-35.896057,"tz":"America/Fortaleza"},{"iata":"CPX","icao":"TJCP","name":"Benjamin Rivera Noriega Airport","city":"Culebra","country":"PR","lat":18.312954,"lng":-65.303893,"tz":"America/Puerto_Rico"},{"iata":"CQW","icao":"ZUWL","name":"Chongqing Xiannüshan Airport","city":"Wulong","country":"CN","lat":29.465658,"lng":107.693664,"tz":"Asia/Shanghai"},{"iata":"CRA","icao":"LRCV","name":"Craiova International Airport","city":"Craiova","country":"RO","lat":44.3181,"lng":23.888599,"tz":"Europe/Bucharest"},{"iata":"CRD","icao":"SAVC","name":"General Enrique Mosconi International Airport","city":"Comodoro Rivadavia","country":"AR","lat":-45.786941,"lng":-67.463355,"tz":"America/Argentina/Catamarca"},{"iata":"CRI","icao":"MYCI","name":"Colonel Hill Airport","city":"Colonel Hill","country":"BS","lat":22.7456,"lng":-74.182404,"tz":"America/Nassau"},{"iata":"CRK","icao":"RPLC","name":"Clark International Airport / Clark Air Base","city":"Mabalacat","country":"PH","lat":15.186,"lng":120.559998,"tz":"Asia/Manila"},{"iata":"CRL","icao":"EBCI","name":"Brussels South Charleroi Airport","city":"Charleroi","country":"BE","lat":50.461963,"lng":4.459562,"tz":"Europe/Brussels"},{"iata":"CRM","icao":"RPVF","name":"Catarman National Airport","city":"Catarman","country":"PH","lat":12.50161,"lng":124.635258,"tz":"Asia/Manila"},{"iata":"CRP","icao":"KCRP","name":"Corpus Christi International Airport","city":"Corpus Christi","country":"US","lat":27.770399,"lng":-97.501198,"tz":"America/Chicago"},{"iata":"CRV","icao":"LIBC","name":"Crotone Sant'Anna Pythagoras Airport","city":"Isola di Capo Rizzuto (KR)","country":"IT","lat":38.9972,"lng":17.0802,"tz":"Europe/Rome"},{"iata":"CRW","icao":"KCRW","name":"Yeager Airport","city":"Charleston","country":"US","lat":38.3731,"lng":-81.593201,"tz":"America/New_York"},{"iata":"CRZ","icao":"UTAV","name":"Türkmenabat International Airport","city":"Türkmenabat","country":"TM","lat":38.930662,"lng":63.563982,"tz":"Asia/Ashgabat"},{"iata":"CSG","icao":"KCSG","name":"Columbus Airport","city":"Columbus","country":"US","lat":32.516415,"lng":-84.939602,"tz":"America/New_York"},{"iata":"CSK","icao":"GOGS","name":"Cap Skirring Airport","city":"Cap Skirring","country":"SN","lat":12.39533,"lng":-16.748,"tz":"Africa/Dakar"},{"iata":"CSW","icao":"MMSL","name":"Cabo San Lucas International Airport","city":"Cabo San Lucas","country":"MX","lat":22.949072,"lng":-109.939479,"tz":"America/Mazatlan"},{"iata":"CSX","icao":"ZGHA","name":"Changsha Huanghua International Airport","city":"Changsha (Changsha)","country":"CN","lat":28.189199,"lng":113.220001,"tz":"Asia/Shanghai"},{"iata":"CSY","icao":"UWKS","name":"Cheboksary Airport","city":"Cheboksary","country":"RU","lat":56.090302,"lng":47.347301,"tz":"Europe/Moscow"},{"iata":"CTA","icao":"LICC","name":"Catania-Fontanarossa Airport","city":"Catania","country":"IT","lat":37.466801,"lng":15.0664,"tz":"Europe/Rome"},{"iata":"CTC","icao":"SANC","name":"Coronel Felipe Varela International Airport","city":"Catamarca","country":"AR","lat":-28.593117,"lng":-65.7512,"tz":"America/Argentina/Catamarca"},{"iata":"CTD","icao":"MPCE","name":"Alonso Valderrama Airport","city":"Chitré","country":"PA","lat":7.98784,"lng":-80.409837,"tz":"America/Panama"},{"iata":"CTG","icao":"SKCG","name":"Rafael Nuñez International Airport","city":"Cartagena","country":"CO","lat":10.4424,"lng":-75.513,"tz":"America/Bogota"},{"iata":"CTL","icao":"YBCV","name":"Charleville Airport","city":"Charleville","country":"AU","lat":-26.4133,"lng":146.261993,"tz":"Australia/Brisbane"},{"iata":"CTM","icao":"MMCM","name":"Chetumal International Airport","city":"Chetumal","country":"MX","lat":18.504985,"lng":-88.328018,"tz":"America/Cancun"},{"iata":"CTN","icao":"YCKN","name":"Cooktown Airport","city":"","country":"AU","lat":-15.443649,"lng":145.183221,"tz":"Australia/Brisbane"},{"iata":"CTS","icao":"RJCC","name":"New Chitose Airport","city":"Sapporo","country":"JP","lat":42.774753,"lng":141.690414,"tz":"Asia/Tokyo"},{"iata":"CTU","icao":"ZUUU","name":"Chengdu Shuangliu International Airport","city":"Chengdu (Shuangliu)","country":"CN","lat":30.558257,"lng":103.945966,"tz":"Asia/Shanghai"},{"iata":"CUC","icao":"SKCC","name":"Camilo Daza International Airport","city":"Cúcuta","country":"CO","lat":7.92757,"lng":-72.5115,"tz":"America/Bogota"},{"iata":"CUE","icao":"SECU","name":"Mariscal Lamar Airport","city":"Cuenca","country":"EC","lat":-2.88947,"lng":-78.984398,"tz":"America/Guayaquil"},{"iata":"CUF","icao":"LIMZ","name":"Cuneo International Airport","city":"Levaldigi (CN)","country":"IT","lat":44.547458,"lng":7.623045,"tz":"Europe/Rome"},{"iata":"CUK","icao":null,"name":"Caye Caulker Airport","city":"Caye Caulker","country":"BZ","lat":17.735015,"lng":-88.032862,"tz":"America/Belize"},{"iata":"CUL","icao":"MMCL","name":"Bachigualato Federal International Airport","city":"Culiacán","country":"MX","lat":24.76504,"lng":-107.475228,"tz":"America/Mazatlan"},{"iata":"CUM","icao":"SVCU","name":"Antonio José de Sucre Airport","city":"Cumaná","country":"VE","lat":10.450333,"lng":-64.13047,"tz":"America/Caracas"},{"iata":"CUN","icao":"MMUN","name":"Cancún International Airport","city":"Cancún","country":"MX","lat":21.040817,"lng":-86.87347,"tz":"America/Cancun"},{"iata":"CUP","icao":"SVCP","name":"General Francisco Bermúdez Airport","city":"Carúpano","country":"VE","lat":10.660014,"lng":-63.261681,"tz":"America/Caracas"},{"iata":"CUQ","icao":"YCOE","name":"Coen Airport","city":"Coen","country":"AU","lat":-13.761133,"lng":143.113311,"tz":"Australia/Brisbane"},{"iata":"CUR","icao":"TNCC","name":"Hato International Airport","city":"Willemstad","country":"CW","lat":12.1889,"lng":-68.959801,"tz":"America/Curacao"},{"iata":"CUU","icao":"MMCU","name":"General Roberto Fierro Villalobos International Airport","city":"Chihuahua","country":"MX","lat":28.702649,"lng":-105.963764,"tz":"America/Chihuahua"},{"iata":"CUZ","icao":"SPZO","name":"Alejandro Velasco Astete International Airport","city":"Cusco","country":"PE","lat":-13.5357,"lng":-71.938797,"tz":"America/Lima"},{"iata":"CVG","icao":"KCVG","name":"Cincinnati Northern Kentucky International Airport","city":"Cincinnati / Covington","country":"US","lat":39.048801,"lng":-84.667801,"tz":"America/New_York"},{"iata":"CVM","icao":"MMCV","name":"General Pedro Jose Mendez International Airport","city":"Ciudad Victoria","country":"MX","lat":23.7033,"lng":-98.956497,"tz":"America/Monterrey"},{"iata":"CVN","icao":"KCVN","name":"Clovis Municipal Airport","city":"Clovis","country":"US","lat":34.426594,"lng":-103.078794,"tz":"America/Chicago"},{"iata":"CVQ","icao":"YCAR","name":"Carnarvon Airport","city":"Carnarvon","country":"AU","lat":-24.884337,"lng":113.666393,"tz":"Australia/Perth"},{"iata":"CWA","icao":"KCWA","name":"Central Wisconsin Airport","city":"Mosinee","country":"US","lat":44.777448,"lng":-89.670238,"tz":"America/Chicago"},{"iata":"CWB","icao":"SBCT","name":"Curitiba-Afonso Pena International Airport","city":"Curitiba","country":"BR","lat":-25.5285,"lng":-49.1758,"tz":"America/Sao_Paulo"},{"iata":"CWC","icao":"UKLN","name":"Chernivtsi International Airport","city":"Chernivtsi","country":"UA","lat":48.2593,"lng":25.980801,"tz":"Europe/Kiev"},{"iata":"CWJ","icao":"ZPCW","name":"Cangyuan Washan Airport","city":"Lincang (Cangyuan)","country":"CN","lat":23.276331,"lng":99.373169,"tz":"Asia/Yangon"},{"iata":"CWL","icao":"EGFF","name":"Cardiff International Airport","city":"Cardiff","country":"GB","lat":51.396702,"lng":-3.34333,"tz":"Europe/London"},{"iata":"CXB","icao":"VGCB","name":"Cox's Bazar Airport","city":"Cox's Bazar","country":"BD","lat":21.457517,"lng":91.963263,"tz":"Asia/Dhaka"},{"iata":"CXI","icao":"PLCH","name":"Cassidy International Airport","city":"Kiritimati","country":"KI","lat":1.986278,"lng":-157.350011,"tz":"Pacific/Kiritimati"},{"iata":"CXJ","icao":"SBCX","name":"Hugo Cantergiani Regional Airport","city":"Caxias Do Sul","country":"BR","lat":-29.197183,"lng":-51.187647,"tz":"America/Sao_Paulo"},{"iata":"CXP","icao":"WAHL","name":"Tunggul Wulung Airport","city":"Cilacap","country":"ID","lat":-7.64506,"lng":109.033997,"tz":"Asia/Jakarta"},{"iata":"CXR","icao":"VVCR","name":"Cam Ranh International Airport / Cam Ranh Air Base","city":"Nha Trang/nha Trang aiurportCam Ranh","country":"VN","lat":11.9982,"lng":109.219002,"tz":"Asia/Ho_Chi_Minh"},{"iata":"CYA","icao":"MTCA","name":"Antoine-Simon International Airport","city":"Les Cayes","country":"HT","lat":18.271099,"lng":-73.7883,"tz":"America/Port-au-Prince"},{"iata":"CYB","icao":"MWCB","name":"Charles Kirkconnell International Airport","city":"West End","country":"KY","lat":19.687,"lng":-79.882797,"tz":"America/Cayman"},{"iata":"CYC","icao":null,"name":"Caye Chapel Airport","city":"Caye Chapel","country":"BZ","lat":17.683792,"lng":-88.044985,"tz":"America/Belize"},{"iata":"CYI","icao":"RCKU","name":"Chiayi Airport","city":"Shuishang","country":"TW","lat":23.462577,"lng":120.390544,"tz":"Asia/Taipei"},{"iata":"CYO","icao":"MUCL","name":"Vilo Acuña International Airport","city":"Cayo Largo del Sur","country":"CU","lat":21.616501,"lng":-81.545998,"tz":"America/Havana"},{"iata":"CYP","icao":"RPVC","name":"Calbayog Airport","city":"Calbayog City","country":"PH","lat":12.072574,"lng":124.54508,"tz":"Asia/Manila"},{"iata":"CYS","icao":"KCYS","name":"Cheyenne Regional Jerry Olson Field","city":"Cheyenne","country":"US","lat":41.155701,"lng":-104.811997,"tz":"America/Denver"},{"iata":"CYX","icao":"UESS","name":"Cherskiy Airport","city":"Cherskiy","country":"RU","lat":68.740601,"lng":161.337997,"tz":"Asia/Anadyr"},{"iata":"CYZ","icao":"RPUY","name":"Cauayan Airport","city":"Cauayan City","country":"PH","lat":16.929899,"lng":121.752998,"tz":"Asia/Manila"},{"iata":"CZE","icao":"SVCR","name":"José Leonardo Chirinos Airport","city":"Coro","country":"VE","lat":11.414944,"lng":-69.680901,"tz":"America/Caracas"},{"iata":"CZH","icao":null,"name":"Corozal Airport","city":"Corozal","country":"BZ","lat":18.3822,"lng":-88.411903,"tz":"America/Belize"},{"iata":"CZL","icao":"DABC","name":"Mohamed Boudiaf International Airport","city":"Constantine","country":"DZ","lat":36.276001,"lng":6.62039,"tz":"Africa/Algiers"},{"iata":"CZM","icao":"MMCZ","name":"Cozumel International Airport","city":"Cozumel","country":"MX","lat":20.514922,"lng":-86.928538,"tz":"America/Cancun"},{"iata":"CZS","icao":"SBCZ","name":"Cruzeiro do Sul Airport","city":"Cruzeiro Do Sul","country":"BR","lat":-7.59991,"lng":-72.769501,"tz":"America/Rio_Branco"},{"iata":"CZU","icao":"SKCZ","name":"Las Brujas Airport","city":"Corozal","country":"CO","lat":9.33274,"lng":-75.2856,"tz":"America/Bogota"},{"iata":"CZX","icao":"ZSCG","name":"Changzhou Benniu International Airport","city":"Changzhou","country":"CN","lat":31.920485,"lng":119.77546,"tz":"Asia/Shanghai"},{"iata":"DAB","icao":"KDAB","name":"Daytona Beach International Airport","city":"Daytona Beach","country":"US","lat":29.18255,"lng":-81.059464,"tz":"America/New_York"},{"iata":"DAC","icao":"VGHS","name":"Hazrat Shahjalal International Airport","city":"Dhaka","country":"BD","lat":23.843347,"lng":90.397783,"tz":"Asia/Dhaka"},{"iata":"DAD","icao":"VVDN","name":"Da Nang International Airport","city":"Da Nang","country":"VN","lat":16.0439,"lng":108.198997,"tz":"Asia/Ho_Chi_Minh"},{"iata":"DAL","icao":"KDAL","name":"Dallas Love Field","city":"Dallas","country":"US","lat":32.844776,"lng":-96.847653,"tz":"America/Chicago"},{"iata":"DAM","icao":"OSDI","name":"Damascus International Airport","city":"Damascus","country":"SY","lat":33.411499,"lng":36.515598,"tz":"Asia/Damascus"},{"iata":"DAR","icao":"HTDA","name":"Julius Nyerere International Airport","city":"Dar es Salaam","country":"TZ","lat":-6.873499,"lng":39.207288,"tz":"Africa/Dar_es_Salaam"},{"iata":"DAT","icao":"ZBDT","name":"Datong Yungang International Airport","city":"Datong","country":"CN","lat":40.06139,"lng":113.480509,"tz":"Asia/Shanghai"},{"iata":"DAU","icao":"AYDU","name":"Daru Airport","city":"Daru","country":"PG","lat":-9.08676,"lng":143.207993,"tz":"Pacific/Port_Moresby"},{"iata":"DAV","icao":"MPDA","name":"Enrique Malek International Airport","city":"David","country":"PA","lat":8.388983,"lng":-82.436425,"tz":"America/Panama"},{"iata":"DAY","icao":"KDAY","name":"James M. Cox Dayton International Airport","city":"Dayton","country":"US","lat":39.902401,"lng":-84.219398,"tz":"America/New_York"},{"iata":"DBB","icao":"HEAL","name":"El Alamein International Airport","city":"El Alamein","country":"EG","lat":30.924324,"lng":28.46161,"tz":"Africa/Cairo"},{"iata":"DBC","icao":"ZYBA","name":"Baicheng Chang'an Airport","city":"Baicheng","country":"CN","lat":45.505278,"lng":123.019722,"tz":"Asia/Shanghai"},{"iata":"DBO","icao":"YSDU","name":"Dubbo City Regional Airport","city":"Dubbo","country":"AU","lat":-32.216702,"lng":148.574997,"tz":"Australia/Sydney"},{"iata":"DBQ","icao":"KDBQ","name":"Dubuque Regional Airport","city":"Dubuque","country":"US","lat":42.402,"lng":-90.709503,"tz":"America/Chicago"},{"iata":"DBR","icao":"VEDH","name":"Darbhanga Airport","city":"Darbhanga","country":"IN","lat":26.192801,"lng":85.916901,"tz":"Asia/Kolkata"},{"iata":"DBV","icao":"LDDU","name":"Dubrovnik Ruđer Bošković Airport","city":"Dubrovnik","country":"HR","lat":42.562247,"lng":18.265543,"tz":"Europe/Zagreb"},{"iata":"DCA","icao":"KDCA","name":"Ronald Reagan Washington National Airport","city":"Washington","country":"US","lat":38.8521,"lng":-77.037697,"tz":"America/New_York"},{"iata":"DCF","icao":"TDCF","name":"Canefield Airport","city":"Canefield","country":"DM","lat":15.336693,"lng":-61.392108,"tz":"America/Dominica"},{"iata":"DCM","icao":"LFCK","name":"Castres Mazamet Airport","city":"Castres","country":"FR","lat":43.556301,"lng":2.28918,"tz":"Europe/Paris"},{"iata":"DCY","icao":"ZUDC","name":"Daocheng Yading Airport","city":"Garzê (Daocheng)","country":"CN","lat":29.31632,"lng":100.060317,"tz":"Asia/Shanghai"},{"iata":"DDC","icao":"KDDC","name":"Dodge City Regional Airport","city":"Dodge City","country":"US","lat":37.763401,"lng":-99.965599,"tz":"America/Chicago"},{"iata":"DDG","icao":"ZYDD","name":"Dandong Langtou International Airport","city":"Dandong (Zhenxing)","country":"CN","lat":40.025453,"lng":124.28669,"tz":"Asia/Shanghai"},{"iata":"DDR","icao":"ZUDR","name":"Shigatse Tingri Airport","city":"Xigazê (Dingri)","country":"CN","lat":28.604567,"lng":86.798,"tz":"Asia/Shanghai"},{"iata":"DEA","icao":"OPDG","name":"Dera Ghazi Khan Airport","city":"Dera Ghazi Khan","country":"PK","lat":29.961,"lng":70.485901,"tz":"Asia/Karachi"},{"iata":"DEB","icao":"LHDC","name":"Debrecen International Airport","city":"Debrecen","country":"HU","lat":47.489469,"lng":21.616278,"tz":"Europe/Budapest"},{"iata":"DEC","icao":"KDEC","name":"Decatur Airport","city":"Decatur","country":"US","lat":39.834599,"lng":-88.8657,"tz":"America/Chicago"},{"iata":"DED","icao":"VIDN","name":"Dehradun Jolly Grant Airport","city":"Dehradun (Jauligrant)","country":"IN","lat":30.189243,"lng":78.176651,"tz":"Asia/Kolkata"},{"iata":"DEF","icao":"OIAD","name":"Dezful Airport","city":"Dezful","country":"IR","lat":32.434399,"lng":48.397598,"tz":"Asia/Tehran"},{"iata":"DEL","icao":"VIDP","name":"Indira Gandhi International Airport","city":"New Delhi","country":"IN","lat":28.55563,"lng":77.09519,"tz":"Asia/Kolkata"},{"iata":"DEN","icao":"KDEN","name":"Denver International Airport","city":"Denver","country":"US","lat":39.860027,"lng":-104.673792,"tz":"America/Denver"},{"iata":"DFW","icao":"KDFW","name":"Dallas Fort Worth International Airport","city":"Dallas-Fort Worth","country":"US","lat":32.896801,"lng":-97.038002,"tz":"America/Chicago"},{"iata":"DGA","icao":null,"name":"Dangriga Airport","city":"Dangriga","country":"BZ","lat":16.98251,"lng":-88.230988,"tz":"America/Belize"},{"iata":"DGO","icao":"MMDO","name":"General Guadalupe Victoria International Airport","city":"Durango","country":"MX","lat":24.125468,"lng":-104.527938,"tz":"America/Monterrey"},{"iata":"DGT","icao":"RPVD","name":"Sibulan Airport","city":"Dumaguete City","country":"PH","lat":9.334183,"lng":123.30191,"tz":"Asia/Manila"},{"iata":"DHM","icao":"VIGG","name":"Kangra Airport","city":"Kangra","country":"IN","lat":32.164902,"lng":76.263018,"tz":"Asia/Kolkata"},{"iata":"DHN","icao":"KDHN","name":"Dothan Regional Airport","city":"Dothan","country":"US","lat":31.321301,"lng":-85.4496,"tz":"America/Chicago"},{"iata":"DHX","icao":"WARD","name":"Dhoho International Airport","city":"Kediri","country":"ID","lat":-7.749527,"lng":111.946831,"tz":"Asia/Jakarta"},{"iata":"DIA","icao":"OTBD","name":"Doha International Airport","city":"Doha","country":"QA","lat":25.259431,"lng":51.565528,"tz":"Asia/Qatar"},{"iata":"DIB","icao":"VEMN","name":"Dibrugarh Airport","city":"Dibrugarh","country":"IN","lat":27.4839,"lng":95.016899,"tz":"Asia/Kolkata"},{"iata":"DIE","icao":"FMNA","name":"Arrachart Airport","city":"Antisiranana","country":"MG","lat":-12.3494,"lng":49.291698,"tz":"Indian/Antananarivo"},{"iata":"DIG","icao":"ZPDQ","name":"Diqing Shangri-La Airport","city":"Diqing (Shangri-La)","country":"CN","lat":27.7936,"lng":99.6772,"tz":"Asia/Shanghai"},{"iata":"DIJ","icao":"LFSD","name":"Dijon Longvic airport","city":"Dijon","country":"FR","lat":47.268902,"lng":5.09,"tz":"Europe/Paris"},{"iata":"DIK","icao":"KDIK","name":"Dickinson Theodore Roosevelt Regional Airport","city":"Dickinson","country":"US","lat":46.797533,"lng":-102.801905,"tz":"America/Denver"},{"iata":"DIL","icao":"WPDL","name":"Presidente Nicolau Lobato International Airport","city":"Dili","country":"TL","lat":-8.546562,"lng":125.524507,"tz":"Asia/Makassar"},{"iata":"DIN","icao":"VVDB","name":"Dien Bien Phu Airport","city":"Dien Bien Phu","country":"VN","lat":21.397499,"lng":103.008003,"tz":"Asia/Vientiane"},{"iata":"DIR","icao":"HADR","name":"Aba Tenna Dejazmach Yilma International Airport","city":"Dire Dawa","country":"ET","lat":9.623549,"lng":41.855027,"tz":"Africa/Addis_Ababa"},{"iata":"DIY","icao":"LTCC","name":"Diyarbakır Airport","city":"Diyarbakır","country":"TR","lat":37.893902,"lng":40.201,"tz":"Europe/Istanbul"},{"iata":"DJE","icao":"DTTJ","name":"Djerba Zarzis International Airport","city":"Mellita","country":"TN","lat":33.873719,"lng":10.7773,"tz":"Africa/Tunis"},{"iata":"DJG","icao":"DAAJ","name":"Tiska Djanet Airport","city":"Djanet","country":"DZ","lat":24.285448,"lng":9.463652,"tz":"Africa/Algiers"},{"iata":"DJJ","icao":"WAJJ","name":"Dortheys Hiyo Eluay International Airport","city":"Sentani","country":"ID","lat":-2.579627,"lng":140.519857,"tz":"Asia/Jayapura"},{"iata":"DKA","icao":"DNKT","name":"Umaru Musa Yar'adua Airport","city":"Katsina","country":"NG","lat":13.0078,"lng":7.66045,"tz":"Africa/Lagos"},{"iata":"DKR","icao":"GOOY","name":"Léopold Sédar Senghor International Airport","city":"Dakar","country":"SN","lat":14.742337,"lng":-17.479222,"tz":"Africa/Dakar"},{"iata":"DLA","icao":"FKKD","name":"Douala International Airport","city":"Douala","country":"CM","lat":4.00608,"lng":9.71948,"tz":"Africa/Douala"},{"iata":"DLC","icao":"ZYTL","name":"Dalian Zhoushuizi International Airport","city":"Dalian (Ganjingzi)","country":"CN","lat":38.965719,"lng":121.538477,"tz":"Asia/Shanghai"},{"iata":"DLE","icao":"LFGJ","name":"Dole Tavaux Airport","city":"Dole","country":"FR","lat":47.038955,"lng":5.427589,"tz":"Europe/Paris"},{"iata":"DLG","icao":"PADL","name":"Dillingham Airport","city":"Dillingham","country":"US","lat":59.044701,"lng":-158.505005,"tz":"America/Anchorage"},{"iata":"DLH","icao":"KDLH","name":"Duluth International Airport","city":"Duluth","country":"US","lat":46.841873,"lng":-92.198746,"tz":"America/Chicago"},{"iata":"DLI","icao":"VVDL","name":"Lien Khuong Airport","city":"Da Lat","country":"VN","lat":11.750556,"lng":108.366997,"tz":"Asia/Ho_Chi_Minh"},{"iata":"DLM","icao":"LTBS","name":"Dalaman International Airport","city":"Dalaman","country":"TR","lat":36.7131,"lng":28.7925,"tz":"Europe/Istanbul"},{"iata":"DLU","icao":"ZPDL","name":"Dali Fengyi Airport","city":"Dali (Xiaguan)","country":"CN","lat":25.649401,"lng":100.319,"tz":"Asia/Shanghai"},{"iata":"DLZ","icao":"ZMDZ","name":"Dalanzadgad Airport","city":"Dalanzadgad","country":"MN","lat":43.608628,"lng":104.367734,"tz":"Asia/Ulaanbaatar"},{"iata":"DMB","icao":"UADD","name":"Taraz International Airport","city":"Taraz","country":"KZ","lat":42.8536,"lng":71.303596,"tz":"Asia/Almaty"},{"iata":"DME","icao":"UUDD","name":"Domodedovo International Airport","city":"Moscow","country":"RU","lat":55.408798,"lng":37.9063,"tz":"Europe/Moscow"},{"iata":"DMK","icao":"VTBD","name":"Don Mueang International Airport","city":"Bangkok","country":"TH","lat":13.9126,"lng":100.607002,"tz":"Asia/Bangkok"},{"iata":"DMM","icao":"OEDF","name":"King Fahd International Airport","city":"Ad Dammam","country":"SA","lat":26.4691,"lng":49.798209,"tz":"Asia/Riyadh"},{"iata":"DMU","icao":"VEMR","name":"Dimapur Airport","city":"Dimapur","country":"IN","lat":25.8839,"lng":93.771103,"tz":"Asia/Kolkata"},{"iata":"DND","icao":"EGPN","name":"Dundee Airport","city":"Dundee","country":"GB","lat":56.452499,"lng":-3.02583,"tz":"Europe/London"},{"iata":"DNH","icao":"ZLDH","name":"Dunhuang Mogao International Airport","city":"Dunhuang","country":"CN","lat":40.161953,"lng":94.812827,"tz":"Asia/Shanghai"},{"iata":"DNK","icao":"UKDD","name":"Dnipro International Airport","city":"Dnipro","country":"UA","lat":48.357201,"lng":35.100601,"tz":"Europe/Kiev"},{"iata":"DNR","icao":"LFRD","name":"Dinard Pleurtuit Saint-Malo airport","city":"Dinard","country":"FR","lat":48.5877,"lng":-2.07996,"tz":"Europe/Paris"},{"iata":"DNZ","icao":"LTAY","name":"Çardak Airport","city":"Denizli","country":"TR","lat":37.785599,"lng":29.7013,"tz":"Europe/Istanbul"},{"iata":"DOD","icao":"HTDO","name":"Dodoma Airport","city":"Dodoma","country":"TZ","lat":-6.170559,"lng":35.756036,"tz":"Africa/Dar_es_Salaam"},{"iata":"DOG","icao":"HSDN","name":"Dongola Airport","city":"Dongola","country":"SD","lat":19.153666,"lng":30.430069,"tz":"Africa/Khartoum"},{"iata":"DOH","icao":"OTHH","name":"Hamad International Airport","city":"Doha","country":"QA","lat":25.273056,"lng":51.608056,"tz":"Asia/Qatar"},{"iata":"DOL","icao":"LFRG","name":"Deauville Normandie airport","city":"Deauville","country":"FR","lat":49.365237,"lng":0.154481,"tz":"Europe/Paris"},{"iata":"DOM","icao":"TDPD","name":"Douglas-Charles Airport","city":"Marigot","country":"DM","lat":15.546673,"lng":-61.301082,"tz":"America/Dominica"},{"iata":"DOV","icao":"KDOV","name":"Dover Civil Air Terminal/Dover Air Force Base","city":"Dover","country":"US","lat":39.129501,"lng":-75.466003,"tz":"America/New_York"},{"iata":"DOY","icao":"ZSDY","name":"Dongying Shengli Airport","city":"Dongying (Kenli)","country":"CN","lat":37.50137,"lng":118.789863,"tz":"Asia/Shanghai"},{"iata":"DPL","icao":"RPMG","name":"Dipolog Airport","city":"Dipolog","country":"PH","lat":8.601983,"lng":123.341875,"tz":"Asia/Manila"},{"iata":"DPO","icao":"YDPO","name":"Devonport Airport","city":"Devonport","country":"AU","lat":-41.169701,"lng":146.429993,"tz":"Australia/Hobart"},{"iata":"DPS","icao":"WADD","name":"Denpasar I Gusti Ngurah Rai International Airport","city":"Kuta, Badung","country":"ID","lat":-8.748409,"lng":115.167123,"tz":"Asia/Makassar"},{"iata":"DQM","icao":null,"name":"Duqm International Airport","city":"Duqm","country":"OM","lat":19.501944,"lng":57.634167,"tz":"Asia/Muscat"},{"iata":"DRG","icao":"PADE","name":"Deering Airport","city":"Deering","country":"US","lat":66.068901,"lng":-162.766914,"tz":"America/Nome"},{"iata":"DRO","icao":"KDRO","name":"Durango La Plata County Airport","city":"Durango","country":"US","lat":37.151501,"lng":-107.753998,"tz":"America/Denver"},{"iata":"DRP","icao":"RPLK","name":"Bicol International Airport","city":"Legazpi","country":"PH","lat":13.111915,"lng":123.676829,"tz":"Asia/Manila"},{"iata":"DRS","icao":"EDDC","name":"Dresden Airport","city":"Dresden","country":"DE","lat":51.134123,"lng":13.767831,"tz":"Europe/Berlin"},{"iata":"DRW","icao":"YPDN","name":"Darwin International Airport / RAAF Darwin","city":"Darwin","country":"AU","lat":-12.41497,"lng":130.88185,"tz":"Australia/Darwin"},{"iata":"DSI","icao":"KDTS","name":"Destin Executive Airport","city":"Destin","country":"US","lat":30.400101,"lng":-86.471497,"tz":"America/Chicago"},{"iata":"DSM","icao":"KDSM","name":"Des Moines International Airport","city":"Des Moines","country":"US","lat":41.534027,"lng":-93.656719,"tz":"America/Chicago"},{"iata":"DSN","icao":"ZBDS","name":"Ordos Ejin Horo International Airport","city":"Ordos","country":"CN","lat":39.493514,"lng":109.8599,"tz":"Asia/Shanghai"},{"iata":"DSO","icao":"ZKSD","name":"Sondok Airport","city":"Sŏndŏng-ni","country":"KP","lat":39.745201,"lng":127.473999,"tz":"Asia/Pyongyang"},{"iata":"DSS","icao":"GOBD","name":"Blaise Diagne International Airport","city":"Dakar","country":"SN","lat":14.670878,"lng":-17.072829,"tz":"Africa/Dakar"},{"iata":"DSY","icao":null,"name":"Dara Sakor International Airport","city":"Ta Noun","country":"KH","lat":10.914244,"lng":103.226652,"tz":"Asia/Phnom_Penh"},{"iata":"DTM","icao":"EDLW","name":"Dortmund Airport","city":"Dortmund","country":"DE","lat":51.518299,"lng":7.61224,"tz":"Europe/Berlin"},{"iata":"DTU","icao":"ZYDU","name":"Wudalianchi Dedu Airport","city":"Heihe","country":"CN","lat":48.441037,"lng":126.128374,"tz":"Asia/Shanghai"},{"iata":"DTW","icao":"KDTW","name":"Detroit Metropolitan Wayne County Airport","city":"Detroit","country":"US","lat":42.21377,"lng":-83.353786,"tz":"America/Detroit"},{"iata":"DUB","icao":"EIDW","name":"Dublin Airport","city":"Dublin","country":"IE","lat":53.428713,"lng":-6.262121,"tz":"Europe/Dublin"},{"iata":"DUD","icao":"NZDN","name":"Dunedin International Airport","city":"Dunedin","country":"NZ","lat":-45.929017,"lng":170.197758,"tz":"Pacific/Auckland"},{"iata":"DUE","icao":"FNDU","name":"Dundo Airport","city":"Chitato","country":"AO","lat":-7.40089,"lng":20.818501,"tz":"Africa/Lubumbashi"},{"iata":"DUJ","icao":"KDUJ","name":"DuBois Regional Airport","city":"Dubois","country":"US","lat":41.178299,"lng":-78.898697,"tz":"America/New_York"},{"iata":"DUM","icao":"WIBD","name":"Pinang Kampai Airport","city":"Dumai","country":"ID","lat":1.609026,"lng":101.433493,"tz":"Asia/Jakarta"},{"iata":"DUR","icao":"FALE","name":"King Shaka International Airport","city":"Durban","country":"ZA","lat":-29.614444,"lng":31.119722,"tz":"Africa/Johannesburg"},{"iata":"DUS","icao":"EDDL","name":"Düsseldorf Airport","city":"Düsseldorf","country":"DE","lat":51.289501,"lng":6.76678,"tz":"Europe/Berlin"},{"iata":"DUT","icao":"PADU","name":"Tom Madsen (Dutch Harbor) Airport","city":"Unalaska","country":"US","lat":53.89881,"lng":-166.544996,"tz":"America/Nome"},{"iata":"DVL","icao":"KDVL","name":"Devils Lake Regional Airport","city":"Devils Lake","country":"US","lat":48.115454,"lng":-98.908796,"tz":"America/Chicago"},{"iata":"DVO","icao":"RPMD","name":"Francisco Bangoy International Airport","city":"Davao","country":"PH","lat":7.12552,"lng":125.646004,"tz":"Asia/Manila"},{"iata":"DWC","icao":"OMDW","name":"Al Maktoum International Airport","city":"Dubai(Jebel Ali)","country":"AE","lat":24.896171,"lng":55.16235,"tz":"Asia/Dubai"},{"iata":"DWD","icao":"OEDM","name":"Dawadmi Domestic Airport","city":"Dawadmi","country":"SA","lat":24.4499,"lng":44.121201,"tz":"Asia/Riyadh"},{"iata":"DXB","icao":"OMDB","name":"Dubai International Airport","city":"Dubai","country":"AE","lat":25.24979,"lng":55.370992,"tz":"Asia/Dubai"},{"iata":"DYG","icao":"ZGDY","name":"Zhangjiajie Hehua International Airport","city":"Zhangjiajie (Yongding)","country":"CN","lat":29.104749,"lng":110.442786,"tz":"Asia/Shanghai"},{"iata":"DYR","icao":"UHMA","name":"Ugolny Yuri Ryktheu Airport","city":"Anadyr","country":"RU","lat":64.734902,"lng":177.740997,"tz":"Asia/Anadyr"},{"iata":"DYU","icao":"UTDD","name":"Dushanbe International Airport","city":"Dushanbe","country":"TJ","lat":38.543746,"lng":68.822977,"tz":"Asia/Dushanbe"},{"iata":"DZA","icao":"FMCZ","name":"Dzaoudzi Pamandzi International Airport","city":"Dzaoudzi","country":"YT","lat":-12.809319,"lng":45.281815,"tz":"Indian/Mayotte"},{"iata":"DZH","icao":"ZUDA","name":"Dazhou Jinya Airport","city":"Dazhou (Dachuan)","country":"CN","lat":31.048815,"lng":107.435646,"tz":"Asia/Shanghai"},{"iata":"DZN","icao":"UAKD","name":"Zhezkazgan National Airport","city":"Zhezkazgan","country":"KZ","lat":47.708953,"lng":67.738094,"tz":"Asia/Almaty"},{"iata":"EAM","icao":"OENG","name":"Najran Domestic Airport","city":"Najran","country":"SA","lat":17.611401,"lng":44.419201,"tz":"Asia/Riyadh"},{"iata":"EAR","icao":"KEAR","name":"Kearney Regional Airport","city":"Kearney","country":"US","lat":40.727001,"lng":-99.006798,"tz":"America/Chicago"},{"iata":"EAS","icao":"LESO","name":"San Sebastián Airport","city":"Hondarribia","country":"ES","lat":43.356499,"lng":-1.79061,"tz":"Europe/Madrid"},{"iata":"EAT","icao":"KEAT","name":"Pangborn Memorial Airport","city":"Wenatchee","country":"US","lat":47.398899,"lng":-120.207001,"tz":"America/Los_Angeles"},{"iata":"EAU","icao":"KEAU","name":"Chippewa Valley Regional Airport","city":"Eau Claire","country":"US","lat":44.865799,"lng":-91.484299,"tz":"America/Chicago"},{"iata":"EBA","icao":"LIRJ","name":"Marina di Campo Airport","city":"Campo nell'Elba (LI)","country":"IT","lat":42.760871,"lng":10.239811,"tz":"Europe/Rome"},{"iata":"EBB","icao":"HUEN","name":"Entebbe International Airport","city":"Entebbe","country":"UG","lat":0.042386,"lng":32.443501,"tz":"Africa/Kampala"},{"iata":"EBD","icao":"HSOB","name":"El-Obeid Airport","city":"El-Obeid","country":"SD","lat":13.1532,"lng":30.2327,"tz":"Africa/Khartoum"},{"iata":"EBJ","icao":"EKEB","name":"Esbjerg Airport","city":"Esbjerg","country":"DK","lat":55.525902,"lng":8.5534,"tz":"Europe/Copenhagen"},{"iata":"EBL","icao":"ORER","name":"Erbil International Airport","city":"Arbil","country":"IQ","lat":36.236047,"lng":43.946615,"tz":"Asia/Baghdad"},{"iata":"ECN","icao":"LCEN","name":"Ercan International Airport","city":"Tymbou (Kirklar)","country":"CY","lat":35.153064,"lng":33.507352,"tz":"Asia/Famagusta"},{"iata":"ECP","icao":"KECP","name":"Northwest Florida Beaches International Airport","city":"Panama City Beach","country":"US","lat":30.357106,"lng":-85.795414,"tz":"America/Chicago"},{"iata":"EDI","icao":"EGPH","name":"Edinburgh Airport","city":"Edinburgh","country":"GB","lat":55.950145,"lng":-3.372288,"tz":"Europe/London"},{"iata":"EDL","icao":"HKEL","name":"Eldoret International Airport","city":"Eldoret","country":"KE","lat":0.404458,"lng":35.238899,"tz":"Africa/Nairobi"},{"iata":"EDO","icao":"LTFD","name":"Balıkesir Koca Seyit Airport","city":"Edremit","country":"TR","lat":39.552533,"lng":27.010192,"tz":"Europe/Istanbul"},{"iata":"EFL","icao":"LGKF","name":"Kefallinia Airport","city":"Kefallinia Island","country":"GR","lat":38.120098,"lng":20.5005,"tz":"Europe/Athens"},{"iata":"EGC","icao":"LFBE","name":"Bergerac Dordogne-Périgord airport","city":"Bergerac","country":"FR","lat":44.825298,"lng":0.518611,"tz":"Europe/Paris"},{"iata":"EGE","icao":"KEGE","name":"Eagle County Regional Airport","city":"Eagle","country":"US","lat":39.642601,"lng":-106.917999,"tz":"America/Denver"},{"iata":"EGO","icao":"UUOB","name":"Belgorod International Airport","city":"Belgorod","country":"RU","lat":50.643799,"lng":36.590099,"tz":"Europe/Moscow"},{"iata":"EGS","icao":"BIEG","name":"Egilsstaðir Airport","city":"Egilsstaðir","country":"IS","lat":65.283302,"lng":-14.4014,"tz":"Atlantic/Reykjavik"},{"iata":"EGX","icao":"PAII","name":"Egegik Airport","city":"Egegik","country":"US","lat":58.184386,"lng":-157.374873,"tz":"America/Anchorage"},{"iata":"EHU","icao":"ZHEC","name":"Ezhou Huahu International Airport","city":"Ezhou","country":"CN","lat":30.341178,"lng":115.03926,"tz":"Asia/Shanghai"},{"iata":"EIE","icao":"UNII","name":"Yeniseysk Airport","city":"Yeniseysk","country":"RU","lat":58.474201,"lng":92.112503,"tz":"Asia/Krasnoyarsk"},{"iata":"EIK","icao":null,"name":"Yeysk Airport","city":"Yeysk","country":"RU","lat":46.68,"lng":38.21,"tz":"Europe/Moscow"},{"iata":"EIN","icao":"EHEH","name":"Eindhoven Airport","city":"Eindhoven","country":"NL","lat":51.4501,"lng":5.37453,"tz":"Europe/Amsterdam"},{"iata":"EIS","icao":"TUPJ","name":"Terrance B. Lettsome International Airport","city":"Beef Island","country":"VG","lat":18.445492,"lng":-64.541707,"tz":"America/Tortola"},{"iata":"EJA","icao":"SKEJ","name":"Yariguíes Airport","city":"Barrancabermeja","country":"CO","lat":7.02433,"lng":-73.8068,"tz":"America/Bogota"},{"iata":"EJH","icao":"OEWJ","name":"Al Wajh Domestic Airport","city":"Al Wajh","country":"SA","lat":26.198601,"lng":36.476398,"tz":"Asia/Riyadh"},{"iata":"EKO","icao":"KEKO","name":"Elko Regional Airport","city":"Elko","country":"US","lat":40.824902,"lng":-115.792,"tz":"America/Los_Angeles"},{"iata":"ELC","icao":"YELD","name":"Elcho Island Airport","city":"Elcho Island","country":"AU","lat":-12.0194,"lng":135.570999,"tz":"Australia/Darwin"},{"iata":"ELD","icao":"KELD","name":"South Arkansas Regional Airport at Goodwin Field","city":"El Dorado","country":"US","lat":33.221001,"lng":-92.813301,"tz":"America/Chicago"},{"iata":"ELF","icao":"HSFS","name":"El Fasher Airport","city":"El Fasher","country":"SD","lat":13.6149,"lng":25.3246,"tz":"Africa/Khartoum"},{"iata":"ELG","icao":"DAUE","name":"El Golea Airport","city":"El Menia","country":"DZ","lat":30.580732,"lng":2.861595,"tz":"Africa/Algiers"},{"iata":"ELH","icao":"MYEH","name":"North Eleuthera Airport","city":"North Eleuthera","country":"BS","lat":25.475823,"lng":-76.680784,"tz":"America/Nassau"},{"iata":"ELM","icao":"KELM","name":"Elmira Corning Regional Airport","city":"Elmira/Corning","country":"US","lat":42.159901,"lng":-76.891602,"tz":"America/New_York"},{"iata":"ELP","icao":"KELP","name":"El Paso International Airport","city":"El Paso","country":"US","lat":31.809908,"lng":-106.375607,"tz":"America/Denver"},{"iata":"ELQ","icao":"OEGS","name":"Prince Naif bin Abdulaziz International Airport","city":"Qassim","country":"SA","lat":26.302799,"lng":43.774399,"tz":"Asia/Riyadh"},{"iata":"ELS","icao":"FAEL","name":"King Phalo Airport","city":"East London","country":"ZA","lat":-33.035599,"lng":27.825899,"tz":"Africa/Johannesburg"},{"iata":"ELU","icao":"DAUO","name":"Guemar Airport - مطار قمار بالوادي","city":"Guemar","country":"DZ","lat":33.511398,"lng":6.77679,"tz":"Africa/Algiers"},{"iata":"EMA","icao":"EGNX","name":"East Midlands Airport","city":"Nottingham, Leicestershire","country":"GB","lat":52.8311,"lng":-1.32806,"tz":"Europe/London"},{"iata":"EMD","icao":"YEML","name":"Emerald Airport","city":"Emerald","country":"AU","lat":-23.567499,"lng":148.179001,"tz":"Australia/Brisbane"},{"iata":"EMK","icao":"PAEM","name":"Emmonak Airport","city":"Emmonak","country":"US","lat":62.786098,"lng":-164.490997,"tz":"America/Nome"},{"iata":"ENA","icao":"PAEN","name":"Kenai Municipal Airport","city":"Kenai","country":"US","lat":60.570946,"lng":-151.245174,"tz":"America/Anchorage"},{"iata":"ENF","icao":"EFET","name":"Enontekio Airport","city":"Enontekio","country":"FI","lat":68.362602,"lng":23.424299,"tz":"Europe/Helsinki"},{"iata":"ENH","icao":"ZHES","name":"Enshi Xujiaping Airport","city":"Enshi (Enshi)","country":"CN","lat":30.320299,"lng":109.485001,"tz":"Asia/Shanghai"},{"iata":"ENO","icao":"SGEN","name":"Teniente Ramon A. Ayub Gonzalez International Airport","city":"Encarnación","country":"PY","lat":-27.227537,"lng":-55.837584,"tz":"America/Asuncion"},{"iata":"ENU","icao":"DNEN","name":"Akanu Ibiam International Airport","city":"Enegu","country":"NG","lat":6.473718,"lng":7.560463,"tz":"Africa/Lagos"},{"iata":"ENY","icao":"ZLYA","name":"Yan'an Nanniwan Airport","city":"Yan'an (Baota)","country":"CN","lat":36.479413,"lng":109.464083,"tz":"Asia/Shanghai"},{"iata":"EOH","icao":"SKMD","name":"Enrique Olaya Herrera Airport","city":"Medellín","country":"CO","lat":6.219686,"lng":-75.590597,"tz":"America/Bogota"},{"iata":"EOI","icao":"EGED","name":"Eday Airport","city":"Eday","country":"GB","lat":59.190601,"lng":-2.77222,"tz":"Europe/London"},{"iata":"EPR","icao":"YESP","name":"Esperance Airport","city":"Esperance","country":"AU","lat":-33.684399,"lng":121.822998,"tz":"Australia/Perth"},{"iata":"EPU","icao":"EEPU","name":"Pärnu Airport","city":"Pärnu","country":"EE","lat":58.418999,"lng":24.472799,"tz":"Europe/Tallinn"},{"iata":"EQS","icao":"SAVE","name":"Esquel Brigadier Antonio Parodi International Airport","city":"Esquel","country":"AR","lat":-42.908001,"lng":-71.139503,"tz":"America/Argentina/Catamarca"},{"iata":"ERC","icao":"LTCD","name":"Erzincan Airport","city":"Erzincan","country":"TR","lat":39.710201,"lng":39.527,"tz":"Europe/Istanbul"},{"iata":"ERF","icao":"EDDE","name":"Erfurt-Weimar Airport","city":"Erfurt","country":"DE","lat":50.978281,"lng":10.960713,"tz":"Europe/Berlin"},{"iata":"ERH","icao":"GMFK","name":"Moulay Ali Cherif Airport","city":"Errachidia","country":"MA","lat":31.9475,"lng":-4.39833,"tz":"Africa/Casablanca"},{"iata":"ERI","icao":"KERI","name":"Erie International Tom Ridge Field","city":"Erie","country":"US","lat":42.083127,"lng":-80.173867,"tz":"America/New_York"},{"iata":"ERL","icao":"ZBER","name":"Erenhot Saiwusu International Airport","city":"Erenhot","country":"CN","lat":43.424079,"lng":112.091081,"tz":"Asia/Shanghai"},{"iata":"ERS","icao":"FYWE","name":"Eros Airport","city":"Windhoek","country":"NA","lat":-22.60492,"lng":17.079002,"tz":"Africa/Windhoek"},{"iata":"ERZ","icao":"LTCE","name":"Erzurum International Airport","city":"Erzurum","country":"TR","lat":39.956501,"lng":41.1702,"tz":"Europe/Istanbul"},{"iata":"ESB","icao":"LTAC","name":"Esenboğa International Airport","city":"Ankara","country":"TR","lat":40.128101,"lng":32.995098,"tz":"Europe/Istanbul"},{"iata":"ESC","icao":"KESC","name":"Delta County Airport","city":"Escanaba","country":"US","lat":45.723199,"lng":-87.088623,"tz":"America/Detroit"},{"iata":"ESD","icao":"KORS","name":"Orcas Island Airport","city":"Eastsound","country":"US","lat":48.708199,"lng":-122.910004,"tz":"America/Los_Angeles"},{"iata":"ESL","icao":"URWI","name":"Elista Airport","city":"Elista","country":"RU","lat":46.373901,"lng":44.330898,"tz":"Europe/Moscow"},{"iata":"ESM","icao":"SETN","name":"Carlos Concha Torres International Airport","city":"Tachina","country":"EC","lat":0.978519,"lng":-79.626602,"tz":"America/Guayaquil"},{"iata":"ESR","icao":"SCES","name":"Ricardo García Posada Airport","city":"El Salvador","country":"CL","lat":-26.3111,"lng":-69.765198,"tz":"America/Santiago"},{"iata":"ESU","icao":"GMMI","name":"Essaouira-Mogador Airport","city":"Essaouira","country":"MA","lat":31.397499,"lng":-9.68167,"tz":"Africa/Casablanca"},{"iata":"ETM","icao":"LLER","name":"Ramon International Airport","city":"Eilat","country":"IL","lat":29.727009,"lng":35.014116,"tz":"Asia/Amman"},{"iata":"ETR","icao":"SERO","name":"Santa Rosa - Artillery Colonel Victor Larrea International Airport","city":"Santa Rosa","country":"EC","lat":-3.441986,"lng":-79.996957,"tz":"America/Guayaquil"},{"iata":"ETZ","icao":"LFJL","name":"Metz-Nancy-Lorraine Airport","city":"Goin","country":"FR","lat":48.982101,"lng":6.25132,"tz":"Europe/Paris"},{"iata":"EUG","icao":"KEUG","name":"Eugene Airport","city":"Eugene","country":"US","lat":44.124599,"lng":-123.211998,"tz":"America/Los_Angeles"},{"iata":"EUN","icao":"GMML","name":"Laayoune Hassan I International Airport","city":"El Aaiún","country":"EH","lat":27.142467,"lng":-13.224947,"tz":"Africa/El_Aaiun"},{"iata":"EUX","icao":"TNCE","name":"F. D. Roosevelt Airport","city":"Oranjestad","country":"BQ","lat":17.4965,"lng":-62.979401,"tz":"America/Kralendijk"},{"iata":"EVE","icao":"ENEV","name":"Harstad/Narvik Airport","city":"Evenes","country":"NO","lat":68.491302,"lng":16.678101,"tz":"Europe/Oslo"},{"iata":"EVN","icao":"UDYZ","name":"Zvartnots International Airport","city":"Yerevan","country":"AM","lat":40.148941,"lng":44.397887,"tz":"Asia/Yerevan"},{"iata":"EVV","icao":"KEVV","name":"Evansville Regional Airport","city":"Evansville","country":"US","lat":38.036999,"lng":-87.532402,"tz":"America/Chicago"},{"iata":"EWB","icao":"KEWB","name":"New Bedford Regional Airport","city":"New Bedford","country":"US","lat":41.676102,"lng":-70.956902,"tz":"America/New_York"},{"iata":"EWN","icao":"KEWN","name":"Coastal Carolina Regional Airport","city":"New Bern","country":"US","lat":35.073002,"lng":-77.0429,"tz":"America/New_York"},{"iata":"EWR","icao":"KEWR","name":"Newark Liberty International Airport","city":"Newark","country":"US","lat":40.6894,"lng":-74.170545,"tz":"America/New_York"},{"iata":"EXT","icao":"EGTE","name":"Exeter International Airport","city":"Exeter, Devon","country":"GB","lat":50.734261,"lng":-3.413984,"tz":"Europe/London"},{"iata":"EYK","icao":"USHQ","name":"Beloyarskiy Airport","city":"","country":"RU","lat":63.686901,"lng":66.698601,"tz":"Asia/Yekaterinburg"},{"iata":"EYP","icao":"SKYP","name":"El Alcaravan - Yopal Airport","city":"Yopal","country":"CO","lat":5.31911,"lng":-72.384,"tz":"America/Bogota"},{"iata":"EYW","icao":"KEYW","name":"Key West International Airport","city":"Key West","country":"US","lat":24.556119,"lng":-81.759579,"tz":"America/New_York"},{"iata":"EZE","icao":"SAEZ","name":"Ezeiza International Airport - Ministro Pistarini","city":"Buenos Aires (Ezeiza)","country":"AR","lat":-34.8222,"lng":-58.5358,"tz":"America/Argentina/Buenos_Aires"},{"iata":"EZS","icao":"LTCA","name":"Elazığ Airport","city":"Elazığ","country":"TR","lat":38.597974,"lng":39.28348,"tz":"Europe/Istanbul"},{"iata":"FAE","icao":"EKVG","name":"Vágar Airport","city":"Vágar","country":"FO","lat":62.063256,"lng":-7.275782,"tz":"Atlantic/Faroe"},{"iata":"FAI","icao":"PAFA","name":"Fairbanks International Airport","city":"Fairbanks","country":"US","lat":64.815102,"lng":-147.856003,"tz":"America/Anchorage"},{"iata":"FAO","icao":"LPFR","name":"Faro - Gago Coutinho International Airport","city":"Faro","country":"PT","lat":37.015909,"lng":-7.970939,"tz":"Europe/Lisbon"},{"iata":"FAR","icao":"KFAR","name":"Hector International Airport","city":"Fargo","country":"US","lat":46.9207,"lng":-96.815804,"tz":"America/Chicago"},{"iata":"FAT","icao":"KFAT","name":"Fresno Yosemite International Airport","city":"Fresno","country":"US","lat":36.775767,"lng":-119.718018,"tz":"America/Los_Angeles"},{"iata":"FAV","icao":"NTGF","name":"Fakarava Airport","city":"","country":"PF","lat":-16.0541,"lng":-145.656998,"tz":"Pacific/Tahiti"},{"iata":"FAY","icao":"KFAY","name":"Fayetteville Regional Airport - Grannis Field","city":"Fayetteville","country":"US","lat":34.991199,"lng":-78.880302,"tz":"America/New_York"},{"iata":"FBM","icao":"FZQA","name":"Lubumbashi International Airport","city":"Lubumbashi","country":"CD","lat":-11.591494,"lng":27.530753,"tz":"Africa/Lubumbashi"},{"iata":"FCA","icao":"KGPI","name":"Glacier Park International Airport","city":"Kalispell","country":"US","lat":48.310501,"lng":-114.255997,"tz":"America/Denver"},{"iata":"FCN","icao":"ETMN","name":"Sea-Airport Cuxhaven/Nordholz / Nordholz Naval Airbase","city":"Wurster Nordseeküste","country":"DE","lat":53.767689,"lng":8.659201,"tz":"Europe/Berlin"},{"iata":"FCO","icao":"LIRF","name":"Rome–Fiumicino Leonardo da Vinci International Airport","city":"Rome","country":"IT","lat":41.804532,"lng":12.251998,"tz":"Europe/Rome"},{"iata":"FDF","icao":"TFFF","name":"Martinique Aimé Césaire International Airport","city":"Fort-de-France","country":"MQ","lat":14.591,"lng":-61.003201,"tz":"America/Martinique"},{"iata":"FDH","icao":"EDNY","name":"Bodensee Airport Friedrichshafen","city":"Friedrichshafen","country":"DE","lat":47.671299,"lng":9.51149,"tz":"Europe/Berlin"},{"iata":"FDU","icao":"FZBO","name":"Bandundu Airport","city":"Bandundu","country":"CD","lat":-3.31132,"lng":17.381701,"tz":"Africa/Kinshasa"},{"iata":"FEC","icao":null,"name":"João Durval Carneiro Airport","city":"Feira de Santana","country":"BR","lat":-12.200694,"lng":-38.906164,"tz":"America/Bahia"},{"iata":"FEG","icao":"UZFF","name":"Fergana International Airport","city":"Fergana","country":"UZ","lat":40.358799,"lng":71.745003,"tz":"Asia/Tashkent"},{"iata":"FEN","icao":"SBFN","name":"Fernando de Noronha Airport","city":"Fernando de Noronha","country":"BR","lat":-3.854534,"lng":-32.423017,"tz":"America/Noronha"},{"iata":"FEZ","icao":"GMFF","name":"Fes Saïss International Airport","city":"Saïss","country":"MA","lat":33.927299,"lng":-4.97796,"tz":"Africa/Casablanca"},{"iata":"FGU","icao":"NTGB","name":"Fangatau Airport","city":"Fangatau","country":"PF","lat":-15.820044,"lng":-140.888071,"tz":"Pacific/Tahiti"},{"iata":"FIH","icao":"FZAA","name":"Ndjili International Airport","city":"Kinshasa","country":"CD","lat":-4.38575,"lng":15.4446,"tz":"Africa/Kinshasa"},{"iata":"FIZ","icao":"YFTZ","name":"Fitzroy Crossing Airport","city":"","country":"AU","lat":-18.183596,"lng":125.559783,"tz":"Australia/Perth"},{"iata":"FJR","icao":"OMFJ","name":"Fujairah International Airport","city":"Fujairah","country":"AE","lat":25.108411,"lng":56.328061,"tz":"Asia/Dubai"},{"iata":"FKB","icao":"EDSB","name":"Karlsruhe Baden-Baden Airport","city":"Rheinmünster","country":"DE","lat":48.7794,"lng":8.0805,"tz":"Europe/Berlin"},{"iata":"FKI","icao":"FZIC","name":"Bangoka International Airport","city":"Kisangani","country":"CD","lat":0.481639,"lng":25.337999,"tz":"Africa/Lubumbashi"},{"iata":"FKQ","icao":"WASF","name":"Fakfak Airport","city":"Fakfak","country":"ID","lat":-2.920508,"lng":132.267011,"tz":"Asia/Jayapura"},{"iata":"FKS","icao":"RJSF","name":"Fukushima Airport","city":"Sukagawa","country":"JP","lat":37.227402,"lng":140.431,"tz":"Asia/Tokyo"},{"iata":"FLA","icao":"SKFL","name":"Gustavo Artunduaga Paredes Airport","city":"Florencia","country":"CO","lat":1.58919,"lng":-75.5644,"tz":"America/Bogota"},{"iata":"FLG","icao":"KFLG","name":"Flagstaff Pulliam Airport","city":"Flagstaff","country":"US","lat":35.139757,"lng":-111.669826,"tz":"America/Phoenix"},{"iata":"FLL","icao":"KFLL","name":"Fort Lauderdale Hollywood International Airport","city":"Fort Lauderdale","country":"US","lat":26.072599,"lng":-80.152702,"tz":"America/New_York"},{"iata":"FLN","icao":"SBFL","name":"Hercílio Luz International Airport","city":"Florianópolis","country":"BR","lat":-27.670279,"lng":-48.552502,"tz":"America/Sao_Paulo"},{"iata":"FLO","icao":"KFLO","name":"Florence Regional Airport","city":"Florence","country":"US","lat":34.185398,"lng":-79.7239,"tz":"America/New_York"},{"iata":"FLR","icao":"LIRQ","name":"Florence Airport, Peretola","city":"Firenze (FI)","country":"IT","lat":43.808558,"lng":11.202822,"tz":"Europe/Rome"},{"iata":"FLW","icao":"LPFL","name":"Flores Airport","city":"Santa Cruz das Flores","country":"PT","lat":39.455299,"lng":-31.131399,"tz":"Atlantic/Azores"},{"iata":"FLZ","icao":"WIMS","name":"Dr. Ferdinand Lumban Tobing Airport","city":"Sibolga (Pinangsori)","country":"ID","lat":1.557127,"lng":98.887145,"tz":"Asia/Jakarta"},{"iata":"FMA","icao":"SARF","name":"Formosa National Airport","city":"Formosa","country":"AR","lat":-26.2127,"lng":-58.2281,"tz":"America/Argentina/Cordoba"},{"iata":"FMI","icao":"FZRF","name":"Kalemie Airport","city":"Kalemie","country":"CD","lat":-5.87556,"lng":29.25,"tz":"Africa/Lubumbashi"},{"iata":"FMM","icao":"EDJA","name":"Memmingen Allgau Airport","city":"Memmingen","country":"DE","lat":47.988092,"lng":10.238248,"tz":"Europe/Berlin"},{"iata":"FMO","icao":"EDDG","name":"Münster Osnabrück Airport","city":"Greven","country":"DE","lat":52.133816,"lng":7.688482,"tz":"Europe/Berlin"},{"iata":"FNA","icao":"GFLL","name":"Lungi International Airport","city":"Freetown (Lungi-Town)","country":"SL","lat":8.61644,"lng":-13.1955,"tz":"Africa/Freetown"},{"iata":"FNC","icao":"LPMA","name":"Cristiano Ronaldo International Airport","city":"Funchal","country":"PT","lat":32.697812,"lng":-16.774613,"tz":"Atlantic/Madeira"},{"iata":"FNI","icao":"LFTW","name":"Nîmes-Arles-Camargue Airport","city":"Nîmes/Garons","country":"FR","lat":43.757401,"lng":4.41635,"tz":"Europe/Paris"},{"iata":"FNJ","icao":"ZKPY","name":"Pyongyang Sunan International Airport","city":"Pyongyang","country":"KP","lat":39.224098,"lng":125.669998,"tz":"Asia/Pyongyang"},{"iata":"FNT","icao":"KFNT","name":"Bishop International Airport","city":"Flint","country":"US","lat":42.969294,"lng":-83.743355,"tz":"America/Detroit"},{"iata":"FOC","icao":"ZSFZ","name":"Fuzhou Changle International Airport","city":"Fuzhou (Changle)","country":"CN","lat":25.929254,"lng":119.672524,"tz":"Asia/Shanghai"},{"iata":"FOD","icao":"KFOD","name":"Fort Dodge Regional Airport","city":"Fort Dodge","country":"US","lat":42.552624,"lng":-94.191237,"tz":"America/Chicago"},{"iata":"FOG","icao":"LIBF","name":"Foggia Gino Lisa Airport","city":"Foggia (FG)","country":"IT","lat":41.433596,"lng":15.534566,"tz":"Europe/Rome"},{"iata":"FON","icao":"MRAN","name":"La Fortuna Arenal Airport","city":"La Fortuna","country":"CR","lat":10.469311,"lng":-84.579073,"tz":"America/Costa_Rica"},{"iata":"FOR","icao":"SBFZ","name":"Pinto Martins International Airport","city":"Fortaleza","country":"BR","lat":-3.775833,"lng":-38.532222,"tz":"America/Fortaleza"},{"iata":"FPO","icao":"MYGF","name":"Grand Bahama International Airport","city":"Freeport","country":"BS","lat":26.557996,"lng":-78.695583,"tz":"America/Nassau"},{"iata":"FRA","icao":"EDDF","name":"Frankfurt Main Airport","city":"Frankfurt am Main","country":"DE","lat":50.026706,"lng":8.55835,"tz":"Europe/Berlin"},{"iata":"FRD","icao":"KFHR","name":"Friday Harbor Airport","city":"Friday Harbor","country":"US","lat":48.523654,"lng":-123.024645,"tz":"America/Los_Angeles"},{"iata":"FRL","icao":"LIPK","name":"Forlì-Luigi Ridolfi International Airport","city":"Forlì (FC)","country":"IT","lat":44.194801,"lng":12.0701,"tz":"Europe/Rome"},{"iata":"FRO","icao":"ENFL","name":"Florø Airport","city":"Florø","country":"NO","lat":61.583599,"lng":5.02472,"tz":"Europe/Oslo"},{"iata":"FRS","icao":null,"name":"Mundo Maya International Airport","city":"San Benito","country":"GT","lat":16.913707,"lng":-89.866143,"tz":"America/Guatemala"},{"iata":"FRW","icao":"FBPM","name":"Phillip Gaonwe Matante International Airport","city":"Francistown","country":"BW","lat":-21.159183,"lng":27.468826,"tz":"Africa/Gaborone"},{"iata":"FSC","icao":"LFKF","name":"Figari Sud-Corse Airport","city":"Figari","country":"FR","lat":41.50185,"lng":9.097092,"tz":"Europe/Paris"},{"iata":"FSD","icao":"KFSD","name":"Sioux Falls Regional Airport","city":"Sioux Falls","country":"US","lat":43.585463,"lng":-96.741152,"tz":"America/Chicago"},{"iata":"FSM","icao":"KFSM","name":"Fort Smith Regional Airport","city":"Fort Smith","country":"US","lat":35.336601,"lng":-94.367401,"tz":"America/Chicago"},{"iata":"FSP","icao":"LFVP","name":"Saint-Pierre Pointe-Blanche Airport","city":"Saint-Pierre","country":"PM","lat":46.762651,"lng":-56.17499,"tz":"America/St_Johns"},{"iata":"FSZ","icao":"RJNS","name":"Mount Fuji Shizuoka Airport","city":"Makinohara / Shimada","country":"JP","lat":34.795022,"lng":138.190976,"tz":"Asia/Tokyo"},{"iata":"FTE","icao":null,"name":"El Calafate - Commander Armando Tola International Airport","city":"El Calafate","country":"AR","lat":-50.281997,"lng":-72.053949,"tz":"America/Argentina/Rio_Gallegos"},{"iata":"FTU","icao":"FMSD","name":"Tôlanaro Airport","city":"Tôlanaro","country":"MG","lat":-25.038099,"lng":46.9561,"tz":"Indian/Antananarivo"},{"iata":"FTW","icao":"KFTW","name":"Fort Worth Meacham International Airport","city":"Fort Worth","country":"US","lat":32.819919,"lng":-97.360818,"tz":"America/Chicago"},{"iata":"FUE","icao":"GCFV","name":"Fuerteventura Airport","city":"El Matorral","country":"ES","lat":28.4527,"lng":-13.8638,"tz":"Atlantic/Canary"},{"iata":"FUG","icao":"ZSFY","name":"Fuyang Xiguan Airport","city":"Yingzhou, Fuyang","country":"CN","lat":32.882157,"lng":115.734364,"tz":"Asia/Shanghai"},{"iata":"FUJ","icao":"RJFE","name":"Fukue Airport","city":"Goto","country":"JP","lat":32.666302,"lng":128.832993,"tz":"Asia/Tokyo"},{"iata":"FUK","icao":"RJFF","name":"Fukuoka Airport","city":"Fukuoka","country":"JP","lat":33.585899,"lng":130.451004,"tz":"Asia/Tokyo"},{"iata":"FUN","icao":"NGFU","name":"Funafuti International Airport","city":"Funafuti","country":"TV","lat":-8.523885,"lng":179.196976,"tz":"Pacific/Funafuti"},{"iata":"FUO","icao":"ZGFS","name":"Foshan Shadi Airport","city":"Foshan (Nanhai)","country":"CN","lat":23.0825,"lng":113.070833,"tz":"Asia/Shanghai"},{"iata":"FWA","icao":"KFWA","name":"Fort Wayne International Airport","city":"Fort Wayne","country":"US","lat":40.978896,"lng":-85.194465,"tz":"America/Indiana/Indianapolis"},{"iata":"FYJ","icao":"ZYFY","name":"Fuyuan Dongji Airport","city":"Fuyuan","country":"CN","lat":48.197219,"lng":134.36298,"tz":"Asia/Shanghai"},{"iata":"FYN","icao":"ZWFY","name":"Fuyun Koktokay Airport","city":"Fuyun","country":"CN","lat":46.804169,"lng":89.512006,"tz":"Asia/Urumqi"},{"iata":"FYU","icao":"PFYU","name":"Fort Yukon Airport","city":"Fort Yukon","country":"US","lat":66.571651,"lng":-145.249987,"tz":"America/Anchorage"},{"iata":"GAE","icao":"DTTG","name":"Gabès Matmata International Airport","city":"Gabès","country":"TN","lat":33.733691,"lng":9.91941,"tz":"Africa/Tunis"},{"iata":"GAF","icao":"DTTF","name":"Gafsa Ksar International Airport","city":"Gafsa","country":"TN","lat":34.422001,"lng":8.8225,"tz":"Africa/Tunis"},{"iata":"GAJ","icao":"RJSC","name":"Yamagata Airport","city":"Higashine","country":"JP","lat":38.4119,"lng":140.371002,"tz":"Asia/Tokyo"},{"iata":"GAL","icao":"PAGA","name":"Edward G. Pitka Sr Airport","city":"Galena","country":"US","lat":64.736198,"lng":-156.936997,"tz":"America/Anchorage"},{"iata":"GAM","icao":"PAGM","name":"Gambell Airport","city":"Gambell","country":"US","lat":63.767694,"lng":-171.733303,"tz":"Asia/Anadyr"},{"iata":"GAN","icao":"VRMG","name":"Gan International Airport","city":"Gan","country":"MV","lat":-0.692975,"lng":73.152627,"tz":"Indian/Maldives"},{"iata":"GAQ","icao":"GAGO","name":"Gao International Airport","city":"Gao","country":"ML","lat":16.248466,"lng":-0.005389,"tz":"Africa/Bamako"},{"iata":"GAU","icao":"VEGT","name":"Lokpriya Gopinath Bordoloi International Airport","city":"Guwahati","country":"IN","lat":26.106654,"lng":91.585226,"tz":"Asia/Kolkata"},{"iata":"GAY","icao":"VEGY","name":"Gaya Airport","city":"Gaya","country":"IN","lat":24.744301,"lng":84.951202,"tz":"Asia/Kolkata"},{"iata":"GBB","icao":"UBBQ","name":"Gabala International Airport","city":"Gabala","country":"AZ","lat":40.808617,"lng":47.725389,"tz":"Asia/Baku"},{"iata":"GBE","icao":"FBSK","name":"Sir Seretse Khama International Airport","city":"Gaborone","country":"BW","lat":-24.555201,"lng":25.9182,"tz":"Africa/Gaborone"},{"iata":"GBJ","icao":"TFFM","name":"Marie-Galante Airport","city":"Grand-Bourg","country":"GP","lat":15.868925,"lng":-61.270087,"tz":"America/Dominica"},{"iata":"GCC","icao":"KGCC","name":"Northeast Wyoming Regional Airport","city":"Gillette","country":"US","lat":44.3489,"lng":-105.539001,"tz":"America/Denver"},{"iata":"GCH","icao":"OIAH","name":"Gachsaran Airport","city":"Gachsaran","country":"IR","lat":30.333869,"lng":50.833796,"tz":"Asia/Tehran"},{"iata":"GCI","icao":"EGJB","name":"Guernsey Airport","city":"Saint Peter Port","country":"GG","lat":49.435001,"lng":-2.60197,"tz":"Europe/Guernsey"},{"iata":"GCK","icao":"KGCK","name":"Garden City Regional Airport","city":"Garden City","country":"US","lat":37.927502,"lng":-100.723999,"tz":"America/Chicago"},{"iata":"GCM","icao":"MWCR","name":"Owen Roberts International Airport","city":"George Town","country":"KY","lat":19.292801,"lng":-81.357697,"tz":"America/Cayman"},{"iata":"GCN","icao":"KGCN","name":"Grand Canyon National Park Airport","city":"Grand Canyon - Tusayan","country":"US","lat":35.9524,"lng":-112.147003,"tz":"America/Phoenix"},{"iata":"GDB","icao":"VAGD","name":"Gondia Airport","city":"Gondia","country":"IN","lat":21.526817,"lng":80.290347,"tz":"Asia/Kolkata"},{"iata":"GDE","icao":"HAGO","name":"Gode Airport","city":"Gode","country":"ET","lat":5.93513,"lng":43.578602,"tz":"Africa/Addis_Ababa"},{"iata":"GDL","icao":"MMGL","name":"Guadalajara International Airport","city":"Guadalajara","country":"MX","lat":20.523342,"lng":-103.310108,"tz":"America/Mexico_City"},{"iata":"GDN","icao":"EPGD","name":"Gdańsk Lech Wałęsa Airport","city":"Gdańsk","country":"PL","lat":54.377602,"lng":18.4662,"tz":"Europe/Warsaw"},{"iata":"GDQ","icao":"HAGN","name":"Gondar Airport","city":"Azezo","country":"ET","lat":12.5199,"lng":37.433998,"tz":"Africa/Addis_Ababa"},{"iata":"GDT","icao":"MBGT","name":"JAGS McCartney International Airport","city":"Cockburn Town","country":"TC","lat":21.4445,"lng":-71.142303,"tz":"America/Santo_Domingo"},{"iata":"GDV","icao":"KGDV","name":"Dawson Community Airport","city":"Glendive","country":"US","lat":47.137658,"lng":-104.80691,"tz":"America/Denver"},{"iata":"GDX","icao":"UHMM","name":"Sokol Airport","city":"Magadan","country":"RU","lat":59.910999,"lng":150.720001,"tz":"Asia/Magadan"},{"iata":"GDZ","icao":"URKG","name":"Gelendzhik Airport","city":"Gelendzhik","country":"RU","lat":44.582093,"lng":38.012481,"tz":"Europe/Moscow"},{"iata":"GEA","icao":"NWWM","name":"Nouméa Magenta Airport","city":"Nouméa","country":"NC","lat":-22.257706,"lng":166.472822,"tz":"Pacific/Noumea"},{"iata":"GEC","icao":"LCGK","name":"Lefkoniko Airport / Geçitkale Air Base","city":"Lefkoniko (Geçitkale)","country":"CY","lat":35.23591,"lng":33.720088,"tz":"Asia/Famagusta"},{"iata":"GEG","icao":"KGEG","name":"Spokane International Airport","city":"Spokane","country":"US","lat":47.6199,"lng":-117.533997,"tz":"America/Los_Angeles"},{"iata":"GEL","icao":"SBNM","name":"Santo Ângelo Airport","city":"Santo Ângelo","country":"BR","lat":-28.282503,"lng":-54.169623,"tz":"America/Sao_Paulo"},{"iata":"GEO","icao":"SYCJ","name":"Cheddi Jagan International Airport","city":"Georgetown","country":"GY","lat":6.49855,"lng":-58.254101,"tz":"America/Guyana"},{"iata":"GER","icao":"MUNG","name":"Rafael Cabrera Airport","city":"Nueva Gerona","country":"CU","lat":21.8347,"lng":-82.783798,"tz":"America/Havana"},{"iata":"GES","icao":"RPMR","name":"General Santos International Airport","city":"General Santos","country":"PH","lat":6.057208,"lng":125.096243,"tz":"Asia/Manila"},{"iata":"GET","icao":"YGEL","name":"Geraldton Airport","city":"Moonyoonooka","country":"AU","lat":-28.796101,"lng":114.707001,"tz":"Australia/Perth"},{"iata":"GEV","icao":"ESNG","name":"Gällivare Airport","city":"Gällivare","country":"SE","lat":67.132401,"lng":20.8146,"tz":"Europe/Stockholm"},{"iata":"GFF","icao":"YGTH","name":"Griffith Airport","city":"Griffith","country":"AU","lat":-34.250801,"lng":146.067001,"tz":"Australia/Sydney"},{"iata":"GFK","icao":"KGFK","name":"Grand Forks International Airport","city":"Grand Forks","country":"US","lat":47.949299,"lng":-97.176102,"tz":"America/Chicago"},{"iata":"GGG","icao":"KGGG","name":"East Texas Regional Airport","city":"Longview","country":"US","lat":32.383999,"lng":-94.711502,"tz":"America/Chicago"},{"iata":"GGT","icao":"MYEF","name":"Exuma International Airport","city":"Moss Town","country":"BS","lat":23.562599,"lng":-75.877998,"tz":"America/Nassau"},{"iata":"GGW","icao":"KGGW","name":"Glasgow Valley County Airport Wokal Field","city":"Glasgow","country":"US","lat":48.212502,"lng":-106.614998,"tz":"America/Denver"},{"iata":"GHA","icao":"DAUG","name":"Noumérat - Moufdi Zakaria Airport","city":"El Atteuf","country":"DZ","lat":32.384102,"lng":3.79411,"tz":"Africa/Algiers"},{"iata":"GHB","icao":"MYEM","name":"Governor's Harbour Airport","city":"Governor's Harbour","country":"BS","lat":25.2847,"lng":-76.331001,"tz":"America/Nassau"},{"iata":"GHT","icao":"HLGT","name":"Ghat Airport","city":"Ghat","country":"LY","lat":25.145599,"lng":10.1426,"tz":"Africa/Tripoli"},{"iata":"GHV","icao":"LRBV","name":"Brașov-Ghimbav International Airport","city":"Brașov (Ghimbav)","country":"RO","lat":45.70558,"lng":25.522871,"tz":"Europe/Bucharest"},{"iata":"GIB","icao":"LXGB","name":"Gibraltar Airport","city":"Gibraltar","country":"GI","lat":36.151679,"lng":-5.34978,"tz":"Europe/Gibraltar"},{"iata":"GID","icao":"HBBE","name":"Gitega Airport","city":"Gitega","country":"BI","lat":-3.417209,"lng":29.911308,"tz":"Africa/Bujumbura"},{"iata":"GIG","icao":"SBGL","name":"Rio Galeão – Tom Jobim International Airport","city":"Rio De Janeiro","country":"BR","lat":-22.809999,"lng":-43.250557,"tz":"America/Sao_Paulo"},{"iata":"GIL","icao":"OPGT","name":"Gilgit Airport","city":"Gilgit","country":"PK","lat":35.9188,"lng":74.333603,"tz":"Asia/Karachi"},{"iata":"GIS","icao":"NZGS","name":"Gisborne Airport","city":"Gisborne","country":"NZ","lat":-38.6633,"lng":177.977997,"tz":"Pacific/Auckland"},{"iata":"GIZ","icao":"OEGN","name":"Jizan Regional Airport / King Abdullah bin Abdulaziz Airport","city":"Jizan","country":"SA","lat":16.9011,"lng":42.5858,"tz":"Asia/Riyadh"},{"iata":"GJA","icao":"MHNJ","name":"La Laguna Airport","city":"Guanaja","country":"HN","lat":16.4454,"lng":-85.906601,"tz":"America/Tegucigalpa"},{"iata":"GJL","icao":"DAAV","name":"Jijel Ferhat Abbas Airport","city":"Tahir","country":"DZ","lat":36.794125,"lng":5.873652,"tz":"Africa/Algiers"},{"iata":"GJT","icao":"KGJT","name":"Grand Junction Regional Airport","city":"Grand Junction","country":"US","lat":39.126663,"lng":-108.529387,"tz":"America/Denver"},{"iata":"GKA","icao":"AYGA","name":"Goroka Airport","city":"Goronka","country":"PG","lat":-6.08169,"lng":145.391998,"tz":"Pacific/Port_Moresby"},{"iata":"GKN","icao":"PAGK","name":"Gulkana Airport","city":"Gulkana","country":"US","lat":62.155859,"lng":-145.454662,"tz":"America/Anchorage"},{"iata":"GLA","icao":"EGPF","name":"Glasgow Airport","city":"Glasgow","country":"GB","lat":55.871899,"lng":-4.43306,"tz":"Europe/London"},{"iata":"GLF","icao":"MRGF","name":"Golfito Airport","city":"Golfito","country":"CR","lat":8.65401,"lng":-83.182198,"tz":"America/Costa_Rica"},{"iata":"GLH","icao":"KGLH","name":"Mid Delta Regional Airport","city":"Greenville","country":"US","lat":33.482899,"lng":-90.985603,"tz":"America/Chicago"},{"iata":"GLT","icao":"YGLA","name":"Gladstone Airport","city":"Gladstone","country":"AU","lat":-23.869763,"lng":151.225439,"tz":"Australia/Brisbane"},{"iata":"GMA","icao":"FZFK","name":"Gemena Airport","city":"Gemena","country":"CD","lat":3.23537,"lng":19.771299,"tz":"Africa/Kinshasa"},{"iata":"GMB","icao":"HAGM","name":"Gambela Airport","city":"Gambela","country":"ET","lat":8.12876,"lng":34.563099,"tz":"Africa/Addis_Ababa"},{"iata":"GME","icao":"UMGG","name":"Gomel Airport","city":"Gomel","country":"BY","lat":52.527,"lng":31.016701,"tz":"Europe/Minsk"},{"iata":"GMO","icao":"DNGO","name":"Gombe Lawanti International Airport","city":"Gombe","country":"NG","lat":10.298889,"lng":10.9,"tz":"Africa/Lagos"},{"iata":"GMP","icao":"RKSS","name":"Gimpo International Airport","city":"Seoul","country":"KR","lat":37.5583,"lng":126.791,"tz":"Asia/Seoul"},{"iata":"GMQ","icao":"ZLGL","name":"Golog Maqên Airport","city":"Golog (Maqên)","country":"CN","lat":34.418066,"lng":100.301144,"tz":"Asia/Shanghai"},{"iata":"GMR","icao":"NTGJ","name":"Totegegie Airport","city":"","country":"PF","lat":-23.079901,"lng":-134.889999,"tz":"Pacific/Gambier"},{"iata":"GNB","icao":"LFLS","name":"Grenoble Alpes Isère Airport","city":"Grenoble","country":"FR","lat":45.3629,"lng":5.32937,"tz":"Europe/Paris"},{"iata":"GND","icao":"TGPY","name":"Maurice Bishop International Airport","city":"Saint George's","country":"GD","lat":12.003996,"lng":-61.785302,"tz":"America/Grenada"},{"iata":"GNJ","icao":"UBBG","name":"Ganja International Airport","city":"Ganja","country":"AZ","lat":40.738692,"lng":46.320383,"tz":"Asia/Baku"},{"iata":"GNS","icao":"WIMB","name":"Binaka Airport","city":"Gunungsitoli","country":"ID","lat":1.166275,"lng":97.705196,"tz":"Asia/Jakarta"},{"iata":"GNV","icao":"KGNV","name":"Gainesville Regional Airport","city":"Gainesville","country":"US","lat":29.6901,"lng":-82.271797,"tz":"America/New_York"},{"iata":"GNY","icao":"LTCS","name":"Şanlıurfa GAP Airport","city":"Şanlıurfa","country":"TR","lat":37.445663,"lng":38.895592,"tz":"Europe/Istanbul"},{"iata":"GOA","icao":"LIMJ","name":"Genoa Cristoforo Colombo Airport","city":"Genova (GE)","country":"IT","lat":44.412039,"lng":8.840732,"tz":"Europe/Rome"},{"iata":"GOH","icao":"BGGH","name":"Nuuk International Airport","city":"Nuuk","country":"GL","lat":64.191066,"lng":-51.67914,"tz":"America/Godthab"},{"iata":"GOI","icao":"VOGO","name":"Goa Dabolim International Airport","city":"Vasco da Gama","country":"IN","lat":15.380062,"lng":73.833328,"tz":"Asia/Kolkata"},{"iata":"GOJ","icao":"UWGG","name":"Nizhny Novgorod / Strigino International Airport","city":"Nizhny Novgorod","country":"RU","lat":56.227351,"lng":43.785152,"tz":"Europe/Moscow"},{"iata":"GOM","icao":"FZNA","name":"Goma International Airport","city":"Goma","country":"CD","lat":-1.666758,"lng":29.238037,"tz":"Africa/Lubumbashi"},{"iata":"GOP","icao":"VEGK","name":"Gorakhpur Airport","city":"Gorakhpur","country":"IN","lat":26.7397,"lng":83.449699,"tz":"Asia/Kolkata"},{"iata":"GOQ","icao":"ZLGM","name":"Golmud Airport","city":"Golmud","country":"CN","lat":36.4006,"lng":94.786102,"tz":"Asia/Shanghai"},{"iata":"GOT","icao":"ESGG","name":"Göteborg Landvetter Airport","city":"Göteborg","country":"SE","lat":57.6628,"lng":12.2798,"tz":"Europe/Stockholm"},{"iata":"GOU","icao":"FKKR","name":"Garoua International Airport","city":"Garoua","country":"CM","lat":9.334785,"lng":13.372129,"tz":"Africa/Douala"},{"iata":"GOV","icao":"YPGV","name":"Gove Airport","city":"Nhulunbuy","country":"AU","lat":-12.2694,"lng":136.817993,"tz":"Australia/Darwin"},{"iata":"GOX","icao":"VOGA","name":"Manohar International Airport","city":"Mopa","country":"IN","lat":15.744257,"lng":73.860625,"tz":"Asia/Kolkata"},{"iata":"GPA","icao":"LGRX","name":"Patras Araxos Agamemnon Airport","city":"Patras","country":"GR","lat":38.1511,"lng":21.4256,"tz":"Europe/Athens"},{"iata":"GPI","icao":"SKGP","name":"Guapi Airport","city":"Guapi","country":"CO","lat":2.57013,"lng":-77.897969,"tz":"America/Bogota"},{"iata":"GPS","icao":"SEGS","name":"Seymour Galapagos Ecological Airport","city":"Isla Baltra","country":"EC","lat":-0.453758,"lng":-90.2659,"tz":"Pacific/Galapagos"},{"iata":"GPT","icao":"KGPT","name":"Gulfport Biloxi International Airport","city":"Gulfport","country":"US","lat":30.405582,"lng":-89.069836,"tz":"America/Chicago"},{"iata":"GRB","icao":"KGRB","name":"Austin Straubel International Airport","city":"Green Bay","country":"US","lat":44.483459,"lng":-88.130805,"tz":"America/Chicago"},{"iata":"GRI","icao":"KGRI","name":"Central Nebraska Regional Airport","city":"Grand Island","country":"US","lat":40.967499,"lng":-98.309601,"tz":"America/Chicago"},{"iata":"GRJ","icao":"FAGG","name":"George Airport","city":"George","country":"ZA","lat":-34.0056,"lng":22.378902,"tz":"Africa/Johannesburg"},{"iata":"GRK","icao":"KGRK","name":"Killeen Regional Airport / Robert Gray Army Airfield","city":"Fort Cavazos","country":"US","lat":31.0672,"lng":-97.828903,"tz":"America/Chicago"},{"iata":"GRO","icao":"LEGE","name":"Girona-Costa Brava Airport","city":"Girona","country":"ES","lat":41.904639,"lng":2.761774,"tz":"Europe/Madrid"},{"iata":"GRQ","icao":"EHGG","name":"Groningen Airport Eelde","city":"Groningen","country":"NL","lat":53.119107,"lng":6.577652,"tz":"Europe/Amsterdam"},{"iata":"GRR","icao":"KGRR","name":"Gerald R. Ford International Airport","city":"Grand Rapids","country":"US","lat":42.880798,"lng":-85.522797,"tz":"America/Detroit"},{"iata":"GRU","icao":"SBGR","name":"São Paulo/Guarulhos–Governor André Franco Montoro International Airport","city":"São Paulo","country":"BR","lat":-23.431274,"lng":-46.469954,"tz":"America/Sao_Paulo"},{"iata":"GRV","icao":"URMG","name":"Akhmat Kadyrov Grozny International Airport","city":"Grozny","country":"RU","lat":43.388106,"lng":45.699772,"tz":"Europe/Moscow"},{"iata":"GRW","icao":"LPGR","name":"Graciosa Airport","city":"Santa Cruz da Graciosa","country":"PT","lat":39.092201,"lng":-28.0298,"tz":"Atlantic/Azores"},{"iata":"GRX","icao":"LEGR","name":"F.G.L. Airport Granada-Jaén Airport","city":"Granada","country":"ES","lat":37.188702,"lng":-3.77736,"tz":"Europe/Madrid"},{"iata":"GRY","icao":"BIGR","name":"Grímsey Airport","city":"Grímsey/Sandvík","country":"IS","lat":66.5458,"lng":-18.0173,"tz":"Atlantic/Reykjavik"},{"iata":"GRZ","icao":"LOWG","name":"Graz Airport","city":"Feldkirchen bei Graz","country":"AT","lat":46.9911,"lng":15.4396,"tz":"Europe/Vienna"},{"iata":"GSM","icao":"OIKQ","name":"Qeshm International Airport","city":"Qeshm(Dayrestan)","country":"IR","lat":26.754639,"lng":55.902353,"tz":"Asia/Tehran"},{"iata":"GSO","icao":"KGSO","name":"Piedmont Triad International Airport","city":"Greensboro","country":"US","lat":36.09937,"lng":-79.937262,"tz":"America/New_York"},{"iata":"GSP","icao":"KGSP","name":"Greenville-Spartanburg International Airport","city":"Greenville/Greer/Spartanburg","country":"US","lat":34.895699,"lng":-82.218903,"tz":"America/New_York"},{"iata":"GST","icao":"PAGS","name":"Gustavus Airport","city":"Gustavus","country":"US","lat":58.425301,"lng":-135.707001,"tz":"America/Juneau"},{"iata":"GSV","icao":"UWSG","name":"Gagarin International Airport","city":"Saratov","country":"RU","lat":51.712778,"lng":46.171111,"tz":"Europe/Saratov"},{"iata":"GTE","icao":"YGTE","name":"Groote Eylandt Airport","city":"Groote Eylandt","country":"AU","lat":-13.972405,"lng":136.458553,"tz":"Australia/Darwin"},{"iata":"GTF","icao":"KGTF","name":"Great Falls International Airport","city":"Great Falls","country":"US","lat":47.481998,"lng":-111.371002,"tz":"America/Denver"},{"iata":"GTR","icao":"KGTR","name":"Golden Triangle Regional Airport","city":"Columbus/W Point/Starkville","country":"US","lat":33.450298,"lng":-88.5914,"tz":"America/Chicago"},{"iata":"GUA","icao":"MGGT","name":"La Aurora International Airport","city":"Guatemala City","country":"GT","lat":14.582896,"lng":-90.527515,"tz":"America/Guatemala"},{"iata":"GUC","icao":"KGUC","name":"Gunnison Crested Butte Regional Airport","city":"Gunnison","country":"US","lat":38.534672,"lng":-106.934566,"tz":"America/Denver"},{"iata":"GUM","icao":"PGUM","name":"Antonio B. Won Pat International Airport","city":"Hagåtña","country":"GU","lat":13.485,"lng":144.797282,"tz":"Pacific/Guam"},{"iata":"GUP","icao":"KGUP","name":"Gallup Municipal Airport","city":"Gallup","country":"US","lat":35.511653,"lng":-108.788166,"tz":"America/Denver"},{"iata":"GUR","icao":"AYGN","name":"Gurney Airport","city":"Gurney","country":"PG","lat":-10.3115,"lng":150.334,"tz":"Pacific/Port_Moresby"},{"iata":"GUW","icao":"UATG","name":"Atyrau International Airport","city":"Atyrau","country":"KZ","lat":47.121318,"lng":51.820343,"tz":"Asia/Atyrau"},{"iata":"GVA","icao":"LSGG","name":"Geneva International Airport","city":"Geneva","country":"CH","lat":46.238098,"lng":6.10895,"tz":"Europe/Zurich"},{"iata":"GVR","icao":"SBGV","name":"Coronel Altino Machado Airport","city":"Governador Valadares","country":"BR","lat":-18.895882,"lng":-41.982869,"tz":"America/Sao_Paulo"},{"iata":"GWD","icao":"OPGW","name":"New Gwadar International Airport","city":"Gurandani","country":"PK","lat":25.296733,"lng":62.498822,"tz":"Asia/Karachi"},{"iata":"GWL","icao":"VIGR","name":"Gwalior Airport","city":"Gwalior","country":"IN","lat":26.293301,"lng":78.227798,"tz":"Asia/Kolkata"},{"iata":"GWT","icao":"EDXW","name":"Westerland Sylt Airport","city":"Sylt","country":"DE","lat":54.9132,"lng":8.34047,"tz":"Europe/Berlin"},{"iata":"GXF","icao":"OYSY","name":"Seiyun Hadhramaut International Airport","city":"Seiyun","country":"YE","lat":15.965887,"lng":48.788146,"tz":"Asia/Aden"},{"iata":"GXG","icao":"FNNG","name":"Negage Airport","city":"Negage","country":"AO","lat":-7.75451,"lng":15.2877,"tz":"Africa/Luanda"},{"iata":"GXH","icao":"ZLXH","name":"Gannan Xiahe Airport","city":"Gannan (Xiahe)","country":"CN","lat":34.819014,"lng":102.622261,"tz":"Asia/Shanghai"},{"iata":"GYA","icao":null,"name":"Guayaramerín Airport","city":"Guayaramerín","country":"BO","lat":-10.88856,"lng":-65.380955,"tz":"America/Porto_Velho"},{"iata":"GYD","icao":"UBBB","name":"Heydar Aliyev International Airport","city":"Baku","country":"AZ","lat":40.47278,"lng":50.050931,"tz":"Asia/Baku"},{"iata":"GYE","icao":"SEGU","name":"José Joaquín de Olmedo International Airport","city":"Guayaquil","country":"EC","lat":-2.15742,"lng":-79.883598,"tz":"America/Guayaquil"},{"iata":"GYM","icao":"MMGM","name":"General José María Yáñez International Airport","city":"Guaymas","country":"MX","lat":27.969,"lng":-110.925003,"tz":"America/Hermosillo"},{"iata":"GYN","icao":"SBGO","name":"Santa Genoveva International Airport","city":"Goiânia","country":"BR","lat":-16.632,"lng":-49.220699,"tz":"America/Sao_Paulo"},{"iata":"GYS","icao":"ZUGU","name":"Guangyuan Panlong Airport","city":"Guangyuan (Lizhou)","country":"CN","lat":32.390254,"lng":105.694571,"tz":"Asia/Shanghai"},{"iata":"GYU","icao":"ZLGY","name":"Guyuan Liupanshan Airport","city":"Guyuan (Yuanzhou)","country":"CN","lat":36.078889,"lng":106.216944,"tz":"Asia/Shanghai"},{"iata":"GYY","icao":null,"name":"Gary/Chicago International Airport","city":"Gary","country":"US","lat":41.617087,"lng":-87.413206,"tz":"America/Chicago"},{"iata":"GZP","icao":"LTFG","name":"Gazipaşa-Alanya Airport","city":"Gazipaşa","country":"TR","lat":36.298832,"lng":32.297017,"tz":"Europe/Istanbul"},{"iata":"GZT","icao":"LTAJ","name":"Gaziantep Oğuzeli International Airport","city":"Gaziantep","country":"TR","lat":36.947201,"lng":37.478699,"tz":"Europe/Istanbul"},{"iata":"HAC","icao":"RJTH","name":"Hachijojima Airport","city":"Hachijojima","country":"JP","lat":33.114843,"lng":139.785645,"tz":"Asia/Tokyo"},{"iata":"HAD","icao":"ESMT","name":"Halmstad Airport","city":"Halmstad","country":"SE","lat":56.691101,"lng":12.8202,"tz":"Europe/Stockholm"},{"iata":"HAH","icao":"FMCH","name":"Prince Said Ibrahim International Airport","city":"Moroni","country":"KM","lat":-11.5337,"lng":43.2719,"tz":"Indian/Comoro"},{"iata":"HAJ","icao":"EDDV","name":"Hannover Airport","city":"Hannover","country":"DE","lat":52.461102,"lng":9.68508,"tz":"Europe/Berlin"},{"iata":"HAK","icao":"ZJHK","name":"Haikou Meilan International Airport","city":"Haikou (Meilan)","country":"CN","lat":19.9349,"lng":110.459,"tz":"Asia/Shanghai"},{"iata":"HAM","icao":"EDDH","name":"Hamburg Helmut Schmidt Airport","city":"Hamburg","country":"DE","lat":53.630402,"lng":9.98823,"tz":"Europe/Berlin"},{"iata":"HAN","icao":"VVNB","name":"Noi Bai International Airport","city":"Hanoi (Soc Son)","country":"VN","lat":21.221201,"lng":105.806999,"tz":"Asia/Bangkok"},{"iata":"HAQ","icao":"VRMH","name":"Hanimaadhoo International Airport","city":"Haa Dhaalu Atoll","country":"MV","lat":6.743235,"lng":73.167072,"tz":"Indian/Maldives"},{"iata":"HAS","icao":"OEHL","name":"Hail International Airport","city":"Hail","country":"SA","lat":27.437901,"lng":41.686298,"tz":"Asia/Riyadh"},{"iata":"HAU","icao":"ENHD","name":"Haugesund Airport, Karmøy","city":"Karmøy","country":"NO","lat":59.345299,"lng":5.20836,"tz":"Europe/Oslo"},{"iata":"HAV","icao":"MUHA","name":"José Martí International Airport","city":"Havana","country":"CU","lat":22.989201,"lng":-82.409103,"tz":"America/Havana"},{"iata":"HBA","icao":"YMHB","name":"Hobart International Airport","city":"Hobart (Cambridge)","country":"AU","lat":-42.837032,"lng":147.513022,"tz":"Australia/Hobart"},{"iata":"HBE","icao":"HEAX","name":"Alexandria International Airport","city":"Alexandria","country":"EG","lat":30.93249,"lng":29.696437,"tz":"Africa/Cairo"},{"iata":"HBX","icao":"VOHB","name":"Hubballi Airport","city":"Hubballi","country":"IN","lat":15.361084,"lng":75.082096,"tz":"Asia/Kolkata"},{"iata":"HCJ","icao":"ZGHC","name":"Hechi Jinchengjiang Airport","city":"Hechi (Jinchengjiang)","country":"CN","lat":24.804344,"lng":107.710819,"tz":"Asia/Shanghai"},{"iata":"HCR","icao":"PAHC","name":"Holy Cross Airport","city":"Holy Cross","country":"US","lat":62.188301,"lng":-159.774994,"tz":"America/Anchorage"},{"iata":"HCZ","icao":"ZGCZ","name":"Chenzhou Beihu Airport","city":"Chenzhou","country":"CN","lat":25.753419,"lng":112.845404,"tz":"Asia/Shanghai"},{"iata":"HDF","icao":"EDAH","name":"Heringsdorf Airport","city":"Zirchow","country":"DE","lat":53.8787,"lng":14.1523,"tz":"Europe/Berlin"},{"iata":"HDG","icao":"ZBHD","name":"Handan Airport","city":"Handan","country":"CN","lat":36.524824,"lng":114.424126,"tz":"Asia/Shanghai"},{"iata":"HDM","icao":"OIHH","name":"Hamadan Airport","city":"Hamadan","country":"IR","lat":34.866416,"lng":48.56069,"tz":"Asia/Tehran"},{"iata":"HDN","icao":"KHDN","name":"Yampa Valley Airport","city":"Hayden","country":"US","lat":40.481201,"lng":-107.218002,"tz":"America/Denver"},{"iata":"HDS","icao":"FAHS","name":"Eastgate Airport / Air Force Base Hoedspruit","city":"Hoedspruit","country":"ZA","lat":-24.361864,"lng":31.052921,"tz":"Africa/Johannesburg"},{"iata":"HDY","icao":"VTSS","name":"Hat Yai International Airport","city":"Hat Yai","country":"TH","lat":6.93321,"lng":100.392998,"tz":"Asia/Bangkok"},{"iata":"HEA","icao":"OAHR","name":"Herat - Khwaja Abdullah Ansari International Airport","city":"Guzara","country":"AF","lat":34.209999,"lng":62.228298,"tz":"Asia/Kabul"},{"iata":"HEH","icao":"VYHH","name":"Heho Airport","city":"Heho","country":"MM","lat":20.74714,"lng":96.792029,"tz":"Asia/Yangon"},{"iata":"HEK","icao":"ZYHE","name":"Heihe Aihui Airport","city":"Heihe","country":"CN","lat":50.171621,"lng":127.308884,"tz":"Asia/Shanghai"},{"iata":"HEL","icao":"EFHK","name":"Helsinki Vantaa Airport","city":"Helsinki (Vantaa)","country":"FI","lat":60.318363,"lng":24.963341,"tz":"Europe/Helsinki"},{"iata":"HER","icao":"LGIR","name":"Heraklion International Nikos Kazantzakis Airport","city":"Heraklion","country":"GR","lat":35.339699,"lng":25.1803,"tz":"Europe/Athens"},{"iata":"HET","icao":"ZBHH","name":"Hohhot Baita International Airport","city":"Hohhot","country":"CN","lat":40.849658,"lng":111.824598,"tz":"Asia/Shanghai"},{"iata":"HFA","icao":"LLHA","name":"Uri Michaeli Haifa International Airport","city":"Haifa","country":"IL","lat":32.810219,"lng":35.043719,"tz":"Asia/Jerusalem"},{"iata":"HFE","icao":"ZSOF","name":"Hefei Xinqiao International Airport","city":"Hefei","country":"CN","lat":31.98779,"lng":116.9769,"tz":"Asia/Shanghai"},{"iata":"HFN","icao":"BIHN","name":"Hornafjörður Airport","city":"Höfn","country":"IS","lat":64.295601,"lng":-15.2272,"tz":"Atlantic/Reykjavik"},{"iata":"HFT","icao":"ENHF","name":"Hammerfest Airport","city":"Hammerfest","country":"NO","lat":70.679703,"lng":23.6686,"tz":"Europe/Oslo"},{"iata":"HGA","icao":"HCMH","name":"Egal International Airport","city":"Hargeisa","country":"SO","lat":9.514082,"lng":44.083469,"tz":"Africa/Mogadishu"},{"iata":"HGH","icao":"ZSHC","name":"Hangzhou Xiaoshan International Airport","city":"Hangzhou","country":"CN","lat":30.23609,"lng":120.428865,"tz":"Asia/Shanghai"},{"iata":"HGI","icao":null,"name":"Itanagar Donyi Polo Hollongi Airport","city":"Hollongi","country":"IN","lat":26.96683,"lng":93.638792,"tz":"Asia/Kolkata"},{"iata":"HGN","icao":"VTCH","name":"Mae Hong Son Airport","city":"Mae Hong Son","country":"TH","lat":19.3013,"lng":97.9758,"tz":"Asia/Bangkok"},{"iata":"HGO","icao":"DIKO","name":"Korhogo Airport","city":"Korhogo","country":"CI","lat":9.38718,"lng":-5.55666,"tz":"Africa/Abidjan"},{"iata":"HGR","icao":"KHGR","name":"Hagerstown Regional Richard A Henson Field","city":"Hagerstown","country":"US","lat":39.708771,"lng":-77.728014,"tz":"America/New_York"},{"iata":"HGU","icao":"AYMH","name":"Mount Hagen Kagamuga Airport","city":"Mount Hagen","country":"PG","lat":-5.828212,"lng":144.299412,"tz":"Pacific/Port_Moresby"},{"iata":"HHH","icao":"KHXD","name":"Hilton Head Airport","city":"Hilton Head Island","country":"US","lat":32.2244,"lng":-80.697502,"tz":"America/New_York"},{"iata":"HHN","icao":"EDFH","name":"Frankfurt-Hahn Airport","city":"Frankfurt am Main (Lautzenhausen)","country":"DE","lat":49.946353,"lng":7.261734,"tz":"Europe/Berlin"},{"iata":"HHQ","icao":"VTPH","name":"Hua Hin Airport","city":"Hua Hin","country":"TH","lat":12.6362,"lng":99.9515,"tz":"Asia/Bangkok"},{"iata":"HHR","icao":"KHHR","name":"Jack Northrop Field Hawthorne Municipal Airport","city":"Hawthorne","country":"US","lat":33.922798,"lng":-118.334999,"tz":"America/Los_Angeles"},{"iata":"HIA","icao":"ZSSH","name":"Huai'an Lianshui Airport","city":"Huai'an","country":"CN","lat":33.792712,"lng":119.126657,"tz":"Asia/Shanghai"},{"iata":"HIB","icao":"KHIB","name":"Range Regional Airport","city":"Hibbing","country":"US","lat":47.384831,"lng":-92.836905,"tz":"America/Chicago"},{"iata":"HID","icao":"YHID","name":"Horn Island Airport","city":"Horn","country":"AU","lat":-10.585636,"lng":142.29277,"tz":"Australia/Brisbane"},{"iata":"HII","icao":"KHII","name":"Lake Havasu City Airport","city":"Lake Havasu City","country":"US","lat":34.570506,"lng":-114.357745,"tz":"America/Phoenix"},{"iata":"HIJ","icao":"RJOA","name":"Hiroshima Airport","city":"Hiroshima","country":"JP","lat":34.4361,"lng":132.919006,"tz":"Asia/Tokyo"},{"iata":"HIN","icao":"RKPS","name":"Sacheon Airport / Sacheon Air Base","city":"Sacheon","country":"KR","lat":35.088591,"lng":128.071747,"tz":"Asia/Seoul"},{"iata":"HIR","icao":"AGGH","name":"Honiara International Airport","city":"Honiara","country":"SB","lat":-9.428,"lng":160.054993,"tz":"Pacific/Guadalcanal"},{"iata":"HJJ","icao":"ZGCJ","name":"Huaihua Zhijiang Airport","city":"Huaihua","country":"CN","lat":27.443087,"lng":109.704666,"tz":"Asia/Shanghai"},{"iata":"HJR","icao":null,"name":"Khajuraho Airport","city":"Khajuraho","country":"IN","lat":24.8172,"lng":79.918602,"tz":"Asia/Kolkata"},{"iata":"HKD","icao":"RJCH","name":"Hakodate Airport","city":"Hakodate","country":"JP","lat":41.77,"lng":140.822006,"tz":"Asia/Tokyo"},{"iata":"HKG","icao":"VHHH","name":"Hong Kong International Airport","city":"Hong Kong","country":"HK","lat":22.31184,"lng":113.914862,"tz":"Asia/Hong_Kong"},{"iata":"HKK","icao":"NZHK","name":"Hokitika Airfield","city":"","country":"NZ","lat":-42.7136,"lng":170.985001,"tz":"Pacific/Auckland"},{"iata":"HKN","icao":"AYHK","name":"Hoskins Airport","city":"Kimbe","country":"PG","lat":-5.463846,"lng":150.407327,"tz":"Pacific/Port_Moresby"},{"iata":"HKT","icao":"VTSP","name":"Phuket International Airport","city":"Phuket","country":"TH","lat":8.113257,"lng":98.3174,"tz":"Asia/Bangkok"},{"iata":"HLA","icao":"FALA","name":"Lanseria International Airport","city":"Johannesburg","country":"ZA","lat":-25.938964,"lng":27.926642,"tz":"Africa/Johannesburg"},{"iata":"HLD","icao":"ZBLA","name":"Hulunbuir Hailar Airport","city":"Hailar","country":"CN","lat":49.208616,"lng":119.822301,"tz":"Asia/Shanghai"},{"iata":"HLE","icao":"FHSH","name":"Saint Helena International Airport","city":"Jamestown","country":"SH","lat":-15.958898,"lng":-5.646066,"tz":"Atlantic/St_Helena"},{"iata":"HLN","icao":"KHLN","name":"Helena Regional Airport","city":"Helena","country":"US","lat":46.6068,"lng":-111.983002,"tz":"America/Denver"},{"iata":"HLP","icao":"WIHH","name":"Halim Perdanakusuma International Airport","city":"Jakarta","country":"ID","lat":-6.266989,"lng":106.890318,"tz":"Asia/Jakarta"},{"iata":"HLZ","icao":"NZHN","name":"Hamilton International Airport","city":"Hamilton","country":"NZ","lat":-37.866961,"lng":175.331952,"tz":"Pacific/Auckland"},{"iata":"HMA","icao":"USHH","name":"Khanty Mansiysk Airport","city":"Khanty-Mansiysk","country":"RU","lat":61.0285,"lng":69.086098,"tz":"Asia/Yekaterinburg"},{"iata":"HMB","icao":"HESG","name":"Sohag International Airport","city":"Suhaj","country":"EG","lat":26.342515,"lng":31.743017,"tz":"Africa/Cairo"},{"iata":"HME","icao":"DAUH","name":"Hassi Messaoud-Oued Irara Krim Belkacem Airport","city":"Hassi Messaoud","country":"DZ","lat":31.673,"lng":6.14044,"tz":"Africa/Algiers"},{"iata":"HMI","icao":"ZWHM","name":"Hami Airport","city":"Hami","country":"CN","lat":42.8414,"lng":93.669197,"tz":"Asia/Urumqi"},{"iata":"HMO","icao":"MMHO","name":"General Ignacio L. Pesqueira International Airport","city":"Hermosillo","country":"MX","lat":29.092811,"lng":-111.053015,"tz":"America/Hermosillo"},{"iata":"HNA","icao":"RJSI","name":"Iwate Hanamaki Airport","city":"Hanamaki","country":"JP","lat":39.4286,"lng":141.134995,"tz":"Asia/Tokyo"},{"iata":"HND","icao":"RJTT","name":"Tokyo Haneda International Airport","city":"Tokyo","country":"JP","lat":35.549678,"lng":139.786958,"tz":"Asia/Tokyo"},{"iata":"HNL","icao":"PHNL","name":"Daniel K. Inouye International Airport","city":"Honolulu, Oahu","country":"US","lat":21.318387,"lng":-157.92567,"tz":"Pacific/Honolulu"},{"iata":"HNM","icao":"PHHN","name":"Hana Airport","city":"Hana","country":"US","lat":20.795601,"lng":-156.014008,"tz":"Pacific/Honolulu"},{"iata":"HNS","icao":"PAHN","name":"Haines Airport","city":"Haines","country":"US","lat":59.243921,"lng":-135.523925,"tz":"America/Juneau"},{"iata":"HOB","icao":"KHOB","name":"Lea County Regional Airport","city":"Hobbs","country":"US","lat":32.6875,"lng":-103.217003,"tz":"America/Denver"},{"iata":"HOF","icao":"OEAH","name":"Al-Ahsa International Airport","city":"Hofuf","country":"SA","lat":25.285299,"lng":49.485199,"tz":"Asia/Riyadh"},{"iata":"HOG","icao":"MUHG","name":"Frank Pais International Airport","city":"Holguin","country":"CU","lat":20.785148,"lng":-76.315526,"tz":"America/Nassau"},{"iata":"HOI","icao":"NTTO","name":"Hao Airport","city":"Otepa","country":"PF","lat":-18.0748,"lng":-140.945999,"tz":"Pacific/Tahiti"},{"iata":"HOM","icao":"PAHO","name":"Homer Airport","city":"Homer","country":"US","lat":59.644456,"lng":-151.479235,"tz":"America/Anchorage"},{"iata":"HOR","icao":"LPHR","name":"Horta Airport","city":"Horta","country":"PT","lat":38.519901,"lng":-28.7159,"tz":"Atlantic/Azores"},{"iata":"HOT","icao":"KHOT","name":"Memorial Field Airport","city":"Hot Springs","country":"US","lat":34.4788,"lng":-93.096262,"tz":"America/Chicago"},{"iata":"HOU","icao":"KHOU","name":"William P. Hobby Airport","city":"Houston","country":"US","lat":29.645336,"lng":-95.276812,"tz":"America/Chicago"},{"iata":"HOV","icao":"ENOV","name":"Ørsta-Volda Airport, Hovden","city":"Ørsta","country":"NO","lat":62.18,"lng":6.0741,"tz":"Europe/Oslo"},{"iata":"HPA","icao":"NFTL","name":"Lifuka Island Airport","city":"Lifuka","country":"TO","lat":-19.777,"lng":-174.341003,"tz":"Pacific/Tongatapu"},{"iata":"HPG","icao":"ZHSN","name":"Shennongjia Hongping Airport","city":"Shennongjia (Hongping)","country":"CN","lat":31.626,"lng":110.34,"tz":"Asia/Shanghai"},{"iata":"HPH","icao":"VVCI","name":"Cat Bi International Airport","city":"Haiphong (Hai An)","country":"VN","lat":20.817428,"lng":106.724315,"tz":"Asia/Bangkok"},{"iata":"HPN","icao":"KHPN","name":"Westchester County Airport","city":"White Plains","country":"US","lat":41.067001,"lng":-73.707603,"tz":"America/New_York"},{"iata":"HQL","icao":"ZWTK","name":"Tashikuergan Hongqilafu Airport","city":"Tashikuergan","country":"CN","lat":37.661333,"lng":75.288877,"tz":"Asia/Urumqi"},{"iata":"HRB","icao":"ZYHB","name":"Harbin Taiping International Airport","city":"Harbin","country":"CN","lat":45.623402,"lng":126.25,"tz":"Asia/Shanghai"},{"iata":"HRE","icao":null,"name":"Robert Gabriel Mugabe International Airport","city":"Harare","country":"ZW","lat":-17.931801,"lng":31.0928,"tz":"Africa/Harare"},{"iata":"HRG","icao":"HEGN","name":"Hurghada International Airport","city":"Hurghada","country":"EG","lat":27.176776,"lng":33.796692,"tz":"Africa/Cairo"},{"iata":"HRI","icao":"VCRI","name":"Mattala Rajapaksa International Airport","city":"Mattala","country":"LK","lat":6.283878,"lng":81.124163,"tz":"Asia/Colombo"},{"iata":"HRL","icao":"KHRL","name":"Valley International Airport","city":"Harlingen","country":"US","lat":26.2285,"lng":-97.654404,"tz":"America/Chicago"},{"iata":"HRO","icao":"KHRO","name":"Boone County Airport","city":"Harrison","country":"US","lat":36.261501,"lng":-93.154701,"tz":"America/Chicago"},{"iata":"HSA","icao":"UAIT","name":"Hazrat Sultan International Airport","city":"Turkıstan","country":"KZ","lat":43.311087,"lng":68.550352,"tz":"Asia/Almaty"},{"iata":"HSC","icao":"ZGSG","name":"Shaoguan Danxia Airport","city":"Shaoguan","country":"CN","lat":24.9786,"lng":113.420998,"tz":"Asia/Shanghai"},{"iata":"HSG","icao":"RJFS","name":"Kyushu Saga International Airport","city":"Saga","country":"JP","lat":33.1497,"lng":130.302002,"tz":"Asia/Tokyo"},{"iata":"HSL","icao":"PAHL","name":"Huslia Airport","city":"Huslia","country":"US","lat":65.697899,"lng":-156.350998,"tz":"America/Anchorage"},{"iata":"HSN","icao":"ZSZS","name":"Zhoushan Putuoshan International Airport","city":"Zhoushan","country":"CN","lat":29.933874,"lng":122.362307,"tz":"Asia/Shanghai"},{"iata":"HSR","icao":"VAHS","name":"Rajkot International Airport","city":"Rajkot","country":"IN","lat":22.378824,"lng":71.039391,"tz":"Asia/Kolkata"},{"iata":"HSS","icao":"VIHR","name":"Maharaja Agrasen International Airport","city":"Hisar","country":"IN","lat":29.186065,"lng":75.74142,"tz":"Asia/Kolkata"},{"iata":"HSV","icao":"KHSV","name":"Huntsville International Airport","city":"Huntsville","country":"US","lat":34.636244,"lng":-86.774378,"tz":"America/Chicago"},{"iata":"HTA","icao":"UIAA","name":"Chita-Kadala International Airport","city":"Chita","country":"RU","lat":52.024841,"lng":113.305839,"tz":"Asia/Chita"},{"iata":"HTG","icao":"UOHH","name":"Khatanga Airport","city":"Khatanga","country":"RU","lat":71.978104,"lng":102.490997,"tz":"Asia/Krasnoyarsk"},{"iata":"HTI","icao":"YBHM","name":"Hamilton Island Airport","city":"Hamilton Island","country":"AU","lat":-20.358101,"lng":148.951996,"tz":"Australia/Brisbane"},{"iata":"HTN","icao":"ZWTN","name":"Hotan Airport","city":"Hotan","country":"CN","lat":37.038502,"lng":79.864899,"tz":"Asia/Urumqi"},{"iata":"HTS","icao":"KHTS","name":"Tri-State Airport / Milton J. Ferguson Field","city":"Huntington","country":"US","lat":38.366699,"lng":-82.557999,"tz":"America/New_York"},{"iata":"HTT","icao":"ZLHX","name":"Huatugou Airport","city":"Mengnai","country":"CN","lat":38.201645,"lng":90.837843,"tz":"Asia/Shanghai"},{"iata":"HTY","icao":"LTDA","name":"Hatay Airport","city":"Antakya","country":"TR","lat":36.36079,"lng":36.285589,"tz":"Europe/Istanbul"},{"iata":"HUH","icao":"NTTH","name":"Huahine-Fare Airport","city":"Fare","country":"PF","lat":-16.687084,"lng":-151.021593,"tz":"Pacific/Tahiti"},{"iata":"HUI","icao":"VVPB","name":"Phu Bai International Airport","city":"Huế","country":"VN","lat":16.400628,"lng":107.703094,"tz":"Asia/Ho_Chi_Minh"},{"iata":"HUN","icao":"RCYU","name":"Hualien Chiashan Airport","city":"Hualien City","country":"TW","lat":24.023163,"lng":121.617991,"tz":"Asia/Taipei"},{"iata":"HUO","icao":"ZBHZ","name":"Holingol Huolinhe Airport","city":"Holingol","country":"CN","lat":45.487222,"lng":119.407222,"tz":"Asia/Shanghai"},{"iata":"HUU","icao":"SPNC","name":"Alferez Fap David Figueroa Fernandini Airport","city":"Huánuco","country":"PE","lat":-9.87881,"lng":-76.204803,"tz":"America/Lima"},{"iata":"HUX","icao":"MMBT","name":"Bahías de Huatulco International Airport","city":"Huatulco","country":"MX","lat":15.775437,"lng":-96.260456,"tz":"America/Mexico_City"},{"iata":"HUY","icao":"EGNJ","name":"Humberside Airport","city":"Grimsby, Lincolnshire","country":"GB","lat":53.576152,"lng":-0.34954,"tz":"Europe/London"},{"iata":"HUZ","icao":"ZGHZ","name":"Huizhou Pingtan Airport","city":"Huizhou (Pingtan)","country":"CN","lat":23.049999,"lng":114.599998,"tz":"Asia/Shanghai"},{"iata":"HVB","icao":"YHBA","name":"Hervey Bay Airport","city":"Hervey Bay","country":"AU","lat":-25.320127,"lng":152.880662,"tz":"Australia/Brisbane"},{"iata":"HVD","icao":"ZMKD","name":"Khovd Airport","city":"Khovd","country":"MN","lat":47.954102,"lng":91.628197,"tz":"Asia/Hovd"},{"iata":"HVG","icao":"ENHV","name":"Honningsvåg Airport, Valan","city":"Honningsvåg","country":"NO","lat":71.009697,"lng":25.983601,"tz":"Europe/Oslo"},{"iata":"HVN","icao":"KHVN","name":"Tweed New Haven Airport","city":"New Haven","country":"US","lat":41.262869,"lng":-72.887694,"tz":"America/New_York"},{"iata":"HVR","icao":"KHVR","name":"Havre City County Airport","city":"Havre","country":"US","lat":48.541387,"lng":-109.762859,"tz":"America/Denver"},{"iata":"HWR","icao":"VIHX","name":"Halwara International Airport","city":"Halwara","country":"IN","lat":30.748501,"lng":75.629799,"tz":"Asia/Kolkata"},{"iata":"HXD","icao":"ZLDL","name":"Haixi Delingha Airport","city":"Delingha","country":"CN","lat":37.125286,"lng":97.268658,"tz":"Asia/Shanghai"},{"iata":"HYA","icao":"KHYA","name":"Cape Cod Gateway Airport","city":"Hyannis","country":"US","lat":41.6693,"lng":-70.280403,"tz":"America/New_York"},{"iata":"HYD","icao":"VOHS","name":"Rajiv Gandhi International Airport","city":"Hyderabad","country":"IN","lat":17.231318,"lng":78.429855,"tz":"Asia/Kolkata"},{"iata":"HYN","icao":"ZSLQ","name":"Taizhou Luqiao Airport","city":"Taizhou (Luqiao)","country":"CN","lat":28.562201,"lng":121.429001,"tz":"Asia/Shanghai"},{"iata":"HYS","icao":"KHYS","name":"Hays Regional Airport","city":"Hays","country":"US","lat":38.844521,"lng":-99.273148,"tz":"America/Chicago"},{"iata":"HZA","icao":"ZSHZ","name":"Heze Mudan Airport","city":"Heze (Dingtao)","country":"CN","lat":35.212972,"lng":115.736748,"tz":"Asia/Shanghai"},{"iata":"HZG","icao":"ZLHZ","name":"Hanzhong Chenggu Airport","city":"Hanzhong (Chenggu)","country":"CN","lat":33.133527,"lng":107.203817,"tz":"Asia/Shanghai"},{"iata":"HZH","icao":"ZUNP","name":"Liping Airport","city":"Liping","country":"CN","lat":26.32217,"lng":109.1499,"tz":"Asia/Shanghai"},{"iata":"IAA","icao":"UOII","name":"Igarka Airport","city":"Igarka","country":"RU","lat":67.437202,"lng":86.621902,"tz":"Asia/Krasnoyarsk"},{"iata":"IAD","icao":"KIAD","name":"Washington Dulles International Airport","city":"Dulles","country":"US","lat":38.9445,"lng":-77.455803,"tz":"America/New_York"},{"iata":"IAG","icao":"KIAG","name":"Niagara Falls International Airport","city":"Niagara Falls","country":"US","lat":43.1073,"lng":-78.946198,"tz":"America/New_York"},{"iata":"IAH","icao":"KIAH","name":"George Bush Intercontinental Airport","city":"Houston","country":"US","lat":29.9844,"lng":-95.3414,"tz":"America/Chicago"},{"iata":"IAM","icao":"DAUZ","name":"Zarzaitine - In Aménas Airport","city":"In Aménas","country":"DZ","lat":28.0515,"lng":9.64291,"tz":"Africa/Tripoli"},{"iata":"IAN","icao":"PAIK","name":"Bob Baker Memorial Airport","city":"Kiana","country":"US","lat":66.976128,"lng":-160.439014,"tz":"America/Anchorage"},{"iata":"IAR","icao":"UUDL","name":"Golden Ring Yaroslavl International Airport","city":"Tunoshna","country":"RU","lat":57.560699,"lng":40.157398,"tz":"Europe/Moscow"},{"iata":"IAS","icao":"LRIA","name":"Iaşi International Airport","city":"Iaşi","country":"RO","lat":47.179633,"lng":27.621431,"tz":"Europe/Bucharest"},{"iata":"IBA","icao":"DNIB","name":"Ibadan Airport","city":"Ibadan","country":"NG","lat":7.36246,"lng":3.97833,"tz":"Africa/Lagos"},{"iata":"IBE","icao":"SKIB","name":"Perales Airport","city":"Ibagué","country":"CO","lat":4.42161,"lng":-75.1333,"tz":"America/Bogota"},{"iata":"IBR","icao":"RJAH","name":"Ibaraki Airport","city":"Omitama","country":"JP","lat":36.181456,"lng":140.414434,"tz":"Asia/Tokyo"},{"iata":"IBZ","icao":"LEIB","name":"Ibiza Airport","city":"Ibiza (Eivissa)","country":"ES","lat":38.872898,"lng":1.37312,"tz":"Europe/Madrid"},{"iata":"ICN","icao":"RKSI","name":"Incheon International Airport","city":"Seoul","country":"KR","lat":37.469101,"lng":126.450996,"tz":"Asia/Seoul"},{"iata":"ICT","icao":"KICT","name":"Wichita Dwight D. Eisenhower National Airport","city":"Wichita","country":"US","lat":37.650314,"lng":-97.428583,"tz":"America/Chicago"},{"iata":"IDA","icao":"KIDA","name":"Idaho Falls Regional Airport","city":"Idaho Falls","country":"US","lat":43.514599,"lng":-112.070999,"tz":"America/Boise"},{"iata":"IDR","icao":"VAID","name":"Devi Ahilya Bai Holkar International Airport","city":"Indore","country":"IN","lat":22.721404,"lng":75.80051,"tz":"Asia/Kolkata"},{"iata":"IEG","icao":"EPZG","name":"Zielona Góra-Babimost Airport","city":"Nowe Kramsko","country":"PL","lat":52.1385,"lng":15.7986,"tz":"Europe/Warsaw"},{"iata":"IEV","icao":"UKKK","name":"Ihor Sikorsky Kyiv International Airport (Zhuliany)","city":"Kyiv","country":"UA","lat":50.40194,"lng":30.45194,"tz":"Europe/Kiev"},{"iata":"IFJ","icao":"BIIS","name":"Ísafjörður Airport","city":"Ísafjörður","country":"IS","lat":66.058098,"lng":-23.1353,"tz":"Atlantic/Reykjavik"},{"iata":"IFN","icao":"OIFM","name":"Isfahan Shahid Beheshti International Airport","city":"Isfahan","country":"IR","lat":32.755142,"lng":51.883877,"tz":"Asia/Tehran"},{"iata":"IFO","icao":"UKLI","name":"Ivano-Frankivsk International Airport","city":"Ivano-Frankivsk","country":"UA","lat":48.884201,"lng":24.6861,"tz":"Europe/Kiev"},{"iata":"IGA","icao":"MYIG","name":"Inagua Airport","city":"Matthew Town","country":"BS","lat":20.975,"lng":-73.666901,"tz":"America/Nassau"},{"iata":"IGD","icao":"LTCT","name":"Iğdır Airport","city":"Iğdır","country":"TR","lat":39.976627,"lng":43.876648,"tz":"Europe/Istanbul"},{"iata":"IGR","icao":"SARI","name":"Cataratas Del Iguazú International Airport","city":"Puerto Iguazu","country":"AR","lat":-25.737301,"lng":-54.4734,"tz":"America/Argentina/Cordoba"},{"iata":"IGT","icao":"URMS","name":"Magas Airport","city":"Sunzha","country":"RU","lat":43.323268,"lng":45.012568,"tz":"Europe/Moscow"},{"iata":"IGU","icao":"SBFI","name":"Cataratas International Airport","city":"Foz do Iguaçu","country":"BR","lat":-25.594167,"lng":-54.489444,"tz":"America/Sao_Paulo"},{"iata":"IJK","icao":"USII","name":"Izhevsk Airport","city":"Izhevsk","country":"RU","lat":56.834524,"lng":53.462172,"tz":"Europe/Samara"},{"iata":"IKA","icao":"OIIE","name":"Imam Khomeini International Airport","city":"Tehran","country":"IR","lat":35.4161,"lng":51.152199,"tz":"Asia/Tehran"},{"iata":"IKG","icao":"UCFK","name":"Karakol International Airport","city":"Karakol","country":"KG","lat":42.508099,"lng":78.407799,"tz":"Asia/Bishkek"},{"iata":"IKI","icao":"RJDB","name":"Iki Airport","city":"Iki","country":"JP","lat":33.749001,"lng":129.785004,"tz":"Asia/Tokyo"},{"iata":"IKS","icao":"UEST","name":"Tiksi Airport","city":"Tiksi","country":"RU","lat":71.697701,"lng":128.903,"tz":"Asia/Yakutsk"},{"iata":"IKT","icao":"UIII","name":"Irkutsk International Airport","city":"Irkutsk","country":"RU","lat":52.266707,"lng":104.395563,"tz":"Asia/Irkutsk"},{"iata":"IKU","icao":"UCFL","name":"Issyk-Kul International Airport","city":"Tamchy","country":"KG","lat":42.585584,"lng":76.701181,"tz":"Asia/Bishkek"},{"iata":"ILD","icao":"LEDA","name":"Lleida-Alguaire Airport","city":"Lleida","country":"ES","lat":41.728185,"lng":0.535023,"tz":"Europe/Madrid"},{"iata":"ILG","icao":"KILG","name":"Wilmington Airport","city":"Wilmington","country":"US","lat":39.678699,"lng":-75.606499,"tz":"America/New_York"},{"iata":"ILI","icao":"PAIL","name":"Iliamna Airport","city":"Iliamna","country":"US","lat":59.754398,"lng":-154.910996,"tz":"America/Anchorage"},{"iata":"ILM","icao":"KILM","name":"Wilmington International Airport","city":"Wilmington","country":"US","lat":34.272345,"lng":-77.905117,"tz":"America/New_York"},{"iata":"ILO","icao":"RPVI","name":"Iloilo International Airport","city":"Cabatuan","country":"PH","lat":10.833017,"lng":122.493358,"tz":"Asia/Manila"},{"iata":"ILP","icao":"NWWE","name":"Île des Pins Airport","city":"Île des Pins","country":"NC","lat":-22.5889,"lng":167.455994,"tz":"Pacific/Noumea"},{"iata":"ILQ","icao":"SPLO","name":"General Jorge Fernandez Maldon Airport","city":"Ilo","country":"PE","lat":-17.695,"lng":-71.344002,"tz":"America/Lima"},{"iata":"ILR","icao":"DNIL","name":"General Tunde Idiagbon International Airport","city":"Ilorin/Ogbomosho","country":"NG","lat":8.44021,"lng":4.49392,"tz":"Africa/Lagos"},{"iata":"ILS","icao":"MSSS","name":"Ilopango International Airport","city":"San Salvador","country":"SV","lat":13.6995,"lng":-89.119904,"tz":"America/El_Salvador"},{"iata":"ILY","icao":"EGPI","name":"Islay Airport","city":"Isle of Islay, Argyll and Bute","country":"GB","lat":55.682708,"lng":-6.257525,"tz":"Europe/London"},{"iata":"IMF","icao":"VEIM","name":"Bir Tikendrajit International Airport","city":"Imphal","country":"IN","lat":24.76,"lng":93.896698,"tz":"Asia/Kolkata"},{"iata":"IMP","icao":"SBIZ","name":"Prefeito Renato Moreira Airport","city":"Imperatriz","country":"BR","lat":-5.53129,"lng":-47.459999,"tz":"America/Fortaleza"},{"iata":"IMT","icao":"KIMT","name":"Ford Airport","city":"Kingsford","country":"US","lat":45.81911,"lng":-88.114557,"tz":"America/Menominee"},{"iata":"INC","icao":"ZLIC","name":"Yinchuan Hedong International Airport","city":"Yinchuan","country":"CN","lat":38.322758,"lng":106.393214,"tz":"Asia/Shanghai"},{"iata":"IND","icao":"KIND","name":"Indianapolis International Airport","city":"Indianapolis","country":"US","lat":39.7173,"lng":-86.294403,"tz":"America/Indiana/Indianapolis"},{"iata":"INH","icao":"FQIN","name":"Inhambane Airport","city":"Inhambane","country":"MZ","lat":-23.8764,"lng":35.408501,"tz":"Africa/Maputo"},{"iata":"INI","icao":"LYNI","name":"Niš Constantine the Great Airport","city":"Niš","country":"RS","lat":43.336538,"lng":21.856242,"tz":"Europe/Belgrade"},{"iata":"INL","icao":"KINL","name":"Falls International Airport","city":"International Falls","country":"US","lat":48.5662,"lng":-93.403099,"tz":"America/Chicago"},{"iata":"INN","icao":"LOWI","name":"Innsbruck Airport","city":"Innsbruck","country":"AT","lat":47.260201,"lng":11.344,"tz":"Europe/Vienna"},{"iata":"INU","icao":"ANYN","name":"Nauru International Airport","city":"Yaren","country":"NR","lat":-0.547893,"lng":166.919525,"tz":"Pacific/Nauru"},{"iata":"INV","icao":"EGPE","name":"Inverness Airport","city":"Inverness","country":"GB","lat":57.5425,"lng":-4.0475,"tz":"Europe/London"},{"iata":"INZ","icao":"DAUI","name":"In Salah Airport","city":"In Salah","country":"DZ","lat":27.250999,"lng":2.51202,"tz":"Africa/Algiers"},{"iata":"IOA","icao":"LGIO","name":"Ioannina King Pyrrhus National Airport","city":"Ioannina","country":"GR","lat":39.6964,"lng":20.8225,"tz":"Europe/Athens"},{"iata":"IOM","icao":"EGNS","name":"Isle of Man Airport","city":"Castletown","country":"IM","lat":54.083081,"lng":-4.623871,"tz":"Europe/Isle_of_Man"},{"iata":"IOS","icao":"SBIL","name":"Bahia - Jorge Amado Airport","city":"Ilhéus","country":"BR","lat":-14.815929,"lng":-39.033458,"tz":"America/Bahia"},{"iata":"IPC","icao":"SCIP","name":"Mataveri International Airport","city":"Isla De Pascua","country":"CL","lat":-27.165411,"lng":-109.421027,"tz":"Pacific/Easter"},{"iata":"IPH","icao":"WMKI","name":"Sultan Azlan Shah Airport","city":"Ipoh","country":"MY","lat":4.56733,"lng":101.091643,"tz":"Asia/Kuala_Lumpur"},{"iata":"IPI","icao":"SKIP","name":"San Luis Airport","city":"Ipiales","country":"CO","lat":0.861946,"lng":-77.671783,"tz":"America/Bogota"},{"iata":"IPL","icao":"KIPL","name":"Imperial County Airport","city":"Imperial","country":"US","lat":32.83539,"lng":-115.574026,"tz":"America/Los_Angeles"},{"iata":"IPN","icao":"SBIP","name":"Usiminas Airport","city":"Ipatinga","country":"BR","lat":-19.470699,"lng":-42.487598,"tz":"America/Sao_Paulo"},{"iata":"IPT","icao":"KIPT","name":"Williamsport Regional Airport","city":"Williamsport","country":"US","lat":41.242126,"lng":-76.92245,"tz":"America/New_York"},{"iata":"IQM","icao":"ZWCM","name":"Qiemo Yudu Airport","city":"Qiemo","country":"CN","lat":38.234516,"lng":85.465462,"tz":"Asia/Urumqi"},{"iata":"IQN","icao":"ZLQY","name":"Qingyang Xifeng Airport","city":"Qingyang (Xifeng)","country":"CN","lat":35.802638,"lng":107.598896,"tz":"Asia/Shanghai"},{"iata":"IQQ","icao":"SCDA","name":"Diego Aracena International Airport","city":"Iquique","country":"CL","lat":-20.536273,"lng":-70.181373,"tz":"America/Santiago"},{"iata":"IQT","icao":"SPQT","name":"Coronel FAP Francisco Secada Vignetta International Airport","city":"Iquitos","country":"PE","lat":-3.78474,"lng":-73.3088,"tz":"America/Lima"},{"iata":"IRG","icao":"YLHR","name":"Lockhart River Airport","city":"Lockhart River","country":"AU","lat":-12.7869,"lng":143.304993,"tz":"Australia/Brisbane"},{"iata":"IRJ","icao":"SANL","name":"Capitan V A Almonacid Airport","city":"La Rioja","country":"AR","lat":-29.381599,"lng":-66.795799,"tz":"America/Argentina/La_Rioja"},{"iata":"IRK","icao":"KIRK","name":"Kirksville Regional Airport","city":"Kirksville","country":"US","lat":40.093498,"lng":-92.544899,"tz":"America/Chicago"},{"iata":"IRP","icao":"FZJH","name":"Matari Airport","city":"Isiro","country":"CD","lat":2.82761,"lng":27.588301,"tz":"Africa/Lubumbashi"},{"iata":"ISA","icao":"YBMA","name":"Mount Isa Airport","city":"Mount Isa","country":"AU","lat":-20.66638,"lng":139.488468,"tz":"Australia/Brisbane"},{"iata":"ISB","icao":"OPIS","name":"Islamabad International Airport","city":"Attock","country":"PK","lat":33.549,"lng":72.82566,"tz":"Asia/Karachi"},{"iata":"ISE","icao":"LTFC","name":"Süleyman Demirel International Airport","city":"Isparta","country":"TR","lat":37.8554,"lng":30.368401,"tz":"Europe/Istanbul"},{"iata":"ISG","icao":"ROIG","name":"New Ishigaki Airport","city":"Ishigaki","country":"JP","lat":24.396389,"lng":124.245,"tz":"Asia/Tokyo"},{"iata":"ISK","icao":"VAOZ","name":"Nashik International Airport","city":"Nashik","country":"IN","lat":20.119101,"lng":73.912903,"tz":"Asia/Kolkata"},{"iata":"ISP","icao":"KISP","name":"Long Island MacArthur Airport","city":"Islip","country":"US","lat":40.796324,"lng":-73.101703,"tz":"America/New_York"},{"iata":"IST","icao":"LTFM","name":"İstanbul Airport","city":"Istanbul","country":"TR","lat":41.274874,"lng":28.732136,"tz":"Europe/Istanbul"},{"iata":"ISU","icao":"ORSU","name":"Sulaymaniyah International Airport","city":"Sulaymaniyah","country":"IQ","lat":35.561749,"lng":45.316738,"tz":"Asia/Baghdad"},{"iata":"ITB","icao":"SBIH","name":"Itaituba Airport","city":"Itaituba","country":"BR","lat":-4.242131,"lng":-56.000651,"tz":"America/Santarem"},{"iata":"ITH","icao":"KITH","name":"Ithaca Tompkins Regional Airport","city":"Ithaca","country":"US","lat":42.491001,"lng":-76.458397,"tz":"America/New_York"},{"iata":"ITM","icao":"RJOO","name":"Osaka Itami International Airport","city":"Osaka","country":"JP","lat":34.780853,"lng":135.440829,"tz":"Asia/Tokyo"},{"iata":"ITO","icao":"PHTO","name":"Hilo International Airport","city":"Hilo","country":"US","lat":19.72135,"lng":-155.045428,"tz":"Pacific/Honolulu"},{"iata":"IUE","icao":"NIUE","name":"Niue International Airport","city":"Alofi","country":"NU","lat":-19.080109,"lng":-169.923493,"tz":"Pacific/Niue"},{"iata":"IVC","icao":"NZNV","name":"Invercargill Airport","city":"Invercargill","country":"NZ","lat":-46.412399,"lng":168.313004,"tz":"Pacific/Auckland"},{"iata":"IVL","icao":"EFIV","name":"Ivalo Airport","city":"Ivalo","country":"FI","lat":68.6073,"lng":27.4053,"tz":"Europe/Helsinki"},{"iata":"IWA","icao":"UUBI","name":"Ivanovo South Airport","city":"Ivanovo","country":"RU","lat":56.9394,"lng":40.9408,"tz":"Europe/Moscow"},{"iata":"IWJ","icao":"RJOW","name":"Iwami Airport","city":"Masuda","country":"JP","lat":34.676399,"lng":131.789993,"tz":"Asia/Tokyo"},{"iata":"IWK","icao":"RJOI","name":"Iwakuni Kintaikyo Airport","city":"Iwakuni","country":"JP","lat":34.146333,"lng":132.247238,"tz":"Asia/Tokyo"},{"iata":"IXA","icao":"VEAT","name":"Agartala - Maharaja Bir Bikram Airport","city":"Agartala","country":"IN","lat":23.886999,"lng":91.240402,"tz":"Asia/Kolkata"},{"iata":"IXB","icao":"VEBD","name":"Bagdogra Airport","city":"Siliguri","country":"IN","lat":26.6812,"lng":88.328598,"tz":"Asia/Kolkata"},{"iata":"IXC","icao":"VICG","name":"Shaheed Bhagat Singh International Airport","city":"Chandigarh","country":"IN","lat":30.6735,"lng":76.788498,"tz":"Asia/Kolkata"},{"iata":"IXD","icao":"VEAB","name":"Prayagraj Airport","city":"Allahabad","country":"IN","lat":25.4401,"lng":81.733902,"tz":"Asia/Kolkata"},{"iata":"IXE","icao":"VOML","name":"Mangaluru International Airport","city":"Mangaluru","country":"IN","lat":12.95471,"lng":74.886812,"tz":"Asia/Kolkata"},{"iata":"IXG","icao":"VOBM","name":"Belagavi Airport","city":"Belgaum","country":"IN","lat":15.8593,"lng":74.618301,"tz":"Asia/Kolkata"},{"iata":"IXI","icao":"VELR","name":"Lilabari North Lakhimpur Airport","city":"Lilabari","country":"IN","lat":27.295682,"lng":94.097266,"tz":"Asia/Kolkata"},{"iata":"IXJ","icao":"VIJU","name":"Jammu Airport","city":"Jammu","country":"IN","lat":32.688849,"lng":74.838152,"tz":"Asia/Kolkata"},{"iata":"IXK","icao":"VAKS","name":"Keshod Airport","city":"Keshod","country":"IN","lat":21.317101,"lng":70.270401,"tz":"Asia/Kolkata"},{"iata":"IXL","icao":"VILH","name":"Leh Kushok Bakula Rimpochee Airport","city":"Leh","country":"IN","lat":34.135899,"lng":77.546501,"tz":"Asia/Kolkata"},{"iata":"IXM","icao":"VOMD","name":"Madurai Airport","city":"Madurai","country":"IN","lat":9.83451,"lng":78.093399,"tz":"Asia/Kolkata"},{"iata":"IXP","icao":"VIPK","name":"Pathankot Airport","city":"Pathankot","country":"IN","lat":32.233611,"lng":75.634444,"tz":"Asia/Kolkata"},{"iata":"IXR","icao":"VERC","name":"Birsa Munda Airport","city":"Ranchi","country":"IN","lat":23.314301,"lng":85.321701,"tz":"Asia/Kolkata"},{"iata":"IXS","icao":"VEKU","name":"Silchar Airport","city":"Silchar","country":"IN","lat":24.912901,"lng":92.978699,"tz":"Asia/Kolkata"},{"iata":"IXU","icao":"VAAU","name":"Aurangabad Airport","city":"Aurangabad","country":"IN","lat":19.862875,"lng":75.396312,"tz":"Asia/Kolkata"},{"iata":"IXY","icao":"VAKE","name":"Kandla Airport","city":"Kandla","country":"IN","lat":23.1127,"lng":70.100304,"tz":"Asia/Kolkata"},{"iata":"IXZ","icao":"VOPB","name":"Veer Savarkar International Airport / INS Utkrosh","city":"Port Blair","country":"IN","lat":11.640194,"lng":92.72902,"tz":"Asia/Kolkata"},{"iata":"IZA","icao":"SBZM","name":"Presidente Itamar Franco Airport","city":"Juiz de Fora","country":"BR","lat":-21.513086,"lng":-43.173069,"tz":"America/Sao_Paulo"},{"iata":"IZO","icao":"RJOC","name":"Izumo Enmusubi Airport","city":"Izumo","country":"JP","lat":35.413601,"lng":132.889999,"tz":"Asia/Tokyo"},{"iata":"IZT","icao":"MMIT","name":"General Antonio Cárdenas Rodríguez National Airport / Ixtepec Air Base","city":"Ixtepec","country":"MX","lat":16.445961,"lng":-95.093708,"tz":"America/Mexico_City"},{"iata":"JAC","icao":"KJAC","name":"Jackson Hole Airport","city":"Jackson","country":"US","lat":43.6073,"lng":-110.737999,"tz":"America/Boise"},{"iata":"JAE","icao":"SPJE","name":"Shumba Airport","city":"Jaén","country":"PE","lat":-5.59248,"lng":-78.774002,"tz":"America/Lima"},{"iata":"JAF","icao":"VCCJ","name":"Jaffna International Airport","city":"Jaffna","country":"LK","lat":9.79233,"lng":80.070099,"tz":"Asia/Colombo"},{"iata":"JAI","icao":"VIJP","name":"Jaipur International Airport","city":"Jaipur","country":"IN","lat":26.8242,"lng":75.812202,"tz":"Asia/Kolkata"},{"iata":"JAN","icao":"KJAN","name":"Jackson-Medgar Wiley Evers International Airport","city":"Jackson","country":"US","lat":32.311199,"lng":-90.075897,"tz":"America/Chicago"},{"iata":"JAU","icao":"SPJJ","name":"Francisco Carle Airport","city":"Jauja","country":"PE","lat":-11.7831,"lng":-75.473396,"tz":"America/Lima"},{"iata":"JAV","icao":"BGJN","name":"Ilulissat Airport","city":"Ilulissat","country":"GL","lat":69.243202,"lng":-51.057098,"tz":"America/Godthab"},{"iata":"JAX","icao":"KJAX","name":"Jacksonville International Airport","city":"Jacksonville","country":"US","lat":30.492469,"lng":-81.687813,"tz":"America/New_York"},{"iata":"JBQ","icao":"MDJB","name":"La Isabela International Airport","city":"La Isabela","country":"DO","lat":18.5725,"lng":-69.985603,"tz":"America/Santo_Domingo"},{"iata":"JBR","icao":"KJBR","name":"Jonesboro Municipal Airport","city":"Jonesboro","country":"US","lat":35.831699,"lng":-90.6464,"tz":"America/Chicago"},{"iata":"JCL","icao":"LKCS","name":"České Budějovice South Bohemian Airport","city":"České Budějovice","country":"CZ","lat":48.948171,"lng":14.42832,"tz":"Europe/Prague"},{"iata":"JDF","icao":"SBJF","name":"Francisco de Assis Airport","city":"Juiz de Fora","country":"BR","lat":-21.791482,"lng":-43.386072,"tz":"America/Sao_Paulo"},{"iata":"JDH","icao":"VIJO","name":"Jodhpur Airport","city":"Jodhpur","country":"IN","lat":26.251101,"lng":73.048897,"tz":"Asia/Kolkata"},{"iata":"JDZ","icao":"ZSJD","name":"Jingdezhen Luojia Airport","city":"Jingdezhen","country":"CN","lat":29.3386,"lng":117.176003,"tz":"Asia/Shanghai"},{"iata":"JED","icao":"OEJN","name":"King Abdulaziz International Airport","city":"Jeddah","country":"SA","lat":21.680241,"lng":39.157436,"tz":"Asia/Riyadh"},{"iata":"JEE","icao":"MTJE","name":"Jérémie Airport","city":"Carrefour Sanon","country":"HT","lat":18.663099,"lng":-74.170303,"tz":"America/Port-au-Prince"},{"iata":"JEG","icao":"BGAA","name":"Aasiaat Airport","city":"Aasiaat","country":"GL","lat":68.721802,"lng":-52.784698,"tz":"America/Godthab"},{"iata":"JER","icao":"EGJJ","name":"Jersey Airport","city":"St. Peter","country":"JE","lat":49.207901,"lng":-2.19551,"tz":"Europe/Jersey"},{"iata":"JFK","icao":"KJFK","name":"John F. Kennedy International Airport","city":"New York","country":"US","lat":40.639447,"lng":-73.779317,"tz":"America/New_York"},{"iata":"JGA","icao":"VAJM","name":"Jamnagar Airport","city":"Jamnagar","country":"IN","lat":22.4655,"lng":70.012604,"tz":"Asia/Kolkata"},{"iata":"JGD","icao":"ZYJD","name":"Daxing'anling Elunchun Airport","city":"Jiagedaqi","country":"CN","lat":50.371389,"lng":124.1175,"tz":"Asia/Shanghai"},{"iata":"JGN","icao":"ZLJQ","name":"Jiayuguan International Airport","city":"Jiayuguan","country":"CN","lat":39.859052,"lng":98.339344,"tz":"Asia/Shanghai"},{"iata":"JGS","icao":"ZSGS","name":"Jinggangshan Airport","city":"Ji'an","country":"CN","lat":26.856899,"lng":114.737,"tz":"Asia/Shanghai"},{"iata":"JHB","icao":"WMKJ","name":"Senai International Airport","city":"Johor Bahru","country":"MY","lat":1.64131,"lng":103.669998,"tz":"Asia/Kuala_Lumpur"},{"iata":"JHG","icao":"ZPJH","name":"Xishuangbanna Gasa International Airport","city":"Jinghong (Gasa)","country":"CN","lat":21.974648,"lng":100.762224,"tz":"Asia/Shanghai"},{"iata":"JHM","icao":"PHJH","name":"Kapalua Airport","city":"Lahaina","country":"US","lat":20.9629,"lng":-156.673004,"tz":"Pacific/Honolulu"},{"iata":"JHS","icao":"BGSS","name":"Sisimiut Airport","city":"Sisimiut","country":"GL","lat":66.951302,"lng":-53.729301,"tz":"America/Godthab"},{"iata":"JIB","icao":"HDAM","name":"Djibouti-Ambouli Airport","city":"Djibouti City","country":"DJ","lat":11.5473,"lng":43.1595,"tz":"Africa/Djibouti"},{"iata":"JIC","icao":"ZLJC","name":"Jinchang Jinchuan Airport","city":"Jinchang","country":"CN","lat":38.542222,"lng":102.348333,"tz":"Asia/Shanghai"},{"iata":"JIJ","icao":"HAJJ","name":"Gerad Wilwal International Airport","city":"Jijiga","country":"ET","lat":9.331907,"lng":42.911811,"tz":"Africa/Addis_Ababa"},{"iata":"JIM","icao":"HAJM","name":"Jimma Airport","city":"Jimma","country":"ET","lat":7.66609,"lng":36.816601,"tz":"Africa/Addis_Ababa"},{"iata":"JIQ","icao":"ZUQJ","name":"Qianjiang Wulingshan Airport","city":"Qianjiang","country":"CN","lat":29.513333,"lng":108.831111,"tz":"Asia/Shanghai"},{"iata":"JJD","icao":"SBJE","name":"Comandante Ariston Pessoa Airport","city":"Cruz","country":"BR","lat":-2.906425,"lng":-40.357338,"tz":"America/Fortaleza"},{"iata":"JJN","icao":"ZSQZ","name":"Quanzhou Jinjiang International Airport","city":"Quanzhou","country":"CN","lat":24.795855,"lng":118.588599,"tz":"Asia/Shanghai"},{"iata":"JKG","icao":"ESGJ","name":"Jönköping Airport","city":"Jönköping","country":"SE","lat":57.757599,"lng":14.0687,"tz":"Europe/Stockholm"},{"iata":"JKH","icao":"LGHI","name":"Chios Island National Airport","city":"Chios Island","country":"GR","lat":38.343201,"lng":26.1406,"tz":"Europe/Athens"},{"iata":"JKR","icao":"VNJP","name":"Janakpur Airport","city":"Janakpur","country":"NP","lat":26.708799,"lng":85.922401,"tz":"Asia/Kathmandu"},{"iata":"JLN","icao":"KJLN","name":"Joplin Regional Airport","city":"Joplin","country":"US","lat":37.151798,"lng":-94.498299,"tz":"America/Chicago"},{"iata":"JLR","icao":"VAJB","name":"Jabalpur Airport","city":"Jabalpur","country":"IN","lat":23.177799,"lng":80.052002,"tz":"Asia/Kolkata"},{"iata":"JMJ","icao":"ZPJM","name":"Lancang Jingmai Airport","city":"Pu'er (Lancang)","country":"CN","lat":22.417733,"lng":99.784012,"tz":"Asia/Shanghai"},{"iata":"JMK","icao":"LGMK","name":"Mykonos Island National Airport","city":"Mykonos","country":"GR","lat":37.435101,"lng":25.348101,"tz":"Europe/Athens"},{"iata":"JMS","icao":"KJMS","name":"Jamestown Regional Airport","city":"Jamestown","country":"US","lat":46.929699,"lng":-98.6782,"tz":"America/Chicago"},{"iata":"JMU","icao":"ZYJM","name":"Jiamusi Songjiang International Airport","city":"Jiamusi","country":"CN","lat":46.842793,"lng":130.46426,"tz":"Asia/Shanghai"},{"iata":"JNB","icao":"FAOR","name":"O.R. Tambo International Airport","city":"Johannesburg","country":"ZA","lat":-26.140081,"lng":28.246801,"tz":"Africa/Johannesburg"},{"iata":"JNG","icao":"ZSJG","name":"Jining Da'an Airport","city":"Jining","country":"CN","lat":35.647358,"lng":116.743269,"tz":"Asia/Shanghai"},{"iata":"JNH","icao":"ZSJX","name":"Jiaxing Nanhu Airport","city":"Xiuzhou, Hangzhou","country":"CN","lat":30.698056,"lng":120.663056,"tz":"Asia/Shanghai"},{"iata":"JNU","icao":"PAJN","name":"Juneau International Airport","city":"Juneau","country":"US","lat":58.354935,"lng":-134.574416,"tz":"America/Juneau"},{"iata":"JNZ","icao":"ZYJZ","name":"Jinzhou Bay Airport","city":"Jinzhou (Linghai)","country":"CN","lat":40.936032,"lng":121.277114,"tz":"Asia/Shanghai"},{"iata":"JOE","icao":"EFJO","name":"Joensuu Airport","city":"Joensuu","country":"FI","lat":62.658815,"lng":29.619398,"tz":"Europe/Helsinki"},{"iata":"JOG","icao":"WAHH","name":"Adisutjipto International Airport","city":"Yogyakarta","country":"ID","lat":-7.78818,"lng":110.431999,"tz":"Asia/Jakarta"},{"iata":"JOI","icao":"SBJV","name":"Lauro Carneiro de Loyola Airport","city":"Joinville","country":"BR","lat":-26.224501,"lng":-48.797401,"tz":"America/Sao_Paulo"},{"iata":"JOL","icao":"RPMJ","name":"Jolo Airport","city":"Jolo","country":"PH","lat":6.05367,"lng":121.011002,"tz":"Asia/Manila"},{"iata":"JOS","icao":"DNJO","name":"Yakubu Gowon Airport","city":"Jos","country":"NG","lat":9.63983,"lng":8.86905,"tz":"Africa/Lagos"},{"iata":"JPA","icao":"SBJP","name":"Presidente Castro Pinto International Airport","city":"João Pessoa","country":"BR","lat":-7.148691,"lng":-34.950554,"tz":"America/Fortaleza"},{"iata":"JRH","icao":"VEJT","name":"Jorhat Airport","city":"Jorhat","country":"IN","lat":26.730456,"lng":94.175416,"tz":"Asia/Kolkata"},{"iata":"JRO","icao":"HTKJ","name":"Kilimanjaro International Airport","city":"Arusha","country":"TZ","lat":-3.427049,"lng":37.07353,"tz":"Africa/Dar_es_Salaam"},{"iata":"JSA","icao":"VIJR","name":"Jaisalmer Airport","city":"","country":"IN","lat":26.8887,"lng":70.864998,"tz":"Asia/Kolkata"},{"iata":"JSH","icao":"LGST","name":"Sitia Airport","city":"Crete Island","country":"GR","lat":35.216099,"lng":26.101299,"tz":"Europe/Athens"},{"iata":"JSI","icao":"LGSK","name":"Skiathos Island National Airport","city":"Skiathos","country":"GR","lat":39.177101,"lng":23.5037,"tz":"Europe/Athens"},{"iata":"JSJ","icao":"ZYJS","name":"Jiansanjiang Shidi Airport","city":"Jiansanjiang","country":"CN","lat":47.108248,"lng":132.65792,"tz":"Asia/Shanghai"},{"iata":"JSO","icao":null,"name":"Dr. Luciano de Arruda Coelho Regional Airport","city":"Sobral","country":"BR","lat":-3.614488,"lng":-40.231426,"tz":"America/Fortaleza"},{"iata":"JSR","icao":"VGJR","name":"Jessore Airport","city":"Jashore (Jessore)","country":"BD","lat":23.1838,"lng":89.160797,"tz":"Asia/Dhaka"},{"iata":"JST","icao":"KJST","name":"John Murtha Johnstown Cambria County Airport","city":"Johnstown","country":"US","lat":40.316101,"lng":-78.8339,"tz":"America/New_York"},{"iata":"JTC","icao":"SBAE","name":"Bauru/Arealva–Moussa Nakhal Tobias State Airport","city":"Bauru","country":"BR","lat":-22.160755,"lng":-49.070325,"tz":"America/Sao_Paulo"},{"iata":"JTR","icao":"LGSR","name":"Santorini International Airport","city":"Santorini Island","country":"GR","lat":36.400045,"lng":25.478638,"tz":"Europe/Athens"},{"iata":"JUB","icao":"HJJJ","name":"Juba International Airport","city":"Juba","country":"SS","lat":4.87201,"lng":31.601101,"tz":"Africa/Juba"},{"iata":"JUJ","icao":"SASJ","name":"Gobernador Horacio Guzman International Airport","city":"San Salvador de Jujuy","country":"AR","lat":-24.392799,"lng":-65.097801,"tz":"America/Argentina/Jujuy"},{"iata":"JUL","icao":"SPJL","name":"Inca Manco Capac International Airport","city":"Juliaca","country":"PE","lat":-15.467689,"lng":-70.15653,"tz":"America/Lima"},{"iata":"JUZ","icao":"ZSJU","name":"Quzhou Airport","city":"Quzhou (Kezheng)","country":"CN","lat":28.96613,"lng":118.898793,"tz":"Asia/Shanghai"},{"iata":"JXA","icao":"ZYJX","name":"Jixi Xingkaihu Airport","city":"Jixi","country":"CN","lat":45.293,"lng":131.193,"tz":"Asia/Shanghai"},{"iata":"JYV","icao":"EFJY","name":"Jyväskylä Airport","city":"Jyväskylän Maalaiskunta","country":"FI","lat":62.399502,"lng":25.678301,"tz":"Europe/Helsinki"},{"iata":"JZH","icao":"ZUJZ","name":"Jiuzhai Huanglong Airport","city":"Ngawa (Songpan)","country":"CN","lat":32.853333,"lng":103.682222,"tz":"Asia/Shanghai"},{"iata":"KAB","icao":"FVKB","name":"Kariba Airport","city":"Kariba","country":"ZW","lat":-16.5198,"lng":28.885,"tz":"Africa/Lusaka"},{"iata":"KAC","icao":"OSKL","name":"Qamishli International Airport","city":"Qamishli","country":"SY","lat":37.020599,"lng":41.191399,"tz":"Asia/Damascus"},{"iata":"KAD","icao":"DNKA","name":"Kaduna International Airport","city":"Kaduna","country":"NG","lat":10.696,"lng":7.32011,"tz":"Africa/Lagos"},{"iata":"KAI","icao":"SYKA","name":"Kaieteur Airport","city":"Kaieteur Falls","country":"GY","lat":5.177349,"lng":-59.48898,"tz":"America/Guyana"},{"iata":"KAJ","icao":"EFKI","name":"Kajaani Airport","city":"Kajaani","country":"FI","lat":64.2855,"lng":27.6924,"tz":"Europe/Helsinki"},{"iata":"KAN","icao":"DNKN","name":"Mallam Aminu Kano International Airport","city":"Kano","country":"NG","lat":12.045613,"lng":8.523566,"tz":"Africa/Lagos"},{"iata":"KAO","icao":"EFKS","name":"Kuusamo Airport","city":"Kuusamo","country":"FI","lat":65.987602,"lng":29.239401,"tz":"Europe/Helsinki"},{"iata":"KAT","icao":"NZKT","name":"Kaitaia Airport","city":"Awanui","country":"NZ","lat":-35.069837,"lng":173.287053,"tz":"Pacific/Auckland"},{"iata":"KAW","icao":"VYKT","name":"Kawthoung Airport","city":"Kawthoung","country":"MM","lat":10.0493,"lng":98.538002,"tz":"Asia/Bangkok"},{"iata":"KBL","icao":"OAKB","name":"Kabul International Airport","city":"Kabul","country":"AF","lat":34.565899,"lng":69.212303,"tz":"Asia/Kabul"},{"iata":"KBR","icao":"WMKC","name":"Sultan Ismail Petra Airport","city":"Kota Baharu","country":"MY","lat":6.16685,"lng":102.292999,"tz":"Asia/Kuala_Lumpur"},{"iata":"KBV","icao":"VTSG","name":"Krabi International Airport","city":"Krabi","country":"TH","lat":8.095591,"lng":98.988955,"tz":"Asia/Bangkok"},{"iata":"KCH","icao":"WBGG","name":"Kuching International Airport","city":"Kuching","country":"MY","lat":1.487364,"lng":110.352859,"tz":"Asia/Kuching"},{"iata":"KCM","icao":"LTCN","name":"Kahramanmaraş Airport","city":"Kahramanmaraş","country":"TR","lat":37.538826,"lng":36.953522,"tz":"Europe/Istanbul"},{"iata":"KCT","icao":"VCCK","name":"Koggala Airport","city":"Galle","country":"LK","lat":5.99368,"lng":80.320297,"tz":"Asia/Colombo"},{"iata":"KCY","icao":null,"name":"Krasnoyarsk Cheremshanka Airport","city":"Krasnoyarsk","country":"RU","lat":56.177584,"lng":92.545881,"tz":"Asia/Krasnoyarsk"},{"iata":"KCZ","icao":"RJOK","name":"Kochi Ryoma Airport","city":"Nankoku","country":"JP","lat":33.545217,"lng":133.670166,"tz":"Asia/Tokyo"},{"iata":"KDH","icao":"OAKN","name":"Ahmad Shah Baba International Airport","city":"Kandahar","country":"AF","lat":31.505769,"lng":65.847963,"tz":"Asia/Kabul"},{"iata":"KDL","icao":"EEKA","name":"Kärdla Airport","city":"Kärdla","country":"EE","lat":58.990799,"lng":22.8307,"tz":"Europe/Tallinn"},{"iata":"KDM","icao":"VRMT","name":"Kaadedhdhoo Airport","city":"Huvadhu Atoll","country":"MV","lat":0.488131,"lng":72.996902,"tz":"Indian/Maldives"},{"iata":"KDO","icao":"VRMK","name":"Kadhdhoo Airport","city":"Kadhdhoo","country":"MV","lat":1.85917,"lng":73.521896,"tz":"Indian/Maldives"},{"iata":"KDU","icao":"OPSD","name":"Skardu International Airport","city":"Skardu","country":"PK","lat":35.33866,"lng":75.538648,"tz":"Asia/Karachi"},{"iata":"KEF","icao":"BIKF","name":"Keflavik International Airport","city":"Reykjavík","country":"IS","lat":63.985001,"lng":-22.6056,"tz":"Atlantic/Reykjavik"},{"iata":"KEJ","icao":"UNEE","name":"Alexei Leonov Kemerovo International Airport","city":"Kemerovo","country":"RU","lat":55.2701,"lng":86.107201,"tz":"Asia/Novokuznetsk"},{"iata":"KEM","icao":"EFKE","name":"Kemi-Tornio Airport","city":"Kemi / Tornio","country":"FI","lat":65.778702,"lng":24.5821,"tz":"Europe/Helsinki"},{"iata":"KEP","icao":"VNNG","name":"Nepalgunj Airport","city":"Nepalgunj","country":"NP","lat":28.1036,"lng":81.667,"tz":"Asia/Kolkata"},{"iata":"KER","icao":"OIKK","name":"Ayatollah Hashemi Rafsanjani International Airport","city":"Kerman","country":"IR","lat":30.271276,"lng":56.949692,"tz":"Asia/Tehran"},{"iata":"KET","icao":"VYKG","name":"Kengtung Airport","city":"Kengtung","country":"MM","lat":21.3016,"lng":99.636002,"tz":"Asia/Yangon"},{"iata":"KGA","icao":"FZUA","name":"Kananga Airport","city":"Kananga","country":"CD","lat":-5.90005,"lng":22.4692,"tz":"Africa/Lubumbashi"},{"iata":"KGC","icao":"YKSC","name":"Kingscote Airport","city":"","country":"AU","lat":-35.713902,"lng":137.520996,"tz":"Australia/Adelaide"},{"iata":"KGD","icao":"UMKK","name":"Khrabrovo Airport","city":"Kaliningrad","country":"RU","lat":54.89161,"lng":20.598559,"tz":"Europe/Kaliningrad"},{"iata":"KGF","icao":"UAKK","name":"Sary-Arka Airport","city":"Karaganda","country":"KZ","lat":49.670799,"lng":73.334396,"tz":"Asia/Almaty"},{"iata":"KGI","icao":"YPKG","name":"Kalgoorlie Boulder Airport","city":"Broadwood","country":"AU","lat":-30.791543,"lng":121.464586,"tz":"Australia/Perth"},{"iata":"KGL","icao":"HRYR","name":"Kigali International Airport","city":"Kigali","country":"RW","lat":-1.96863,"lng":30.1395,"tz":"Africa/Kigali"},{"iata":"KGP","icao":"USRK","name":"Kogalym International Airport","city":"Kogalym","country":"RU","lat":62.190399,"lng":74.533798,"tz":"Asia/Yekaterinburg"},{"iata":"KGS","icao":"LGKO","name":"Kos International Airport \"Ippokratis\"","city":"Kos Island","country":"GR","lat":36.794523,"lng":27.09115,"tz":"Europe/Athens"},{"iata":"KGT","icao":"ZUKD","name":"Kangding Airport","city":"Garzê (Kangding)","country":"CN","lat":30.142464,"lng":101.73872,"tz":"Asia/Shanghai"},{"iata":"KHD","icao":"OICK","name":"Khoram Abad Airport","city":"","country":"IR","lat":33.435398,"lng":48.282902,"tz":"Asia/Tehran"},{"iata":"KHE","icao":"UKOH","name":"Kherson International Airport","city":"Kherson","country":"UA","lat":46.6758,"lng":32.506401,"tz":"Europe/Kiev"},{"iata":"KHG","icao":"ZWSH","name":"Kashgar Laining International Airport","city":"Kashgar","country":"CN","lat":39.542273,"lng":76.02023,"tz":"Asia/Urumqi"},{"iata":"KHH","icao":"RCKH","name":"Kaohsiung International Airport","city":"Kaohsiung (Xiaogang)","country":"TW","lat":22.577101,"lng":120.349998,"tz":"Asia/Taipei"},{"iata":"KHI","icao":"OPKC","name":"Jinnah International Airport","city":"Karachi","country":"PK","lat":24.9065,"lng":67.160797,"tz":"Asia/Karachi"},{"iata":"KHK","icao":"OIBQ","name":"Khark Airport","city":"Khark","country":"IR","lat":29.260503,"lng":50.322193,"tz":"Asia/Tehran"},{"iata":"KHN","icao":"ZSCN","name":"Nanchang Changbei International Airport","city":"Nanchang","country":"CN","lat":28.864815,"lng":115.90271,"tz":"Asia/Shanghai"},{"iata":"KHS","icao":"OOKB","name":"Khasab Airport","city":"Khasab","country":"OM","lat":26.171,"lng":56.240601,"tz":"Asia/Muscat"},{"iata":"KHT","icao":"OAKS","name":"Khost International Airport","city":"Khost","country":"AF","lat":33.284605,"lng":69.80734,"tz":"Asia/Kabul"},{"iata":"KHV","icao":"UHHH","name":"Khabarovsk Novy Airport","city":"Khabarovsk","country":"RU","lat":48.528338,"lng":135.188588,"tz":"Asia/Vladivostok"},{"iata":"KHX","icao":null,"name":"Savannah Airstrip","city":"Kihihi","country":"UG","lat":-0.7165,"lng":29.6997,"tz":"Africa/Kampala"},{"iata":"KIH","icao":"OIBK","name":"Kish International Airport","city":"Kish Island","country":"IR","lat":26.525427,"lng":53.980462,"tz":"Asia/Tehran"},{"iata":"KIJ","icao":"RJSN","name":"Niigata Airport","city":"Niigata","country":"JP","lat":37.954166,"lng":139.112189,"tz":"Asia/Tokyo"},{"iata":"KIK","icao":"ORKK","name":"Kirkuk International Airport","city":"Kirkuk","country":"IQ","lat":35.469501,"lng":44.3489,"tz":"Asia/Baghdad"},{"iata":"KIM","icao":"FAKM","name":"Kimberley Airport","city":"Kimberley","country":"ZA","lat":-28.805401,"lng":24.764872,"tz":"Africa/Johannesburg"},{"iata":"KIN","icao":"MKJP","name":"Norman Manley International Airport","city":"Kingston","country":"JM","lat":17.935699,"lng":-76.787498,"tz":"America/Jamaica"},{"iata":"KIR","icao":"EIKY","name":"Kerry Airport","city":"Farranfore","country":"IE","lat":52.180901,"lng":-9.52378,"tz":"Europe/Dublin"},{"iata":"KIS","icao":"HKKI","name":"Kisumu International Airport","city":"Kisumu","country":"KE","lat":-0.086139,"lng":34.728901,"tz":"Africa/Nairobi"},{"iata":"KIX","icao":"RJBB","name":"Kansai International Airport","city":"Osaka","country":"JP","lat":34.427299,"lng":135.244003,"tz":"Asia/Tokyo"},{"iata":"KJA","icao":"UNKL","name":"Krasnoyarsk International Airport","city":"Krasnoyarsk","country":"RU","lat":56.175743,"lng":92.485788,"tz":"Asia/Krasnoyarsk"},{"iata":"KJB","icao":"VOKU","name":"Kurnool Airport","city":"Orvakal","country":"IN","lat":15.716288,"lng":78.16923,"tz":"Asia/Kolkata"},{"iata":"KJH","icao":"ZUKJ","name":"Kaili Huangping Airport","city":"Kaili (Huangping)","country":"CN","lat":26.972,"lng":107.988,"tz":"Asia/Shanghai"},{"iata":"KJI","icao":"ZWKN","name":"Burqin Kanas Airport","city":"Burqin","country":"CN","lat":48.2223,"lng":86.9959,"tz":"Asia/Urumqi"},{"iata":"KJT","icao":"WICA","name":"Kertajati International Airport","city":"Kertajati","country":"ID","lat":-6.647384,"lng":108.165561,"tz":"Asia/Jakarta"},{"iata":"KKC","icao":"VTUK","name":"Khon Kaen Airport","city":"Khon Kaen","country":"TH","lat":16.4666,"lng":102.783997,"tz":"Asia/Bangkok"},{"iata":"KKE","icao":"NZKK","name":"Kerikeri Airport","city":"Kerikeri","country":"NZ","lat":-35.259148,"lng":173.913317,"tz":"Pacific/Auckland"},{"iata":"KKJ","icao":"RJFR","name":"Kitakyushu Airport","city":"Kitakyushu","country":"JP","lat":33.845901,"lng":131.035004,"tz":"Asia/Tokyo"},{"iata":"KKN","icao":"ENKR","name":"Kirkenes Airport, Høybuktmoen","city":"Kirkenes","country":"NO","lat":69.7258,"lng":29.8913,"tz":"Europe/Oslo"},{"iata":"KKR","icao":"NTGK","name":"Kaukura Airport","city":"Raitahiti","country":"PF","lat":-15.6633,"lng":-146.884995,"tz":"Pacific/Tahiti"},{"iata":"KKS","icao":"OIFK","name":"Kashan Airport","city":"Kashan","country":"IR","lat":33.895302,"lng":51.577,"tz":"Asia/Tehran"},{"iata":"KKW","icao":"FZCA","name":"Kikwit Airport","city":"Kikwit","country":"CD","lat":-5.03577,"lng":18.785601,"tz":"Africa/Kinshasa"},{"iata":"KKX","icao":"RJKI","name":"Kikai Airport","city":"Kikai","country":"JP","lat":28.321301,"lng":129.927994,"tz":"Asia/Tokyo"},{"iata":"KLH","icao":"VAKP","name":"Kolhapur Airport","city":"Kolhapur","country":"IN","lat":16.6647,"lng":74.289398,"tz":"Asia/Kolkata"},{"iata":"KLO","icao":"RPVK","name":"Kalibo International Airport","city":"Kalibo","country":"PH","lat":11.6794,"lng":122.375999,"tz":"Asia/Manila"},{"iata":"KLR","icao":"ESMQ","name":"Kalmar Airport","city":"Kalmar","country":"SE","lat":56.685501,"lng":16.2876,"tz":"Europe/Stockholm"},{"iata":"KLU","icao":"LOWK","name":"Klagenfurt Airport","city":"Klagenfurt am Wörthersee","country":"AT","lat":46.642502,"lng":14.3377,"tz":"Europe/Vienna"},{"iata":"KLV","icao":"LKKV","name":"Karlovy Vary Airport","city":"Karlovy Vary","country":"CZ","lat":50.202999,"lng":12.915,"tz":"Europe/Prague"},{"iata":"KLW","icao":"PAKW","name":"Klawock Airport","city":"Klawock","country":"US","lat":55.579201,"lng":-133.076004,"tz":"America/Sitka"},{"iata":"KLX","icao":"LGKL","name":"Kalamata Airport","city":"Kalamata","country":"GR","lat":37.068298,"lng":22.025499,"tz":"Europe/Athens"},{"iata":"KMA","icao":"AYKM","name":"Kerema Airport","city":"Kerema","country":"PG","lat":-7.96361,"lng":145.770996,"tz":"Pacific/Port_Moresby"},{"iata":"KMC","icao":"OEKK","name":"King Khaled Military City Airport","city":"King Khaled Military City","country":"SA","lat":27.9009,"lng":45.528198,"tz":"Asia/Riyadh"},{"iata":"KME","icao":"HRZA","name":"Kamembe Airport","city":"Kamembe","country":"RW","lat":-2.46224,"lng":28.9079,"tz":"Africa/Kigali"},{"iata":"KMG","icao":"ZPPP","name":"Kunming Changshui International Airport","city":"Kunming","country":"CN","lat":25.110313,"lng":102.936743,"tz":"Asia/Shanghai"},{"iata":"KMI","icao":"RJFM","name":"Miyazaki Airport","city":"Miyazaki","country":"JP","lat":31.877199,"lng":131.449005,"tz":"Asia/Tokyo"},{"iata":"KMJ","icao":"RJFT","name":"Kumamoto Airport","city":"Kumamoto","country":"JP","lat":32.837299,"lng":130.854996,"tz":"Asia/Tokyo"},{"iata":"KMQ","icao":"RJNK","name":"Komatsu Airport / JASDF Komatsu Air Base","city":"Kanazawa","country":"JP","lat":36.393407,"lng":136.406895,"tz":"Asia/Tokyo"},{"iata":"KMS","icao":"DGSI","name":"Prempeh I International Airport","city":"Kumasi","country":"GH","lat":6.71456,"lng":-1.59082,"tz":"Africa/Accra"},{"iata":"KMW","icao":"UUBA","name":"Kostroma Sokerkino Airport","city":"Kostroma","country":"RU","lat":57.796902,"lng":41.019402,"tz":"Europe/Moscow"},{"iata":"KND","icao":"FZOA","name":"Kindu Airport","city":"Kindu","country":"CD","lat":-2.91918,"lng":25.9154,"tz":"Africa/Lubumbashi"},{"iata":"KNG","icao":"WASK","name":"Utarom Airport","city":"Kaimana","country":"ID","lat":-3.6446,"lng":133.695116,"tz":"Asia/Jayapura"},{"iata":"KNH","icao":"RCBS","name":"Kinmen Airport","city":"Shang-I","country":"TW","lat":24.4279,"lng":118.359001,"tz":"Asia/Taipei"},{"iata":"KNO","icao":"WIMM","name":"Kualanamu International Airport","city":"Beringin","country":"ID","lat":3.637847,"lng":98.870566,"tz":"Asia/Jakarta"},{"iata":"KNQ","icao":"NWWD","name":"Koné Airport","city":"Koné","country":"NC","lat":-21.053551,"lng":164.838768,"tz":"Pacific/Noumea"},{"iata":"KNS","icao":"YKII","name":"King Island Airport","city":"","country":"AU","lat":-39.877499,"lng":143.878006,"tz":"Australia/Currie"},{"iata":"KNU","icao":null,"name":"Kanpur Airport","city":"Kanpur","country":"IN","lat":26.404301,"lng":80.410103,"tz":"Asia/Kolkata"},{"iata":"KNX","icao":"YPKU","name":"East Kimberley Regional (Kununurra) Airport","city":"Kununurra","country":"AU","lat":-15.7781,"lng":128.707993,"tz":"Australia/Perth"},{"iata":"KOA","icao":"PHKO","name":"Ellison Onizuka Kona International Airport at Keāhole","city":"Kailua-Kona","country":"US","lat":19.738783,"lng":-156.045603,"tz":"Pacific/Honolulu"},{"iata":"KOE","icao":"WATT","name":"El Tari Airport","city":"Kupang","country":"ID","lat":-10.1716,"lng":123.670998,"tz":"Asia/Makassar"},{"iata":"KOI","icao":"EGPA","name":"Kirkwall Airport","city":"Kirkwall, Orkney Islands","country":"GB","lat":58.957903,"lng":-2.905077,"tz":"Europe/London"},{"iata":"KOJ","icao":"RJFK","name":"Kagoshima Airport","city":"Kagoshima","country":"JP","lat":31.8034,"lng":130.718994,"tz":"Asia/Tokyo"},{"iata":"KOK","icao":"EFKK","name":"Kokkola-Pietarsaari Airport","city":"Kokkola / Kruunupyy","country":"FI","lat":63.721199,"lng":23.143101,"tz":"Europe/Helsinki"},{"iata":"KOP","icao":"VTUW","name":"Nakhon Phanom Airport","city":"Nakhon Phanom","country":"TH","lat":17.383801,"lng":104.642998,"tz":"Asia/Bangkok"},{"iata":"KOS","icao":"VDSV","name":"Sihanouk International Airport","city":"Preah Sihanouk","country":"KH","lat":10.570557,"lng":103.632067,"tz":"Asia/Phnom_Penh"},{"iata":"KOV","icao":"UACK","name":"Kokshetau International Airport","city":"Kokshetau","country":"KZ","lat":53.329102,"lng":69.594597,"tz":"Asia/Almaty"},{"iata":"KPO","icao":"RKTH","name":"Pohang Airport (G-815/K-3)","city":"Pohang","country":"KR","lat":35.987955,"lng":129.420383,"tz":"Asia/Seoul"},{"iata":"KPW","icao":"UHMK","name":"Keperveem Airport","city":"Keperveem","country":"RU","lat":67.845001,"lng":166.139999,"tz":"Asia/Anadyr"},{"iata":"KQH","icao":"VIKG","name":"Kishangarh Airport Ajmer","city":"Ajmer (Kishangarh)","country":"IN","lat":26.591007,"lng":74.812956,"tz":"Asia/Kolkata"},{"iata":"KQT","icao":"UTDT","name":"Bokhtar International Airport","city":"Bokhtar","country":"TJ","lat":37.866315,"lng":68.864475,"tz":"Asia/Dushanbe"},{"iata":"KRF","icao":"ESNK","name":"Kramfors-Sollefteå Höga Kusten Airport","city":"Nyland","country":"SE","lat":63.048599,"lng":17.7689,"tz":"Europe/Stockholm"},{"iata":"KRK","icao":"EPKK","name":"Kraków John Paul II International Airport","city":"Balice","country":"PL","lat":50.077702,"lng":19.7848,"tz":"Europe/Warsaw"},{"iata":"KRL","icao":"ZWKL","name":"Korla Licheng Airport","city":"Korla","country":"CN","lat":41.614979,"lng":86.140817,"tz":"Asia/Urumqi"},{"iata":"KRN","icao":"ESNQ","name":"Kiruna Airport","city":"Kiruna","country":"SE","lat":67.821999,"lng":20.3368,"tz":"Europe/Stockholm"},{"iata":"KRO","icao":"USUU","name":"Kurgan Airport","city":"Kurgan","country":"RU","lat":55.4753,"lng":65.415604,"tz":"Asia/Yekaterinburg"},{"iata":"KRP","icao":"EKKA","name":"Midtjyllands Airport / Air Base Karup","city":"Karup","country":"DK","lat":56.297139,"lng":9.104311,"tz":"Europe/Copenhagen"},{"iata":"KRR","icao":"URKK","name":"Krasnodar Pashkovsky International Airport","city":"Krasnodar","country":"RU","lat":45.034465,"lng":39.174215,"tz":"Europe/Moscow"},{"iata":"KRS","icao":"ENCN","name":"Kristiansand Airport","city":"Kristiansand(Kjevik)","country":"NO","lat":58.204201,"lng":8.08537,"tz":"Europe/Oslo"},{"iata":"KRT","icao":"HSSK","name":"Khartoum International Airport","city":"Khartoum","country":"SD","lat":15.5895,"lng":32.5532,"tz":"Africa/Khartoum"},{"iata":"KRW","icao":"UTAK","name":"Turkmenbaşy International Airport","city":"Turkmenbaşy","country":"TM","lat":40.062833,"lng":53.005085,"tz":"Asia/Ashgabat"},{"iata":"KSA","icao":"PTSA","name":"Kosrae International Airport","city":"Okat","country":"FM","lat":5.35698,"lng":162.957993,"tz":"Pacific/Kosrae"},{"iata":"KSC","icao":"LZKZ","name":"Košice International Airport","city":"Košice","country":"SK","lat":48.663101,"lng":21.2411,"tz":"Europe/Bratislava"},{"iata":"KSD","icao":"ESOK","name":"Karlstad Airport","city":"Karlstad","country":"SE","lat":59.444698,"lng":13.3374,"tz":"Europe/Stockholm"},{"iata":"KSF","icao":"EDVK","name":"Kassel Airport","city":"Calden","country":"DE","lat":51.418395,"lng":9.391638,"tz":"Europe/Berlin"},{"iata":"KSH","icao":"OICC","name":"Shahid Ashrafi Esfahani Airport","city":"Kermanshah","country":"IR","lat":34.345901,"lng":47.1581,"tz":"Asia/Tehran"},{"iata":"KSL","icao":"HSKA","name":"Kassala Airport","city":"Kassala","country":"SD","lat":15.3875,"lng":36.3288,"tz":"Africa/Khartoum"},{"iata":"KSN","icao":"UAUU","name":"Kostanay International Airport","city":"Kostanay","country":"KZ","lat":53.206902,"lng":63.550301,"tz":"Asia/Qostanay"},{"iata":"KSU","icao":"ENKB","name":"Kristiansund Airport, Kvernberget","city":"Kvernberget","country":"NO","lat":63.111801,"lng":7.82452,"tz":"Europe/Oslo"},{"iata":"KSY","icao":"LTCF","name":"Kars Airport","city":"Kars","country":"TR","lat":40.562199,"lng":43.115002,"tz":"Europe/Istanbul"},{"iata":"KSZ","icao":"ULKK","name":"Kotlas Airport","city":"Kotlas","country":"RU","lat":61.235802,"lng":46.697498,"tz":"Europe/Moscow"},{"iata":"KTA","icao":"YPKA","name":"Karratha Airport","city":"Karratha","country":"AU","lat":-20.7122,"lng":116.773003,"tz":"Australia/Perth"},{"iata":"KTD","icao":"RORK","name":"Kitadaito Airport","city":"Kitadaitōjima","country":"JP","lat":25.9447,"lng":131.326996,"tz":"Asia/Tokyo"},{"iata":"KTG","icao":"WIOK","name":"Rahadi Osman Airport","city":"Ketapang","country":"ID","lat":-1.817165,"lng":109.963469,"tz":"Asia/Pontianak"},{"iata":"KTI","icao":"VDTI","name":"Techo International Airport","city":"Phnom Penh (Boeng Khyang)","country":"KH","lat":11.359987,"lng":104.921272,"tz":"Asia/Phnom_Penh"},{"iata":"KTM","icao":"VNKT","name":"Tribhuvan International Airport","city":"Kathmandu","country":"NP","lat":27.6966,"lng":85.3591,"tz":"Asia/Kathmandu"},{"iata":"KTN","icao":"PAKT","name":"Ketchikan International Airport","city":"Ketchikan","country":"US","lat":55.355598,"lng":-131.714004,"tz":"America/Sitka"},{"iata":"KTP","icao":"MKTP","name":"Tinson Pen Airport","city":"Tinson Pen","country":"JM","lat":17.9886,"lng":-76.823799,"tz":"America/Jamaica"},{"iata":"KTT","icao":"EFKT","name":"Kittilä International Airport","city":"Kittilä","country":"FI","lat":67.700996,"lng":24.8468,"tz":"Europe/Helsinki"},{"iata":"KTW","icao":"EPKT","name":"Katowice Wojciech Korfanty International Airport","city":"Katowice","country":"PL","lat":50.476015,"lng":19.080705,"tz":"Europe/Warsaw"},{"iata":"KUA","icao":"WMKD","name":"Kuantan Airport","city":"Kuantan","country":"MY","lat":3.77539,"lng":103.209,"tz":"Asia/Kuala_Lumpur"},{"iata":"KUF","icao":"UWWW","name":"Kurumoch International Airport","city":"Samara","country":"RU","lat":53.504902,"lng":50.164299,"tz":"Europe/Samara"},{"iata":"KUH","icao":"RJCK","name":"Kushiro Airport","city":"Kushiro","country":"JP","lat":43.041,"lng":144.192993,"tz":"Asia/Tokyo"},{"iata":"KUL","icao":"WMKK","name":"Kuala Lumpur International Airport","city":"Sepang","country":"MY","lat":2.74558,"lng":101.709999,"tz":"Asia/Kuala_Lumpur"},{"iata":"KUM","icao":"RJFC","name":"Yakushima Airport","city":"Yakushima","country":"JP","lat":30.385599,"lng":130.658997,"tz":"Asia/Tokyo"},{"iata":"KUN","icao":"EYKA","name":"Kaunas International Airport","city":"Kaunas","country":"LT","lat":54.963965,"lng":24.08582,"tz":"Europe/Vilnius"},{"iata":"KUO","icao":"EFKU","name":"Kuopio Airport","city":"Kuopio / Siilinjärvi","country":"FI","lat":63.007099,"lng":27.7978,"tz":"Europe/Helsinki"},{"iata":"KUS","icao":"BGKK","name":"Kulusuk Airport","city":"Kulusuk","country":"GL","lat":65.573601,"lng":-37.1236,"tz":"America/Godthab"},{"iata":"KUT","icao":"UGKO","name":"David the Builder Kutaisi International Airport","city":"Kopitnari","country":"GE","lat":42.177448,"lng":42.485353,"tz":"Asia/Tbilisi"},{"iata":"KUU","icao":"VIBR","name":"Kullu Manali Airport","city":"Bhuntar","country":"IN","lat":31.876699,"lng":77.154404,"tz":"Asia/Kolkata"},{"iata":"KUV","icao":"RKJK","name":"Gunsan Airport / Gunsan Air Base","city":"Gunsan","country":"KR","lat":35.903801,"lng":126.615997,"tz":"Asia/Seoul"},{"iata":"KVA","icao":"LGKV","name":"Kavala Alexander the Great International Airport","city":"Kavala","country":"GR","lat":40.9133,"lng":24.6192,"tz":"Europe/Athens"},{"iata":"KVG","icao":"AYKV","name":"Kavieng Airport","city":"Kavieng","country":"PG","lat":-2.5794,"lng":150.807999,"tz":"Pacific/Port_Moresby"},{"iata":"KVO","icao":"LYKV","name":"Morava Airport","city":"Kraljevo","country":"RS","lat":43.817519,"lng":20.586662,"tz":"Europe/Belgrade"},{"iata":"KVX","icao":"USKK","name":"Pobedilovo Airport","city":"Kirov","country":"RU","lat":58.503883,"lng":49.347831,"tz":"Europe/Kirov"},{"iata":"KWA","icao":"PKWA","name":"Bucholz Army Air Field","city":"Kwajalein","country":"MH","lat":8.72012,"lng":167.731995,"tz":"Pacific/Kwajalein"},{"iata":"KWE","icao":"ZUGY","name":"Guiyang Longdongbao International Airport","city":"Guiyang (Nanming)","country":"CN","lat":26.541805,"lng":106.80402,"tz":"Asia/Shanghai"},{"iata":"KWG","icao":"UKDR","name":"Kryvyi Rih International Airport","city":"Kryvyi Rih","country":"UA","lat":48.043301,"lng":33.209999,"tz":"Europe/Kiev"},{"iata":"KWI","icao":"OKKK","name":"Kuwait International Airport","city":"Kuwait City","country":"KW","lat":29.224487,"lng":47.969813,"tz":"Asia/Kuwait"},{"iata":"KWJ","icao":"RKJJ","name":"Gwangju Airport","city":"Gwangju","country":"KR","lat":35.123173,"lng":126.805444,"tz":"Asia/Seoul"},{"iata":"KWL","icao":"ZGKL","name":"Guilin Liangjiang International Airport","city":"Guilin (Lingui)","country":"CN","lat":25.219828,"lng":110.039553,"tz":"Asia/Shanghai"},{"iata":"KWM","icao":"YKOW","name":"Kowanyama Airport","city":"Kowanyama","country":"AU","lat":-15.485369,"lng":141.752572,"tz":"Australia/Brisbane"},{"iata":"KWZ","icao":"FZQM","name":"Kolwezi Airport","city":"Kolwezi","country":"CD","lat":-10.7659,"lng":25.505699,"tz":"Africa/Lubumbashi"},{"iata":"KXB","icao":"WAWP","name":"Sangia Nibandera Airport","city":"Kolaka","country":"ID","lat":-4.338158,"lng":121.524047,"tz":"Asia/Makassar"},{"iata":"KXK","icao":"UHKK","name":"Komsomolsk-on-Amur Airport","city":"Komsomolsk-on-Amur","country":"RU","lat":50.409,"lng":136.934006,"tz":"Asia/Vladivostok"},{"iata":"KYA","icao":"LTAN","name":"Konya Airport","city":"Konya","country":"TR","lat":37.979,"lng":32.561901,"tz":"Europe/Istanbul"},{"iata":"KYD","icao":"RCLY","name":"Lanyu Airport","city":"Orchid Island","country":"TW","lat":22.027,"lng":121.535004,"tz":"Asia/Taipei"},{"iata":"KYP","icao":"VYKP","name":"Kyaukpyu Airport","city":"Kyaukpyu","country":"MM","lat":19.426399,"lng":93.534798,"tz":"Asia/Yangon"},{"iata":"KYS","icao":"GAKD","name":"Kayes Dag Dag Airport","city":"Kayes","country":"ML","lat":14.482521,"lng":-11.399335,"tz":"Africa/Bamako"},{"iata":"KYZ","icao":"UNKY","name":"Kyzyl Airport","city":"Kyzyl","country":"RU","lat":51.669399,"lng":94.400597,"tz":"Asia/Krasnoyarsk"},{"iata":"KZI","icao":"LGKZ","name":"Kozani National Airport Filippos","city":"Kozani","country":"GR","lat":40.286098,"lng":21.840799,"tz":"Europe/Athens"},{"iata":"KZN","icao":"UWKD","name":"Kazan International Airport","city":"Kazan","country":"RU","lat":55.606201,"lng":49.278702,"tz":"Europe/Moscow"},{"iata":"KZO","icao":"UAOO","name":"Korkyt Ata International Airport","city":"Kyzylorda","country":"KZ","lat":44.706902,"lng":65.592499,"tz":"Asia/Qyzylorda"},{"iata":"LAD","icao":"FNLU","name":"Quatro de Fevereiro International Airport","city":"Luanda","country":"AO","lat":-8.85837,"lng":13.2312,"tz":"Africa/Luanda"},{"iata":"LAE","icao":"AYNZ","name":"Nadzab Tomodachi International Airport","city":"Lae","country":"PG","lat":-6.567995,"lng":146.726544,"tz":"Pacific/Port_Moresby"},{"iata":"LAF","icao":"KLAF","name":"Purdue University Airport","city":"West Lafayette","country":"US","lat":40.412875,"lng":-86.939363,"tz":"America/Indiana/Indianapolis"},{"iata":"LAJ","icao":"SBLJ","name":"Lages Airport","city":"Lages","country":"BR","lat":-27.782101,"lng":-50.281502,"tz":"America/Sao_Paulo"},{"iata":"LAL","icao":"KLAL","name":"Lakeland Linder International Airport","city":"Lakeland","country":"US","lat":27.989267,"lng":-82.020715,"tz":"America/New_York"},{"iata":"LAN","icao":"KLAN","name":"Capital Region International Airport","city":"Lansing","country":"US","lat":42.777582,"lng":-84.585721,"tz":"America/Detroit"},{"iata":"LAO","icao":"RPLI","name":"Laoag International Airport","city":"Laoag City","country":"PH","lat":18.175089,"lng":120.531006,"tz":"Asia/Manila"},{"iata":"LAP","icao":"MMLP","name":"Manuel Márquez de León International Airport","city":"La Paz","country":"MX","lat":24.072331,"lng":-110.362662,"tz":"America/Mazatlan"},{"iata":"LAQ","icao":"HLLQ","name":"Al Abraq International Airport","city":"Al Albraq","country":"LY","lat":32.789036,"lng":21.954864,"tz":"Africa/Tripoli"},{"iata":"LAR","icao":"KLAR","name":"Laramie Regional Airport","city":"Laramie","country":"US","lat":41.312099,"lng":-105.675003,"tz":"America/Denver"},{"iata":"LAS","icao":"KLAS","name":"Harry Reid International Airport","city":"Las Vegas","country":"US","lat":36.083361,"lng":-115.151817,"tz":"America/Los_Angeles"},{"iata":"LAU","icao":"HKLU","name":"Manda Airport","city":"Lamu","country":"KE","lat":-2.252431,"lng":40.912892,"tz":"Africa/Nairobi"},{"iata":"LAW","icao":"KLAW","name":"Lawton Fort Sill Regional Airport","city":"Lawton","country":"US","lat":34.567699,"lng":-98.416603,"tz":"America/Chicago"},{"iata":"LAX","icao":"KLAX","name":"Los Angeles International Airport","city":"Los Angeles","country":"US","lat":33.942501,"lng":-118.407997,"tz":"America/Los_Angeles"},{"iata":"LBA","icao":"EGNM","name":"Leeds Bradford Airport","city":"Leeds, West Yorkshire","country":"GB","lat":53.865898,"lng":-1.66057,"tz":"Europe/London"},{"iata":"LBB","icao":"KLBB","name":"Lubbock Preston Smith International Airport","city":"Lubbock","country":"US","lat":33.663601,"lng":-101.822998,"tz":"America/Chicago"},{"iata":"LBC","icao":"EDHL","name":"Lübeck Blankensee Airport","city":"Lübeck","country":"DE","lat":53.805401,"lng":10.7192,"tz":"Europe/Berlin"},{"iata":"LBD","icao":"UTDL","name":"Khujand International Airport","city":"Khujand","country":"TJ","lat":40.215401,"lng":69.694702,"tz":"Asia/Dushanbe"},{"iata":"LBE","icao":"KLBE","name":"Arnold Palmer Regional Airport","city":"Latrobe","country":"US","lat":40.275902,"lng":-79.4048,"tz":"America/New_York"},{"iata":"LBF","icao":"KLBF","name":"North Platte Regional Airport Lee Bird Field","city":"North Platte","country":"US","lat":41.126202,"lng":-100.683998,"tz":"America/Chicago"},{"iata":"LBG","icao":"LFPB","name":"Paris-Le Bourget International Airport","city":"Paris","country":"FR","lat":48.962276,"lng":2.436539,"tz":"Europe/Paris"},{"iata":"LBL","icao":"KLBL","name":"Liberal Mid-America Regional Airport","city":"Liberal","country":"US","lat":37.044201,"lng":-100.959999,"tz":"America/Chicago"},{"iata":"LBS","icao":"NFNL","name":"Labasa Airport","city":"Labasa","country":"FJ","lat":-16.4667,"lng":179.339996,"tz":"Pacific/Fiji"},{"iata":"LBU","icao":"WBKL","name":"Labuan Airport","city":"Labuan","country":"MY","lat":5.301667,"lng":115.248333,"tz":"Asia/Kuching"},{"iata":"LBV","icao":"FOOL","name":"Libreville Leon M'ba International Airport","city":"Libreville","country":"GA","lat":0.458951,"lng":9.41214,"tz":"Africa/Libreville"},{"iata":"LCA","icao":"LCLK","name":"Larnaca International Airport","city":"Larnaca","country":"CY","lat":34.875099,"lng":33.624901,"tz":"Asia/Nicosia"},{"iata":"LCE","icao":"MHLC","name":"Golosón International Airport","city":"La Ceiba","country":"HN","lat":15.7425,"lng":-86.852997,"tz":"America/Tegucigalpa"},{"iata":"LCG","icao":"LECO","name":"A Coruña Airport","city":"Culleredo","country":"ES","lat":43.302101,"lng":-8.37726,"tz":"Europe/Madrid"},{"iata":"LCH","icao":"KLCH","name":"Lake Charles Regional Airport","city":"Lake Charles","country":"US","lat":30.126101,"lng":-93.223297,"tz":"America/Chicago"},{"iata":"LCJ","icao":"EPLL","name":"Łódź Władysław Reymont Airport","city":"Łódź","country":"PL","lat":51.721901,"lng":19.3981,"tz":"Europe/Warsaw"},{"iata":"LCK","icao":"KLCK","name":"Rickenbacker International Airport","city":"Columbus","country":"US","lat":39.813801,"lng":-82.927803,"tz":"America/New_York"},{"iata":"LCX","icao":"ZSLO","name":"Liancheng Guanzhishan Airport","city":"Longyan (Liancheng)","country":"CN","lat":25.67592,"lng":116.745907,"tz":"Asia/Shanghai"},{"iata":"LCY","icao":"EGLC","name":"London City Airport","city":"London","country":"GB","lat":51.505299,"lng":0.055278,"tz":"Europe/London"},{"iata":"LDB","icao":"SBLO","name":"Governor José Richa Airport","city":"Londrina","country":"BR","lat":-23.334375,"lng":-51.128365,"tz":"America/Sao_Paulo"},{"iata":"LDE","icao":"LFBT","name":"Tarbes-Lourdes-Pyrénées Airport","city":"Tarbes/Lourdes/Pyrénées","country":"FR","lat":43.178699,"lng":-0.006439,"tz":"Europe/Paris"},{"iata":"LDS","icao":"ZYLD","name":"Yichun Lindu Airport","city":"Yichun","country":"CN","lat":47.752056,"lng":129.019125,"tz":"Asia/Shanghai"},{"iata":"LDU","icao":"WBKD","name":"Lahad Datu Airport","city":"Lahad Datu","country":"MY","lat":5.03241,"lng":118.32376,"tz":"Asia/Kuching"},{"iata":"LDX","icao":"SOOM","name":"Saint-Laurent-du-Maroni Airport","city":"Saint-Laurent-du-Maroni","country":"GF","lat":5.481891,"lng":-54.034964,"tz":"America/Cayenne"},{"iata":"LDY","icao":"EGAE","name":"City of Derry Airport","city":"Derry, Derry and Strabane","country":"GB","lat":55.042801,"lng":-7.16111,"tz":"Europe/London"},{"iata":"LEA","icao":"YPLM","name":"Learmonth Airport","city":"Exmouth","country":"AU","lat":-22.235201,"lng":114.090024,"tz":"Australia/Perth"},{"iata":"LEB","icao":"KLEB","name":"Lebanon Municipal Airport","city":"Lebanon","country":"US","lat":43.626099,"lng":-72.304199,"tz":"America/New_York"},{"iata":"LED","icao":"ULLI","name":"Pulkovo Airport","city":"St. Petersburg","country":"RU","lat":59.800301,"lng":30.262501,"tz":"Europe/Moscow"},{"iata":"LEI","icao":"LEAM","name":"Almería Airport","city":"Almería","country":"ES","lat":36.843899,"lng":-2.3701,"tz":"Europe/Madrid"},{"iata":"LEJ","icao":"EDDP","name":"Leipzig/Halle Airport","city":"Schkeuditz","country":"DE","lat":51.420657,"lng":12.232705,"tz":"Europe/Berlin"},{"iata":"LEN","icao":"LELN","name":"León Int'l Airport","city":"La Virgen Del Camino","country":"ES","lat":42.590709,"lng":-5.653406,"tz":"Europe/Madrid"},{"iata":"LER","icao":"YLST","name":"Leinster Airport","city":"","country":"AU","lat":-27.8433,"lng":120.703003,"tz":"Australia/Perth"},{"iata":"LET","icao":"SKLT","name":"Alfredo Vásquez Cobo International Airport","city":"Leticia","country":"CO","lat":-4.191147,"lng":-69.942003,"tz":"America/Eirunepe"},{"iata":"LEU","icao":"LESU","name":"Pirineus - la Seu d'Urgel Airport","city":"La Seu d'Urgell Pyrenees and Andorra","country":"ES","lat":42.3386,"lng":1.40917,"tz":"Europe/Madrid"},{"iata":"LEX","icao":"KLEX","name":"Blue Grass Airport","city":"Lexington","country":"US","lat":38.035066,"lng":-84.606738,"tz":"America/New_York"},{"iata":"LFM","icao":"OISR","name":"Lamerd Airport","city":"Lamerd","country":"IR","lat":27.3727,"lng":53.188801,"tz":"Asia/Tehran"},{"iata":"LFQ","icao":"ZBLF","name":"Linfen Yaodu Airport","city":"Linfen (Yaodu)","country":"CN","lat":36.132629,"lng":111.641236,"tz":"Asia/Shanghai"},{"iata":"LFT","icao":"KLFT","name":"Lafayette Regional Airport","city":"Lafayette","country":"US","lat":30.205299,"lng":-91.987602,"tz":"America/Chicago"},{"iata":"LFW","icao":"DXXX","name":"Lomé–Tokoin International Airport","city":"Lomé","country":"TG","lat":6.16561,"lng":1.25451,"tz":"Africa/Lome"},{"iata":"LGA","icao":"KLGA","name":"LaGuardia Airport","city":"New York","country":"US","lat":40.777199,"lng":-73.872597,"tz":"America/New_York"},{"iata":"LGB","icao":"KLGB","name":"Long Beach International Airport","city":"Long Beach","country":"US","lat":33.816523,"lng":-118.149891,"tz":"America/Los_Angeles"},{"iata":"LGG","icao":"EBLG","name":"Liège Airport","city":"Grâce-Hollogne","country":"BE","lat":50.638574,"lng":5.443897,"tz":"Europe/Brussels"},{"iata":"LGI","icao":"MYLD","name":"Deadman's Cay Airport","city":"Deadman's Cay","country":"BS","lat":23.179001,"lng":-75.093597,"tz":"America/Nassau"},{"iata":"LGK","icao":"WMKL","name":"Langkawi International Airport","city":"Langkawi","country":"MY","lat":6.32973,"lng":99.728699,"tz":"Asia/Kuala_Lumpur"},{"iata":"LGW","icao":"EGKK","name":"London Gatwick Airport","city":"London","country":"GB","lat":51.148744,"lng":-0.185739,"tz":"Europe/London"},{"iata":"LHE","icao":"OPLA","name":"Allama Iqbal International Airport","city":"Lahore","country":"PK","lat":31.521601,"lng":74.403603,"tz":"Asia/Karachi"},{"iata":"LHG","icao":"YLRD","name":"Lightning Ridge Airport","city":"","country":"AU","lat":-29.452857,"lng":147.977146,"tz":"Australia/Sydney"},{"iata":"LHR","icao":"EGLL","name":"London Heathrow Airport","city":"London","country":"GB","lat":51.470748,"lng":-0.459909,"tz":"Europe/London"},{"iata":"LHS","icao":"SAVH","name":"Las Heras Airport","city":"Las Heras","country":"AR","lat":-46.538517,"lng":-68.965323,"tz":"America/Argentina/Rio_Gallegos"},{"iata":"LHW","icao":"ZLLL","name":"Lanzhou Zhongchuan International Airport","city":"Lanzhou (Yongdeng)","country":"CN","lat":36.515202,"lng":103.620003,"tz":"Asia/Shanghai"},{"iata":"LIF","icao":"NWWL","name":"Lifou Airport","city":"Lifou","country":"NC","lat":-20.774563,"lng":167.239328,"tz":"Pacific/Noumea"},{"iata":"LIG","icao":"LFBL","name":"Limoges Airport","city":"Limoges/Bellegarde","country":"FR","lat":45.862801,"lng":1.17944,"tz":"Europe/Paris"},{"iata":"LIH","icao":"PHLI","name":"Lihue Airport","city":"Lihue, Kauai","country":"US","lat":21.974393,"lng":-159.337146,"tz":"Pacific/Honolulu"},{"iata":"LIL","icao":"LFQQ","name":"Lille Airport","city":"Lesquin","country":"FR","lat":50.566564,"lng":3.102429,"tz":"Europe/Paris"},{"iata":"LIM","icao":"SPJC","name":"Jorge Chávez International Airport","city":"Lima","country":"PE","lat":-12.0219,"lng":-77.114305,"tz":"America/Lima"},{"iata":"LIN","icao":"LIML","name":"Milano Linate Airport","city":"Segrate (MI)","country":"IT","lat":45.445099,"lng":9.27674,"tz":"Europe/Rome"},{"iata":"LIO","icao":"MRLM","name":"Limón International Airport","city":"Limón","country":"CR","lat":9.95796,"lng":-83.022003,"tz":"America/Costa_Rica"},{"iata":"LIR","icao":"MRLB","name":"Daniel Oduber Quirós International Airport","city":"Liberia","country":"CR","lat":10.5933,"lng":-85.544403,"tz":"America/Costa_Rica"},{"iata":"LIS","icao":"LPPT","name":"Lisbon Humberto Delgado Airport","city":"Lisbon","country":"PT","lat":38.7813,"lng":-9.13592,"tz":"Europe/Lisbon"},{"iata":"LIT","icao":"KLIT","name":"Bill & Hillary Clinton National Airport/Adams Field","city":"Little Rock","country":"US","lat":34.729222,"lng":-92.223591,"tz":"America/Chicago"},{"iata":"LIW","icao":"VYLK","name":"Loikaw Airport","city":"Loikaw","country":"MM","lat":19.6915,"lng":97.214798,"tz":"Asia/Yangon"},{"iata":"LJG","icao":"ZPLJ","name":"Lijiang Sanyi International Airport","city":"Lijiang","country":"CN","lat":26.677483,"lng":100.244944,"tz":"Asia/Shanghai"},{"iata":"LJU","icao":"LJLJ","name":"Ljubljana Jože Pučnik Airport","city":"Zgornji Brnik","country":"SI","lat":46.223701,"lng":14.4576,"tz":"Europe/Ljubljana"},{"iata":"LKL","icao":"ENNA","name":"Lakselv Airport, Banak","city":"Lakselv","country":"NO","lat":70.068802,"lng":24.973499,"tz":"Europe/Oslo"},{"iata":"LKN","icao":"ENLK","name":"Leknes Airport","city":"Leknes","country":"NO","lat":68.152496,"lng":13.6094,"tz":"Europe/Oslo"},{"iata":"LKO","icao":"VILK","name":"Chaudhary Charan Singh International Airport","city":"Lucknow","country":"IN","lat":26.760599,"lng":80.889297,"tz":"Asia/Kolkata"},{"iata":"LLA","icao":"ESPA","name":"Luleå Airport","city":"Luleå","country":"SE","lat":65.5438,"lng":22.122,"tz":"Europe/Stockholm"},{"iata":"LLF","icao":"ZGLG","name":"Yongzhou Lingling Airport","city":"Yongzhou","country":"CN","lat":26.338661,"lng":111.610043,"tz":"Asia/Shanghai"},{"iata":"LLV","icao":"ZBLL","name":"Lüliang Dawu Airport","city":"Lüliang","country":"CN","lat":37.683333,"lng":111.142778,"tz":"Asia/Shanghai"},{"iata":"LLW","icao":"FWKI","name":"Kamuzu International Airport","city":"Lumbadzi","country":"MW","lat":-13.7894,"lng":33.780998,"tz":"Africa/Blantyre"},{"iata":"LME","icao":"LFRM","name":"Le Mans-Arnage Airport","city":"Le Mans, Sarthe","country":"FR","lat":47.948604,"lng":0.201702,"tz":"Europe/Paris"},{"iata":"LMM","icao":"MMLM","name":"Valle del Fuerte International Airport","city":"Los Mochis","country":"MX","lat":25.685503,"lng":-109.081159,"tz":"America/Mazatlan"},{"iata":"LMN","icao":"WBGJ","name":"Limbang Airport","city":"Limbang","country":"MY","lat":4.8083,"lng":115.010002,"tz":"Asia/Kuching"},{"iata":"LMP","icao":"LICD","name":"Lampedusa Airport","city":"Lampedusa","country":"IT","lat":35.497898,"lng":12.6181,"tz":"Africa/Tunis"},{"iata":"LNJ","icao":"ZPLC","name":"Lincang Boshang Airport","city":"Lincang","country":"CN","lat":23.7381,"lng":100.025002,"tz":"Asia/Shanghai"},{"iata":"LNK","icao":"KLNK","name":"Lincoln Airport","city":"Lincoln","country":"US","lat":40.844882,"lng":-96.76178,"tz":"America/Chicago"},{"iata":"LNL","icao":"ZLLN","name":"Longnan Chengzhou Airport","city":"Longnan (Cheng)","country":"CN","lat":33.789918,"lng":105.790014,"tz":"Asia/Shanghai"},{"iata":"LNO","icao":"YLEO","name":"Leonora Airport","city":"Leonora","country":"AU","lat":-28.878099,"lng":121.315002,"tz":"Australia/Perth"},{"iata":"LNS","icao":"KLNS","name":"Lancaster Airport","city":"Lancaster","country":"US","lat":40.1217,"lng":-76.296097,"tz":"America/New_York"},{"iata":"LNY","icao":"PHNY","name":"Lanai Airport","city":"Lanai City","country":"US","lat":20.785675,"lng":-156.951324,"tz":"Pacific/Honolulu"},{"iata":"LNZ","icao":"LOWL","name":"Linz-Hörsching Airport","city":"Linz","country":"AT","lat":48.235362,"lng":14.188128,"tz":"Europe/Vienna"},{"iata":"LOE","icao":"VTUL","name":"Loei Airport","city":"","country":"TH","lat":17.4391,"lng":101.722,"tz":"Asia/Bangkok"},{"iata":"LOP","icao":"WADL","name":"Lombok International Airport","city":"Mataram (Pujut, Lombok Tengah)","country":"ID","lat":-8.759962,"lng":116.278169,"tz":"Asia/Makassar"},{"iata":"LOS","icao":"DNMM","name":"Murtala Muhammed International Airport","city":"Lagos","country":"NG","lat":6.57737,"lng":3.32116,"tz":"Africa/Lagos"},{"iata":"LPA","icao":"GCLP","name":"Gran Canaria Airport","city":"Gran Canaria Island","country":"ES","lat":27.9319,"lng":-15.3866,"tz":"Atlantic/Canary"},{"iata":"LPB","icao":"SLLP","name":"El Alto International Airport","city":"La Paz / El Alto","country":"BO","lat":-16.510272,"lng":-68.189416,"tz":"America/La_Paz"},{"iata":"LPF","icao":"ZUPS","name":"Liupanshui Yuezhao Airport","city":"Liupanshui (Zhongshan)","country":"CN","lat":26.609417,"lng":104.979,"tz":"Asia/Shanghai"},{"iata":"LPI","icao":"ESSL","name":"Linköping City Airport","city":"Linköping","country":"SE","lat":58.404909,"lng":15.684499,"tz":"Europe/Stockholm"},{"iata":"LPK","icao":"UUOL","name":"Lipetsk Airport","city":"Lipetsk","country":"RU","lat":52.702801,"lng":39.5378,"tz":"Europe/Moscow"},{"iata":"LPL","icao":"EGGP","name":"Liverpool John Lennon Airport","city":"Liverpool","country":"GB","lat":53.334863,"lng":-2.849637,"tz":"Europe/London"},{"iata":"LPP","icao":"EFLP","name":"Lappeenranta Airport","city":"Lappeenranta","country":"FI","lat":61.044601,"lng":28.144743,"tz":"Europe/Helsinki"},{"iata":"LPQ","icao":"VLLB","name":"Luang Phabang International Airport","city":"Luang Phabang","country":"LA","lat":19.904273,"lng":102.167191,"tz":"Asia/Vientiane"},{"iata":"LPT","icao":"VTCL","name":"Lampang Airport","city":"","country":"TH","lat":18.270901,"lng":99.504204,"tz":"Asia/Bangkok"},{"iata":"LRD","icao":"KLRD","name":"Laredo International Airport","city":"Laredo","country":"US","lat":27.5438,"lng":-99.461601,"tz":"America/Chicago"},{"iata":"LRE","icao":"YLRE","name":"Longreach Airport","city":"Longreach","country":"AU","lat":-23.4342,"lng":144.279999,"tz":"Australia/Brisbane"},{"iata":"LRH","icao":"LFBH","name":"La Rochelle Île de Ré Airport","city":"La Rochelle","country":"FR","lat":46.179199,"lng":-1.19528,"tz":"Europe/Paris"},{"iata":"LRM","icao":"MDLR","name":"Casa De Campo International Airport","city":"La Romana","country":"DO","lat":18.452222,"lng":-68.911111,"tz":"America/Santo_Domingo"},{"iata":"LRR","icao":"OISL","name":"Lar Airport","city":"Lar","country":"IR","lat":27.6747,"lng":54.383301,"tz":"Asia/Tehran"},{"iata":"LRT","icao":"LFRH","name":"Lorient South Brittany (Bretagne Sud) Airport","city":"Lorient/Lann/Bihoué","country":"FR","lat":47.760601,"lng":-3.44,"tz":"Europe/Paris"},{"iata":"LRU","icao":"KLRU","name":"Las Cruces International Airport","city":"Las Cruces","country":"US","lat":32.289398,"lng":-106.921997,"tz":"America/Denver"},{"iata":"LSC","icao":"SCSE","name":"La Florida Airport","city":"La Serena-Coquimbo","country":"CL","lat":-29.916201,"lng":-71.199501,"tz":"America/Santiago"},{"iata":"LSE","icao":"KLSE","name":"La Crosse Regional Airport","city":"La Crosse","country":"US","lat":43.879002,"lng":-91.256699,"tz":"America/Chicago"},{"iata":"LSH","icao":"VYLS","name":"Lashio Airport","city":"Lashio","country":"MM","lat":22.9779,"lng":97.752197,"tz":"Asia/Yangon"},{"iata":"LSI","icao":"EGPB","name":"Sumburgh Airport","city":"Lerwick, Shetland","country":"GB","lat":59.878899,"lng":-1.29556,"tz":"Europe/London"},{"iata":"LSP","icao":"SVJC","name":"Josefa Camejo International Airport","city":"Paraguaná","country":"VE","lat":11.780775,"lng":-70.151497,"tz":"America/Caracas"},{"iata":"LSR","icao":null,"name":"Alas Leuser Airport","city":"Kutacane","country":"ID","lat":3.391456,"lng":97.863726,"tz":"Asia/Jakarta"},{"iata":"LST","icao":"YMLT","name":"Launceston Airport","city":"Launceston (Western Junction)","country":"AU","lat":-41.544935,"lng":147.210785,"tz":"Australia/Hobart"},{"iata":"LSY","icao":"YLIS","name":"Lismore Airport","city":"Lismore","country":"AU","lat":-28.830689,"lng":153.258419,"tz":"Australia/Sydney"},{"iata":"LTD","icao":"HLTD","name":"Ghadames Airport","city":"Ghadames","country":"LY","lat":30.145484,"lng":9.702095,"tz":"Africa/Tripoli"},{"iata":"LTI","icao":"ZMAT","name":"Altai Airport","city":"Altai","country":"MN","lat":46.3764,"lng":96.2211,"tz":"Asia/Hovd"},{"iata":"LTK","icao":"OSLK","name":"Latakia International Airport","city":"Latakia","country":"SY","lat":35.4011,"lng":35.9487,"tz":"Asia/Damascus"},{"iata":"LTM","icao":"SYLT","name":"Lethem Airport","city":"Lethem","country":"GY","lat":3.37276,"lng":-59.789398,"tz":"America/Guyana"},{"iata":"LTN","icao":"EGGW","name":"London Luton Airport","city":"Luton, Luton","country":"GB","lat":51.874699,"lng":-0.368333,"tz":"Europe/London"},{"iata":"LTO","icao":"MMLT","name":"Loreto International Airport","city":"Loreto","country":"MX","lat":25.989549,"lng":-111.348408,"tz":"America/Mazatlan"},{"iata":"LTU","icao":"VALT","name":"Murod Kond Airport","city":"Latur","country":"IN","lat":18.411501,"lng":76.464699,"tz":"Asia/Kolkata"},{"iata":"LTX","icao":null,"name":"Cotopaxi International Airport","city":"Latacunga","country":"EC","lat":-0.906833,"lng":-78.615799,"tz":"America/Guayaquil"},{"iata":"LUA","icao":"VNLK","name":"Tenzing-Hillary Airport","city":"Lukla","country":"NP","lat":27.686768,"lng":86.729479,"tz":"Asia/Kathmandu"},{"iata":"LUD","icao":"FYLZ","name":"Luderitz Airport","city":"Luderitz","country":"NA","lat":-26.687401,"lng":15.2429,"tz":"Africa/Windhoek"},{"iata":"LUG","icao":"LSZA","name":"Lugano Airport","city":"Agno","country":"CH","lat":46.004299,"lng":8.91058,"tz":"Europe/Zurich"},{"iata":"LUK","icao":"KLUK","name":"Cincinnati Municipal Airport Lunken Field","city":"Cincinnati","country":"US","lat":39.102357,"lng":-84.418945,"tz":"America/New_York"},{"iata":"LUM","icao":"ZPMS","name":"Dehong Mangshi International Airport","city":"Dehong (Mangshi)","country":"CN","lat":24.4011,"lng":98.5317,"tz":"Asia/Shanghai"},{"iata":"LUN","icao":"FLKK","name":"Kenneth Kaunda International Airport","city":"Lusaka","country":"ZM","lat":-15.330833,"lng":28.452722,"tz":"Africa/Lusaka"},{"iata":"LUQ","icao":"SAOU","name":"Brigadier Mayor D Cesar Raul Ojeda Airport","city":"San Luis","country":"AR","lat":-33.273201,"lng":-66.3564,"tz":"America/Argentina/San_Luis"},{"iata":"LUR","icao":"PALU","name":"Cape Lisburne LRRS Airport","city":"Cape Lisburne","country":"US","lat":68.875099,"lng":-166.110001,"tz":"America/Nome"},{"iata":"LUV","icao":"WAPF","name":"Karel Sadsuitubun Airport","city":"Langgur","country":"ID","lat":-5.760278,"lng":132.759444,"tz":"Asia/Jayapura"},{"iata":"LUX","icao":"ELLX","name":"Luxembourg-Findel International Airport","city":"Luxembourg","country":"LU","lat":49.626845,"lng":6.212134,"tz":"Europe/Luxembourg"},{"iata":"LUZ","icao":"EPLB","name":"Lublin Airport","city":"Lublin","country":"PL","lat":51.240157,"lng":22.713461,"tz":"Europe/Warsaw"},{"iata":"LVI","icao":"FLHN","name":"Harry Mwanga Nkumbula International Airport","city":"Livingstone","country":"ZM","lat":-17.821524,"lng":25.819642,"tz":"Africa/Lusaka"},{"iata":"LWB","icao":"KLWB","name":"Greenbrier Valley Airport","city":"Lewisburg","country":"US","lat":37.857914,"lng":-80.400438,"tz":"America/New_York"},{"iata":"LWN","icao":"UDSG","name":"Shirak International Airport","city":"Gyumri","country":"AM","lat":40.750401,"lng":43.859299,"tz":"Asia/Yerevan"},{"iata":"LWO","icao":"UKLL","name":"Lviv International Airport","city":"Lviv","country":"UA","lat":49.8125,"lng":23.9561,"tz":"Europe/Kiev"},{"iata":"LWS","icao":"KLWS","name":"Lewiston Nez Perce County Airport","city":"Lewiston","country":"US","lat":46.3745,"lng":-117.014999,"tz":"America/Los_Angeles"},{"iata":"LXA","icao":"ZULS","name":"Lhasa Gonggar International Airport","city":"Shannan (Gonggar)","country":"CN","lat":29.298001,"lng":90.911951,"tz":"Asia/Shanghai"},{"iata":"LXR","icao":"HELX","name":"Luxor International Airport","city":"Luxor","country":"EG","lat":25.671018,"lng":32.706446,"tz":"Africa/Cairo"},{"iata":"LYA","icao":"ZHLY","name":"Luoyang Beijiao Airport","city":"Luoyang (Laocheng)","country":"CN","lat":34.7411,"lng":112.388,"tz":"Asia/Shanghai"},{"iata":"LYC","icao":"ESNL","name":"Lycksele Airport","city":"Lycksele","country":"SE","lat":64.548302,"lng":18.7162,"tz":"Europe/Stockholm"},{"iata":"LYG","icao":"ZSLG","name":"Lianyungang Huaguoshan International Airport","city":"Lianyungang","country":"CN","lat":34.41406,"lng":119.17899,"tz":"Asia/Shanghai"},{"iata":"LYH","icao":"KLYH","name":"Lynchburg Regional Airport - Preston Glenn Field","city":"Lynchburg","country":"US","lat":37.326698,"lng":-79.200401,"tz":"America/New_York"},{"iata":"LYI","icao":"ZSLY","name":"Linyi Qiyang Airport","city":"Linyi (Hedong)","country":"CN","lat":35.052918,"lng":118.411828,"tz":"Asia/Shanghai"},{"iata":"LYP","icao":"OPFA","name":"Faisalabad International Airport","city":"Faisalabad","country":"PK","lat":31.364923,"lng":72.995319,"tz":"Asia/Karachi"},{"iata":"LYR","icao":"ENSB","name":"Svalbard Airport, Longyear","city":"Longyearbyen","country":"NO","lat":78.246101,"lng":15.4656,"tz":"Arctic/Longyearbyen"},{"iata":"LYS","icao":"LFLL","name":"Lyon Saint-Exupéry Airport","city":"Colombier-Saugnieu, Rhône","country":"FR","lat":45.725996,"lng":5.090139,"tz":"Europe/Paris"},{"iata":"LZG","icao":"ZULA","name":"Langzhong Gucheng Airport","city":"Nanchong (Langzhong)","country":"CN","lat":31.50191,"lng":106.034417,"tz":"Asia/Shanghai"},{"iata":"LZH","icao":"ZGZH","name":"Liuzhou Bailian Airport / Bailian Air Base","city":"Liuzhou (Liujiang)","country":"CN","lat":24.2075,"lng":109.390999,"tz":"Asia/Shanghai"},{"iata":"LZN","icao":"RCFG","name":"Matsu Nangan Airport","city":"Matsu (Nangan)","country":"TW","lat":26.159656,"lng":119.958376,"tz":"Asia/Shanghai"},{"iata":"LZO","icao":"ZULZ","name":"Luzhou Yunlong Airport","city":"Luzhou (Yunlong)","country":"CN","lat":29.030357,"lng":105.468407,"tz":"Asia/Shanghai"},{"iata":"LZY","icao":"ZUNZ","name":"Nyingchi Mainling Airport","city":"Nyingchi (Mainling)","country":"CN","lat":29.303301,"lng":94.335297,"tz":"Asia/Kolkata"},{"iata":"MAA","icao":"VOMM","name":"Chennai International Airport","city":"Chennai","country":"IN","lat":12.990005,"lng":80.169296,"tz":"Asia/Kolkata"},{"iata":"MAB","icao":"SBMA","name":"João Correa da Rocha Airport","city":"Marabá","country":"BR","lat":-5.36859,"lng":-49.138,"tz":"America/Belem"},{"iata":"MAD","icao":"LEMD","name":"Adolfo Suárez Madrid–Barajas Airport","city":"Madrid","country":"ES","lat":40.493407,"lng":-3.572249,"tz":"Europe/Madrid"},{"iata":"MAF","icao":"KMAF","name":"Midland International Air and Space Port","city":"Midland","country":"US","lat":31.942499,"lng":-102.202003,"tz":"America/Chicago"},{"iata":"MAG","icao":"AYMD","name":"Madang Airport","city":"Madang","country":"PG","lat":-5.20708,"lng":145.789001,"tz":"Pacific/Port_Moresby"},{"iata":"MAH","icao":"LEMH","name":"Menorca Airport","city":"Mahón (Maó)","country":"ES","lat":39.862598,"lng":4.21865,"tz":"Europe/Madrid"},{"iata":"MAJ","icao":"PKMJ","name":"Marshall Islands International Airport","city":"Majuro Atoll","country":"MH","lat":7.06511,"lng":171.271656,"tz":"Pacific/Majuro"},{"iata":"MAK","icao":"HSSM","name":"Malakal International Airport","city":"Malakal","country":"SS","lat":9.558739,"lng":31.651937,"tz":"Africa/Khartoum"},{"iata":"MAM","icao":"MMMA","name":"General Servando Canales International Airport","city":"Matamoros","country":"MX","lat":25.769899,"lng":-97.525299,"tz":"America/Matamoros"},{"iata":"MAN","icao":"EGCC","name":"Manchester Airport","city":"Manchester, Greater Manchester","country":"GB","lat":53.349375,"lng":-2.279521,"tz":"Europe/London"},{"iata":"MAO","icao":"SBEG","name":"Eduardo Gomes International Airport","city":"Manaus","country":"BR","lat":-3.03861,"lng":-60.049702,"tz":"America/Manaus"},{"iata":"MAQ","icao":"VTPM","name":"Mae Sot Airport","city":"","country":"TH","lat":16.6999,"lng":98.545097,"tz":"Asia/Bangkok"},{"iata":"MAR","icao":"SVMC","name":"La Chinita International Airport","city":"Maracaibo","country":"VE","lat":10.557542,"lng":-71.729307,"tz":"America/Caracas"},{"iata":"MAS","icao":"AYMO","name":"Momote Airport","city":"Manus Island","country":"PG","lat":-2.06189,"lng":147.423996,"tz":"Pacific/Port_Moresby"},{"iata":"MAU","icao":"NTTP","name":"Maupiti Airport","city":"","country":"PF","lat":-16.4265,"lng":-152.244003,"tz":"Pacific/Tahiti"},{"iata":"MAZ","icao":"TJMZ","name":"Eugenio Maria De Hostos Airport","city":"Mayaguez","country":"PR","lat":18.255699,"lng":-67.148499,"tz":"America/Puerto_Rico"},{"iata":"MBA","icao":"HKMO","name":"Moi International Airport","city":"Mombasa","country":"KE","lat":-4.03483,"lng":39.5942,"tz":"Africa/Nairobi"},{"iata":"MBD","icao":"FAMM","name":"Mmabatho International Airport","city":"Mafeking","country":"ZA","lat":-25.798401,"lng":25.548,"tz":"Africa/Johannesburg"},{"iata":"MBE","icao":"RJEB","name":"Monbetsu Airport","city":"Monbetsu","country":"JP","lat":44.303902,"lng":143.404007,"tz":"Asia/Tokyo"},{"iata":"MBI","icao":"HTGW","name":"Songwe Airport","city":"Mbeya","country":"TZ","lat":-8.919942,"lng":33.273981,"tz":"Africa/Dar_es_Salaam"},{"iata":"MBJ","icao":"MKJS","name":"Sangster International Airport","city":"Montego Bay","country":"JM","lat":18.50342,"lng":-77.91323,"tz":"America/Jamaica"},{"iata":"MBS","icao":"KMBS","name":"MBS International Airport","city":"Freeland","country":"US","lat":43.533181,"lng":-84.083104,"tz":"America/Detroit"},{"iata":"MBT","icao":"RPVJ","name":"Moises R. Espinosa Airport","city":"Masbate","country":"PH","lat":12.369682,"lng":123.630095,"tz":"Asia/Manila"},{"iata":"MBW","icao":"YMMB","name":"Melbourne Moorabbin Airport","city":"Melbourne","country":"AU","lat":-37.977765,"lng":145.099799,"tz":"Australia/Melbourne"},{"iata":"MBX","icao":"LJMB","name":"Maribor Edvard Rusjan Airport","city":"Maribor","country":"SI","lat":46.4799,"lng":15.6861,"tz":"Europe/Ljubljana"},{"iata":"MCE","icao":"KMCE","name":"Merced Regional Macready Field","city":"Merced","country":"US","lat":37.284698,"lng":-120.514,"tz":"America/Los_Angeles"},{"iata":"MCG","icao":"PAMC","name":"McGrath Airport","city":"McGrath","country":"US","lat":62.9529,"lng":-155.606003,"tz":"America/Anchorage"},{"iata":"MCI","icao":"KMCI","name":"Kansas City International Airport","city":"Kansas City","country":"US","lat":39.301699,"lng":-94.713893,"tz":"America/Chicago"},{"iata":"MCK","icao":"KMCK","name":"McCook Ben Nelson Regional Airport","city":"McCook","country":"US","lat":40.207787,"lng":-100.592794,"tz":"America/Chicago"},{"iata":"MCN","icao":"KMCN","name":"Middle Georgia Regional Airport","city":"Macon","country":"US","lat":32.692799,"lng":-83.6492,"tz":"America/New_York"},{"iata":"MCO","icao":"KMCO","name":"Orlando International Airport","city":"Orlando","country":"US","lat":28.429399,"lng":-81.308998,"tz":"America/New_York"},{"iata":"MCP","icao":"SBMQ","name":"Macapá - Alberto Alcolumbre International Airport","city":"Macapá","country":"BR","lat":0.050664,"lng":-51.072201,"tz":"America/Belem"},{"iata":"MCT","icao":"OOMS","name":"Muscat International Airport","city":"Muscat/Seeb","country":"OM","lat":23.600218,"lng":58.285268,"tz":"Asia/Muscat"},{"iata":"MCW","icao":"KMCW","name":"Mason City Municipal Airport","city":"Mason City","country":"US","lat":43.159801,"lng":-93.329716,"tz":"America/Chicago"},{"iata":"MCX","icao":"URML","name":"Makhachkala Uytash International Airport","city":"Makhachkala","country":"RU","lat":42.816799,"lng":47.652302,"tz":"Europe/Moscow"},{"iata":"MCY","icao":"YBSU","name":"Sunshine Coast Airport","city":"Maroochydore","country":"AU","lat":-26.593324,"lng":153.08319,"tz":"Australia/Brisbane"},{"iata":"MCZ","icao":"SBMO","name":"Zumbi dos Palmares International Airport","city":"Maceió","country":"BR","lat":-9.512559,"lng":-35.791839,"tz":"America/Maceio"},{"iata":"MDC","icao":"WAMM","name":"Sam Ratulangi International Airport","city":"Manado","country":"ID","lat":1.548591,"lng":124.92625,"tz":"Asia/Makassar"},{"iata":"MDE","icao":"SKRG","name":"Jose Maria Córdova International Airport","city":"Medellín","country":"CO","lat":6.16454,"lng":-75.4231,"tz":"America/Bogota"},{"iata":"MDG","icao":"ZYMD","name":"Mudanjiang Hailang International Airport","city":"Mudanjiang","country":"CN","lat":44.525172,"lng":129.568634,"tz":"Asia/Shanghai"},{"iata":"MDI","icao":"DNMK","name":"Makurdi Airport","city":"Makurdi","country":"NG","lat":7.70388,"lng":8.61394,"tz":"Africa/Lagos"},{"iata":"MDK","icao":"FZEA","name":"Mbandaka Airport","city":"Mbandaka","country":"CD","lat":0.0226,"lng":18.2887,"tz":"Africa/Kinshasa"},{"iata":"MDL","icao":"VYMD","name":"Mandalay International Airport","city":"Mandalay","country":"MM","lat":21.7022,"lng":95.977898,"tz":"Asia/Yangon"},{"iata":"MDQ","icao":"SAZM","name":"Ástor Piazzola International Airport","city":"Mar del Plata","country":"AR","lat":-37.9342,"lng":-57.5733,"tz":"America/Argentina/Buenos_Aires"},{"iata":"MDT","icao":"KMDT","name":"Harrisburg International Airport","city":"Harrisburg","country":"US","lat":40.192838,"lng":-76.762333,"tz":"America/New_York"},{"iata":"MDU","icao":"AYMN","name":"Mendi Airport","city":"Mendi","country":"PG","lat":-6.14774,"lng":143.656998,"tz":"Pacific/Port_Moresby"},{"iata":"MDW","icao":"KMDW","name":"Chicago Midway International Airport","city":"Chicago","country":"US","lat":41.785999,"lng":-87.752403,"tz":"America/Chicago"},{"iata":"MDZ","icao":"SAME","name":"Governor Francisco Gabrielli International Airport","city":"Mendoza","country":"AR","lat":-32.831699,"lng":-68.7929,"tz":"America/Argentina/Mendoza"},{"iata":"MEB","icao":"YMEN","name":"Melbourne Essendon Airport","city":"Essendon Fields","country":"AU","lat":-37.7281,"lng":144.901993,"tz":"Australia/Melbourne"},{"iata":"MEC","icao":"SEMT","name":"Eloy Alfaro International Airport","city":"Manta","country":"EC","lat":-0.946078,"lng":-80.678802,"tz":"America/Guayaquil"},{"iata":"MED","icao":"OEMA","name":"Prince Mohammad Bin Abdulaziz Airport","city":"Medina","country":"SA","lat":24.5534,"lng":39.705101,"tz":"Asia/Riyadh"},{"iata":"MEE","icao":"NWWR","name":"Maré Airport","city":"Maré","country":"NC","lat":-21.482438,"lng":168.038465,"tz":"Pacific/Noumea"},{"iata":"MEG","icao":"FNMA","name":"Malanje Airport","city":"Malanje","country":"AO","lat":-9.52509,"lng":16.312401,"tz":"Africa/Luanda"},{"iata":"MEH","icao":"ENMH","name":"Mehamn Airport","city":"Mehamn","country":"NO","lat":71.029701,"lng":27.8267,"tz":"Europe/Oslo"},{"iata":"MEI","icao":"KMEI","name":"Key Field / Meridian Regional Airport","city":"Meridian","country":"US","lat":32.3326,"lng":-88.7519,"tz":"America/Chicago"},{"iata":"MEL","icao":"YMML","name":"Melbourne Airport","city":"Melbourne","country":"AU","lat":-37.670732,"lng":144.837898,"tz":"Australia/Melbourne"},{"iata":"MEM","icao":"KMEM","name":"Memphis International Airport","city":"Memphis","country":"US","lat":35.043845,"lng":-89.97634,"tz":"America/Chicago"},{"iata":"MEQ","icao":"WITC","name":"Cut Nyak Dhien Airport","city":"Kuala Pesisir","country":"ID","lat":4.040998,"lng":96.253312,"tz":"Asia/Jakarta"},{"iata":"MEX","icao":"MMMX","name":"Mexico City Benito Juárez International Airport","city":"Mexico City","country":"MX","lat":19.435822,"lng":-99.07033,"tz":"America/Mexico_City"},{"iata":"MFE","icao":"KMFE","name":"McAllen Miller International Airport","city":"McAllen","country":"US","lat":26.176141,"lng":-98.237965,"tz":"America/Chicago"},{"iata":"MFK","icao":"RCMT","name":"Matsu Beigan Airport","city":"Matsu (Beigan)","country":"TW","lat":26.224199,"lng":120.002998,"tz":"Asia/Shanghai"},{"iata":"MFM","icao":"VMMC","name":"Macau International Airport","city":"Nossa Senhora do Carmo","country":"MO","lat":22.149599,"lng":113.592003,"tz":"Asia/Macau"},{"iata":"MFR","icao":"KMFR","name":"Rogue Valley International-Medford Airport","city":"Medford","country":"US","lat":42.374199,"lng":-122.873001,"tz":"America/Los_Angeles"},{"iata":"MFU","icao":"FLMF","name":"Mfuwe International Airport","city":"Mfuwe","country":"ZM","lat":-13.2589,"lng":31.9366,"tz":"Africa/Lusaka"},{"iata":"MGA","icao":"MNMG","name":"Augusto C. Sandino (Managua) International Airport","city":"Managua","country":"NI","lat":12.1415,"lng":-86.168198,"tz":"America/Managua"},{"iata":"MGB","icao":"YMTG","name":"Mount Gambier Airport","city":"Mount Gambier","country":"AU","lat":-37.744382,"lng":140.780561,"tz":"Australia/Adelaide"},{"iata":"MGC","icao":"KMGC","name":"Michigan City Municipal Airport","city":"Michigan City","country":"US","lat":41.7033,"lng":-86.821198,"tz":"America/Chicago"},{"iata":"MGF","icao":"SBMG","name":"Regional de Maringá - Sílvio Name Júnior Airport","city":"Maringá","country":"BR","lat":-23.47606,"lng":-52.016187,"tz":"America/Sao_Paulo"},{"iata":"MGH","icao":"FAMG","name":"Margate Airport","city":"Margate","country":"ZA","lat":-30.857401,"lng":30.343,"tz":"Africa/Johannesburg"},{"iata":"MGM","icao":"KMGM","name":"Montgomery Regional (Dannelly Field) Airport","city":"Montgomery","country":"US","lat":32.300598,"lng":-86.393997,"tz":"America/Chicago"},{"iata":"MGQ","icao":"HCMM","name":"Aden Adde International Airport","city":"Mogadishu","country":"SO","lat":2.01444,"lng":45.304699,"tz":"Africa/Mogadishu"},{"iata":"MGW","icao":"KMGW","name":"Morgantown Municipal Airport Walter L. (Bill) Hart Field","city":"Morgantown","country":"US","lat":39.643305,"lng":-79.917598,"tz":"America/New_York"},{"iata":"MGZ","icao":"VYME","name":"Myeik Airport","city":"Mkeik","country":"MM","lat":12.4398,"lng":98.621498,"tz":"Asia/Yangon"},{"iata":"MHD","icao":"OIMM","name":"Mashhad International Airport","city":"Mashhad","country":"IR","lat":36.234821,"lng":59.642949,"tz":"Asia/Tehran"},{"iata":"MHG","icao":"EDFM","name":"Mannheim-City Airport","city":"Mannheim","country":"DE","lat":49.473057,"lng":8.514167,"tz":"Europe/Berlin"},{"iata":"MHH","icao":"MYAM","name":"Leonard M. Thompson International Airport","city":"Marsh Harbour","country":"BS","lat":26.510711,"lng":-77.084262,"tz":"America/Nassau"},{"iata":"MHK","icao":"KMHK","name":"Manhattan Regional Airport","city":"Manhattan","country":"US","lat":39.140999,"lng":-96.670799,"tz":"America/Chicago"},{"iata":"MHQ","icao":"EFMA","name":"Mariehamn Airport","city":"Mariehamn","country":"FI","lat":60.1222,"lng":19.898199,"tz":"Europe/Mariehamn"},{"iata":"MHT","icao":"KMHT","name":"Manchester-Boston Regional Airport","city":"Manchester","country":"US","lat":42.932598,"lng":-71.435699,"tz":"America/New_York"},{"iata":"MHU","icao":"YHOT","name":"Mount Hotham Airport","city":"Mount Hotham","country":"AU","lat":-37.047501,"lng":147.334,"tz":"Australia/Melbourne"},{"iata":"MIA","icao":"KMIA","name":"Miami International Airport","city":"Miami","country":"US","lat":25.796011,"lng":-80.289751,"tz":"America/New_York"},{"iata":"MID","icao":"MMMD","name":"Manuel Crescencio Rejón International Airport","city":"Mérida","country":"MX","lat":20.930485,"lng":-89.645462,"tz":"America/Merida"},{"iata":"MIG","icao":"ZUMY","name":"Mianyang Nanjiao Airport","city":"Mianyang (Fucheng)","country":"CN","lat":31.428101,"lng":104.740997,"tz":"Asia/Shanghai"},{"iata":"MII","icao":"SBML","name":"Frank Miloye Milenkowichi–Marília State Airport","city":"Marília","country":"BR","lat":-22.196899,"lng":-49.926485,"tz":"America/Sao_Paulo"},{"iata":"MIM","icao":"YMER","name":"Merimbula Airport","city":"Merimbula","country":"AU","lat":-36.9086,"lng":149.901001,"tz":"Australia/Sydney"},{"iata":"MIR","icao":"DTMB","name":"Monastir Habib Bourguiba International Airport","city":"Monastir","country":"TN","lat":35.758099,"lng":10.7547,"tz":"Africa/Tunis"},{"iata":"MIU","icao":"DNMA","name":"Maiduguri International Airport","city":"Maiduguri","country":"NG","lat":11.854163,"lng":13.080702,"tz":"Africa/Lagos"},{"iata":"MJF","icao":"ENMS","name":"Mosjøen Airport, Kjærstad","city":"Mosjøen","country":"NO","lat":65.783997,"lng":13.2149,"tz":"Europe/Oslo"},{"iata":"MJI","icao":"HLLM","name":"Mitiga International Airport","city":"Tripoli","country":"LY","lat":32.89177,"lng":13.287878,"tz":"Africa/Tripoli"},{"iata":"MJK","icao":"YSHK","name":"Shark Bay Airport","city":"Denham","country":"AU","lat":-25.897294,"lng":113.575802,"tz":"Australia/Perth"},{"iata":"MJM","icao":"FZWA","name":"Mbuji Mayi Airport","city":"Mbuji Mayi","country":"CD","lat":-6.12124,"lng":23.569,"tz":"Africa/Lubumbashi"},{"iata":"MJN","icao":"FMNM","name":"Amborovy Airport","city":"Mahajanga","country":"MG","lat":-15.666842,"lng":46.351233,"tz":"Indian/Antananarivo"},{"iata":"MJT","icao":"LGMT","name":"Mytilene International Airport","city":"Mytilene","country":"GR","lat":39.057406,"lng":26.598629,"tz":"Europe/Athens"},{"iata":"MJZ","icao":"UERR","name":"Mirny Airport","city":"Mirny","country":"RU","lat":62.534698,"lng":114.039001,"tz":"Asia/Yakutsk"},{"iata":"MKE","icao":"KMKE","name":"General Mitchell International Airport","city":"Milwaukee","country":"US","lat":42.947201,"lng":-87.896599,"tz":"America/Chicago"},{"iata":"MKG","icao":"KMKG","name":"Muskegon County Airport","city":"Muskegon","country":"US","lat":43.169498,"lng":-86.238197,"tz":"America/Detroit"},{"iata":"MKK","icao":"PHMK","name":"Molokai Airport","city":"Kaunakakai","country":"US","lat":21.152901,"lng":-157.095993,"tz":"Pacific/Honolulu"},{"iata":"MKL","icao":"KMKL","name":"McKellar-Sipes Regional Airport","city":"Jackson","country":"US","lat":35.599899,"lng":-88.915604,"tz":"America/Chicago"},{"iata":"MKM","icao":"WBGK","name":"Mukah Airport","city":"Mukah","country":"MY","lat":2.881944,"lng":112.043333,"tz":"Asia/Kuching"},{"iata":"MKP","icao":"NTGM","name":"Makemo Airport","city":"Makemo","country":"PF","lat":-16.5839,"lng":-143.658005,"tz":"Pacific/Tahiti"},{"iata":"MKQ","icao":"WAKK","name":"Mopah International Airport","city":"Merauke","country":"ID","lat":-8.523898,"lng":140.419693,"tz":"Asia/Jayapura"},{"iata":"MKR","icao":"YMEK","name":"Meekatharra Airport","city":"","country":"AU","lat":-26.6117,"lng":118.547997,"tz":"Australia/Perth"},{"iata":"MKU","icao":"FOOK","name":"Makokou Airport","city":"Makokou","country":"GA","lat":0.579211,"lng":12.8909,"tz":"Africa/Libreville"},{"iata":"MKW","icao":"WAUU","name":"Rendani Airport","city":"Manokwari","country":"ID","lat":-0.891833,"lng":134.048996,"tz":"Asia/Jayapura"},{"iata":"MKY","icao":"YBMK","name":"Mackay Airport","city":"Mackay","country":"AU","lat":-21.170816,"lng":149.182588,"tz":"Australia/Brisbane"},{"iata":"MKZ","icao":"WMKM","name":"Malacca International Airport","city":"Malacca","country":"MY","lat":2.265613,"lng":102.252778,"tz":"Asia/Kuala_Lumpur"},{"iata":"MLA","icao":"LMML","name":"Malta International Airport","city":"Valletta","country":"MT","lat":35.845932,"lng":14.491546,"tz":"Europe/Malta"},{"iata":"MLB","icao":"KMLB","name":"Melbourne Orlando International Airport","city":"Melbourne","country":"US","lat":28.102009,"lng":-80.641088,"tz":"America/New_York"},{"iata":"MLE","icao":"VRMM","name":"Velana International Airport","city":"Malé","country":"MV","lat":4.19183,"lng":73.529099,"tz":"Indian/Maldives"},{"iata":"MLG","icao":"WARA","name":"Abdul Rachman Saleh Airport","city":"Malang","country":"ID","lat":-7.929099,"lng":112.714233,"tz":"Asia/Jakarta"},{"iata":"MLI","icao":"KMLI","name":"Quad City International Airport","city":"Moline","country":"US","lat":41.448502,"lng":-90.5075,"tz":"America/Chicago"},{"iata":"MLM","icao":"MMMM","name":"General Francisco J. Mujica International Airport","city":"Morelia","country":"MX","lat":19.849899,"lng":-101.025002,"tz":"America/Mexico_City"},{"iata":"MLN","icao":"GEML","name":"Melilla Airport","city":"Melilla","country":"ES","lat":35.2798,"lng":-2.95626,"tz":"Africa/Ceuta"},{"iata":"MLU","icao":"KMLU","name":"Monroe Regional Airport","city":"Monroe","country":"US","lat":32.510899,"lng":-92.037697,"tz":"America/Chicago"},{"iata":"MLW","icao":"GLMR","name":"Spriggs Payne Airport","city":"Monrovia","country":"LR","lat":6.28906,"lng":-10.7587,"tz":"Africa/Monrovia"},{"iata":"MLX","icao":"LTAT","name":"Malatya Erhaç Airport","city":"Malatya","country":"TR","lat":38.435299,"lng":38.091,"tz":"Europe/Istanbul"},{"iata":"MMB","icao":"RJCM","name":"Memanbetsu Airport","city":"Ōzora","country":"JP","lat":43.8806,"lng":144.164001,"tz":"Asia/Tokyo"},{"iata":"MMD","icao":"ROMD","name":"Minamidaito Airport","city":"Minamidaito","country":"JP","lat":25.8465,"lng":131.263,"tz":"Asia/Tokyo"},{"iata":"MME","icao":"EGNV","name":"Teesside International Airport","city":"Darlington, Durham","country":"GB","lat":54.509201,"lng":-1.42941,"tz":"Europe/London"},{"iata":"MMG","icao":"YMOG","name":"Mount Magnet Airport","city":"","country":"AU","lat":-28.1161,"lng":117.842003,"tz":"Australia/Perth"},{"iata":"MMJ","icao":"RJAF","name":"Shinshu-Matsumoto Airport","city":"Matsumoto","country":"JP","lat":36.166801,"lng":137.923004,"tz":"Asia/Tokyo"},{"iata":"MMK","icao":"ULMM","name":"Emperor Nicholas II Murmansk Airport","city":"Murmansk","country":"RU","lat":68.7817,"lng":32.750801,"tz":"Europe/Moscow"},{"iata":"MMO","icao":"GVMA","name":"Maio Airport","city":"Vila do Maio","country":"CV","lat":15.1559,"lng":-23.213699,"tz":"Atlantic/Cape_Verde"},{"iata":"MMX","icao":"ESMS","name":"Malmö Sturup Airport","city":"Malmö","country":"SE","lat":55.535564,"lng":13.376327,"tz":"Europe/Stockholm"},{"iata":"MMY","icao":"ROMY","name":"Miyako Airport","city":"Miyakojima","country":"JP","lat":24.782801,"lng":125.294998,"tz":"Asia/Tokyo"},{"iata":"MMZ","icao":"OAMN","name":"Maymana Zahiraddin Faryabi Airport","city":"Maymana","country":"AF","lat":35.930801,"lng":64.760902,"tz":"Asia/Kabul"},{"iata":"MNC","icao":"FQNC","name":"Nacala International Airport","city":"Nacala","country":"MZ","lat":-14.4882,"lng":40.7122,"tz":"Africa/Maputo"},{"iata":"MNG","icao":"YMGD","name":"Maningrida Airport","city":"Maningrida","country":"AU","lat":-12.0561,"lng":134.233994,"tz":"Australia/Darwin"},{"iata":"MNI","icao":"TRPG","name":"John A. Osborne Airport","city":"Gerald's Park","country":"MS","lat":16.791835,"lng":-62.193204,"tz":"America/Montserrat"},{"iata":"MNJ","icao":"FMSM","name":"Mananjary Airport","city":"Mananjary","country":"MG","lat":-21.201799,"lng":48.358299,"tz":"Indian/Antananarivo"},{"iata":"MNL","icao":"RPLL","name":"Ninoy Aquino International Airport","city":"Manila (Pasay)","country":"PH","lat":14.5086,"lng":121.019997,"tz":"Asia/Manila"},{"iata":"MNX","icao":"SBMY","name":"Manicoré Airport","city":"Manicoré","country":"BR","lat":-5.81138,"lng":-61.278301,"tz":"America/Manaus"},{"iata":"MOB","icao":"KMOB","name":"Mobile Regional Airport","city":"Mobile","country":"US","lat":30.6912,"lng":-88.242798,"tz":"America/Chicago"},{"iata":"MOC","icao":"SBMK","name":"Mário Ribeiro Airport","city":"Montes Claros","country":"BR","lat":-16.706919,"lng":-43.818901,"tz":"America/Sao_Paulo"},{"iata":"MOG","icao":"VYMS","name":"Mong Hsat Airport","city":"Mong Hsat","country":"MM","lat":20.5168,"lng":99.256798,"tz":"Asia/Yangon"},{"iata":"MOL","icao":"ENML","name":"Molde Airport, Årø","city":"Årø","country":"NO","lat":62.744701,"lng":7.2625,"tz":"Europe/Oslo"},{"iata":"MOQ","icao":"FMMV","name":"Morondava Airport","city":"Morondava","country":"MG","lat":-20.2847,"lng":44.3176,"tz":"Indian/Antananarivo"},{"iata":"MOT","icao":"KMOT","name":"Minot International Airport","city":"Minot","country":"US","lat":48.25801,"lng":-101.279123,"tz":"America/Chicago"},{"iata":"MOV","icao":"YMRB","name":"Moranbah Airport","city":"Moranbah","country":"AU","lat":-22.0578,"lng":148.076996,"tz":"Australia/Brisbane"},{"iata":"MOZ","icao":"NTTM","name":"Moorea Temae Airport","city":"Moorea-Maiao","country":"PF","lat":-17.48979,"lng":-149.761777,"tz":"Pacific/Tahiti"},{"iata":"MPA","icao":"FYKM","name":"Katima Mulilo Airport","city":"Mpacha","country":"NA","lat":-17.634258,"lng":24.176688,"tz":"Africa/Gaborone"},{"iata":"MPH","icao":"RPVE","name":"Godofredo P. Ramos Airport","city":"Caticlan","country":"PH","lat":11.9245,"lng":121.954002,"tz":"Asia/Manila"},{"iata":"MPL","icao":"LFMT","name":"Montpellier-Méditerranée Airport","city":"Montpellier/Méditerranée","country":"FR","lat":43.576199,"lng":3.96301,"tz":"Europe/Paris"},{"iata":"MPM","icao":"FQMA","name":"Maputo Airport","city":"Maputo","country":"MZ","lat":-25.920799,"lng":32.572601,"tz":"Africa/Maputo"},{"iata":"MPN","icao":"EGYP","name":"Mount Pleasant Airport / RAF Mount Pleasant","city":"Mount Pleasant","country":"FK","lat":-51.822642,"lng":-58.445777,"tz":"Atlantic/Stanley"},{"iata":"MPW","icao":"UKCM","name":"Mariupol International Airport","city":"Mariupol","country":"UA","lat":47.076099,"lng":37.4496,"tz":"Europe/Kiev"},{"iata":"MPY","icao":"SOOA","name":"Maripasoula Airport","city":"Maripasoula","country":"GF","lat":3.655907,"lng":-54.039431,"tz":"America/Cayenne"},{"iata":"MQF","icao":"USCM","name":"Magnitogorsk International Airport","city":"Magnitogorsk","country":"RU","lat":53.391991,"lng":58.755235,"tz":"Asia/Yekaterinburg"},{"iata":"MQJ","icao":"UEMA","name":"Moma Airport","city":"Khonuu","country":"RU","lat":66.450861,"lng":143.261551,"tz":"Asia/Srednekolymsk"},{"iata":"MQL","icao":"YMIA","name":"Mildura Airport","city":"Mildura","country":"AU","lat":-34.229198,"lng":142.085999,"tz":"Australia/Melbourne"},{"iata":"MQM","icao":"LTCR","name":"Mardin Airport","city":"Mardin","country":"TR","lat":37.223301,"lng":40.631699,"tz":"Europe/Istanbul"},{"iata":"MQN","icao":"ENRA","name":"Mo i Rana Airport, Røssvoll","city":"Mo i Rana","country":"NO","lat":66.363899,"lng":14.3014,"tz":"Europe/Oslo"},{"iata":"MQP","icao":"FAKN","name":"Kruger Mpumalanga International Airport","city":"Mbombela","country":"ZA","lat":-25.383327,"lng":31.105325,"tz":"Africa/Johannesburg"},{"iata":"MQS","icao":"TVSM","name":"Mustique Airport","city":"Lovell","country":"VC","lat":12.8879,"lng":-61.180199,"tz":"America/Grenada"},{"iata":"MQT","icao":"KSAW","name":"Marquette/Sawyer International Airport","city":"Gwinn","country":"US","lat":46.351498,"lng":-87.395884,"tz":"America/Detroit"},{"iata":"MQX","icao":"HAMK","name":"Mekele Alula Aba Nega Airport","city":"Mekele","country":"ET","lat":13.4674,"lng":39.533501,"tz":"Africa/Addis_Ababa"},{"iata":"MRE","icao":"HKMS","name":"Mara Serena Lodge Airstrip","city":"Serena","country":"KE","lat":-1.404588,"lng":35.008349,"tz":"Africa/Nairobi"},{"iata":"MRI","icao":"PAMR","name":"Merrill Field","city":"Anchorage","country":"US","lat":61.212792,"lng":-149.843988,"tz":"America/Anchorage"},{"iata":"MRS","icao":"LFML","name":"Marseille Provence Airport","city":"Marignane, Bouches-du-Rhône","country":"FR","lat":43.438088,"lng":5.2125,"tz":"Europe/Paris"},{"iata":"MRU","icao":"FIMP","name":"Sir Seewoosagur Ramgoolam International Airport","city":"Plaine Magnien","country":"MU","lat":-20.430201,"lng":57.683601,"tz":"Indian/Mauritius"},{"iata":"MRV","icao":"URMM","name":"Mineralnye Vody Airport","city":"Mineralnyye Vody","country":"RU","lat":44.225101,"lng":43.081902,"tz":"Europe/Moscow"},{"iata":"MRX","icao":"OIAM","name":"Mahshahr Airport","city":"Mahshahr","country":"IR","lat":30.5562,"lng":49.151901,"tz":"Asia/Tehran"},{"iata":"MRY","icao":"KMRY","name":"Monterey Regional Airport","city":"Monterey","country":"US","lat":36.586777,"lng":-121.844183,"tz":"America/Los_Angeles"},{"iata":"MRZ","icao":"YMOR","name":"Moree Airport","city":"Moree","country":"AU","lat":-29.498899,"lng":149.845001,"tz":"Australia/Sydney"},{"iata":"MSJ","icao":"RJSM","name":"Misawa Airport / Misawa Air Base","city":"Misawa","country":"JP","lat":40.703201,"lng":141.367996,"tz":"Asia/Tokyo"},{"iata":"MSL","icao":"KMSL","name":"Northwest Alabama Regional Airport","city":"Muscle Shoals","country":"US","lat":34.745123,"lng":-87.612981,"tz":"America/Chicago"},{"iata":"MSN","icao":"KMSN","name":"Dane County Regional Truax Field","city":"Madison","country":"US","lat":43.1399,"lng":-89.337502,"tz":"America/Chicago"},{"iata":"MSO","icao":"KMSO","name":"Missoula Montana Airport","city":"Missoula","country":"US","lat":46.915816,"lng":-114.091107,"tz":"America/Denver"},{"iata":"MSP","icao":"KMSP","name":"Minneapolis–Saint Paul International Airport / Wold–Chamberlain Field","city":"Minneapolis","country":"US","lat":44.880081,"lng":-93.221741,"tz":"America/Chicago"},{"iata":"MSQ","icao":"UMMS","name":"Minsk National Airport","city":"Minsk","country":"BY","lat":53.888071,"lng":28.039964,"tz":"Europe/Minsk"},{"iata":"MSR","icao":"LTCK","name":"Muş Airport","city":"Muş","country":"TR","lat":38.747799,"lng":41.661201,"tz":"Europe/Istanbul"},{"iata":"MSS","icao":"KMSS","name":"Massena International Airport Richards Field","city":"Massena","country":"US","lat":44.936157,"lng":-74.844304,"tz":"America/New_York"},{"iata":"MST","icao":"EHBK","name":"Maastricht Aachen Airport","city":"Maastricht","country":"NL","lat":50.911087,"lng":5.769401,"tz":"Europe/Amsterdam"},{"iata":"MSU","icao":"FXMM","name":"Moshoeshoe I International Airport","city":"Maseru(Mazenod)","country":"LS","lat":-29.456277,"lng":27.554456,"tz":"Africa/Maseru"},{"iata":"MSY","icao":"KMSY","name":"Louis Armstrong New Orleans International Airport","city":"New Orleans","country":"US","lat":29.993401,"lng":-90.264673,"tz":"America/Chicago"},{"iata":"MSZ","icao":"FNMO","name":"Welwitschia Mirabilis International Airport","city":"Moçâmedes","country":"AO","lat":-15.2612,"lng":12.1468,"tz":"Africa/Luanda"},{"iata":"MTJ","icao":"KMTJ","name":"Montrose Regional Airport","city":"Montrose","country":"US","lat":38.5098,"lng":-107.893997,"tz":"America/Denver"},{"iata":"MTR","icao":"SKMR","name":"Los Garzones Airport","city":"Montería","country":"CO","lat":8.82374,"lng":-75.8258,"tz":"America/Bogota"},{"iata":"MTT","icao":"MMMT","name":"Minatitlán/Coatzacoalcos International Airport","city":"Cosoleacaque","country":"MX","lat":18.103399,"lng":-94.580704,"tz":"America/Mexico_City"},{"iata":"MTY","icao":"MMMY","name":"Monterrey International Airport","city":"Monterrey","country":"MX","lat":25.778521,"lng":-100.106989,"tz":"America/Monterrey"},{"iata":"MUA","icao":"AGGM","name":"Munda Airport","city":"Munda","country":"SB","lat":-8.32797,"lng":157.263,"tz":"Pacific/Guadalcanal"},{"iata":"MUB","icao":"FBMN","name":"Maun International Airport","city":"Maun","country":"BW","lat":-19.970491,"lng":23.431409,"tz":"Africa/Gaborone"},{"iata":"MUC","icao":"EDDM","name":"Munich Airport","city":"Munich","country":"DE","lat":48.353802,"lng":11.7861,"tz":"Europe/Berlin"},{"iata":"MUE","icao":"PHMU","name":"Waimea Kohala Airport","city":"Waimea (Kamuela)","country":"US","lat":20.001301,"lng":-155.667999,"tz":"Pacific/Honolulu"},{"iata":"MUH","icao":"HEMM","name":"Mersa Matruh International Airport","city":"Marsa Matruh","country":"EG","lat":31.324313,"lng":27.22227,"tz":"Africa/Cairo"},{"iata":"MUN","icao":"SVMT","name":"José Tadeo Monagas International Airport","city":"Maturín","country":"VE","lat":9.749023,"lng":-63.153348,"tz":"America/Caracas"},{"iata":"MUR","icao":"WBGM","name":"Marudi Airport","city":"Marudi","country":"MY","lat":4.178734,"lng":114.330318,"tz":"Asia/Kuching"},{"iata":"MUX","icao":"OPMT","name":"Multan International Airport","city":"Multan","country":"PK","lat":30.203199,"lng":71.419098,"tz":"Asia/Karachi"},{"iata":"MVB","icao":"FOON","name":"M'Vengue El Hadj Omar Bongo Ondimba International Airport","city":"Franceville","country":"GA","lat":-1.65616,"lng":13.438,"tz":"Africa/Libreville"},{"iata":"MVD","icao":"SUMU","name":"Carrasco General Cesáreo L. Berisso International Airport","city":"Ciudad de la Costa","country":"UY","lat":-34.835647,"lng":-56.026497,"tz":"America/Montevideo"},{"iata":"MVF","icao":"SBMS","name":"Dix-Sept Rosado Airport","city":"Mossoró","country":"BR","lat":-5.20192,"lng":-37.3643,"tz":"America/Fortaleza"},{"iata":"MVP","icao":"SKMU","name":"Fabio Alberto Leon Bentley Airport","city":"Mitú","country":"CO","lat":1.25366,"lng":-70.2339,"tz":"America/Bogota"},{"iata":"MVQ","icao":"UMOO","name":"Mogilev Airport","city":"Mogilev","country":"BY","lat":53.954899,"lng":30.0951,"tz":"Europe/Minsk"},{"iata":"MVR","icao":"FKKL","name":"Salak Airport","city":"Maroua","country":"CM","lat":10.4514,"lng":14.2574,"tz":"Africa/Douala"},{"iata":"MVT","icao":"NTGV","name":"Mataiva Airport","city":"","country":"PF","lat":-14.8681,"lng":-148.716995,"tz":"Pacific/Tahiti"},{"iata":"MWA","icao":"KMWA","name":"Veterans Airport of Southern Illinois","city":"Marion","country":"US","lat":37.751208,"lng":-89.016568,"tz":"America/Chicago"},{"iata":"MWL","icao":"KMWL","name":"Mineral Wells Regional Airport","city":"Mineral Wells","country":"US","lat":32.781601,"lng":-98.060204,"tz":"America/Chicago"},{"iata":"MWX","icao":"RKJB","name":"Muan International Airport","city":"Muan (Piseo-ri)","country":"KR","lat":34.991406,"lng":126.382814,"tz":"Asia/Seoul"},{"iata":"MWZ","icao":"HTMW","name":"Mwanza International Airport","city":"Mwanza","country":"TZ","lat":-2.446563,"lng":32.936049,"tz":"Africa/Dar_es_Salaam"},{"iata":"MXL","icao":"MMML","name":"General Rodolfo Sánchez Taboada International Airport","city":"Mexicali","country":"MX","lat":32.630629,"lng":-115.242805,"tz":"America/Tijuana"},{"iata":"MXP","icao":"LIMC","name":"Milan Malpensa International Airport","city":"Ferno (VA)","country":"IT","lat":45.6306,"lng":8.72811,"tz":"Europe/Rome"},{"iata":"MXV","icao":"ZMMN","name":"Mörön Airport","city":"Mörön","country":"MN","lat":49.663677,"lng":100.100028,"tz":"Asia/Ulaanbaatar"},{"iata":"MXX","icao":"ESKM","name":"Mora Airport","city":"Mora","country":"SE","lat":60.957901,"lng":14.5114,"tz":"Europe/Stockholm"},{"iata":"MYA","icao":"YMRY","name":"Moruya Airport","city":"Moruya","country":"AU","lat":-35.8978,"lng":150.143997,"tz":"Australia/Sydney"},{"iata":"MYD","icao":"HKML","name":"Malindi International Airport","city":"Malindi","country":"KE","lat":-3.22931,"lng":40.1017,"tz":"Africa/Nairobi"},{"iata":"MYE","icao":"RJTQ","name":"Miyakejima Airport","city":"Miyakejima","country":"JP","lat":34.073601,"lng":139.559998,"tz":"Asia/Tokyo"},{"iata":"MYG","icao":"MYMM","name":"Mayaguana Airport","city":"Abraham Bay Settlement","country":"BS","lat":22.379499,"lng":-73.013494,"tz":"America/Grand_Turk"},{"iata":"MYJ","icao":"RJOM","name":"Matsuyama Airport","city":"Matsuyama","country":"JP","lat":33.826893,"lng":132.700114,"tz":"Asia/Tokyo"},{"iata":"MYL","icao":"KMYL","name":"McCall Municipal Airport","city":"McCall","country":"US","lat":44.888837,"lng":-116.101112,"tz":"America/Boise"},{"iata":"MYP","icao":"UTAM","name":"Mary International Airport","city":"Mary","country":"TM","lat":37.62353,"lng":61.895668,"tz":"Asia/Ashgabat"},{"iata":"MYQ","icao":"VOMY","name":"Mysore Airport","city":"Mysore","country":"IN","lat":12.229751,"lng":76.653683,"tz":"Asia/Kolkata"},{"iata":"MYR","icao":"KMYR","name":"Myrtle Beach International Airport","city":"Myrtle Beach","country":"US","lat":33.679699,"lng":-78.928299,"tz":"America/New_York"},{"iata":"MYT","icao":"VYMK","name":"Myitkyina Airport","city":"Myitkyina","country":"MM","lat":25.3836,"lng":97.351898,"tz":"Asia/Yangon"},{"iata":"MYU","icao":"PAMY","name":"Mekoryuk Airport","city":"Mekoryuk","country":"US","lat":60.372338,"lng":-166.269751,"tz":"America/Nome"},{"iata":"MYW","icao":"HTMT","name":"Mtwara Airport","city":"Mtwara","country":"TZ","lat":-10.336204,"lng":40.181997,"tz":"Africa/Dar_es_Salaam"},{"iata":"MYY","icao":"WBGR","name":"Miri Airport","city":"Miri","country":"MY","lat":4.32201,"lng":113.987,"tz":"Asia/Kuching"},{"iata":"MZG","icao":"RCQC","name":"Penghu Magong Airport","city":"Huxi","country":"TW","lat":23.568701,"lng":119.627998,"tz":"Asia/Taipei"},{"iata":"MZI","icao":"GAMB","name":"Mopti Airport","city":"Sévaré","country":"ML","lat":14.5128,"lng":-4.07956,"tz":"Africa/Bamako"},{"iata":"MZL","icao":"SKMZ","name":"La Nubia Airport","city":"Manizales","country":"CO","lat":5.0296,"lng":-75.4647,"tz":"America/Bogota"},{"iata":"MZO","icao":"MUMZ","name":"Sierra Maestra International Airport","city":"Manzanillo","country":"CU","lat":20.288605,"lng":-77.087545,"tz":"America/Havana"},{"iata":"MZQ","icao":"FAMU","name":"Mkuze Airport","city":"Mkuze","country":"ZA","lat":-27.626101,"lng":32.0443,"tz":"Africa/Johannesburg"},{"iata":"MZR","icao":"OAMS","name":"Mazar-i-Sharif International Airport","city":"Mazar-i-Sharif","country":"AF","lat":36.70412,"lng":67.210459,"tz":"Asia/Kabul"},{"iata":"MZS","icao":null,"name":"Moradabad Airport","city":"Moradabad","country":"IN","lat":28.81746,"lng":78.92187,"tz":"Asia/Kolkata"},{"iata":"MZT","icao":"MMMZ","name":"General Rafael Buelna International Airport","city":"Mazatlàn","country":"MX","lat":23.162823,"lng":-106.264517,"tz":"America/Mazatlan"},{"iata":"MZV","icao":"WBMU","name":"Mulu Airport","city":"Mulu","country":"MY","lat":4.04833,"lng":114.805,"tz":"Asia/Kuching"},{"iata":"NAA","icao":"YNBR","name":"Narrabri Airport","city":"Narrabri","country":"AU","lat":-30.319201,"lng":149.826996,"tz":"Australia/Sydney"},{"iata":"NAG","icao":"VANP","name":"Dr. Babasaheb Ambedkar International Airport","city":"Nagpur","country":"IN","lat":21.092199,"lng":79.047203,"tz":"Asia/Kolkata"},{"iata":"NAH","icao":"WAMH","name":"Naha Airport","city":"Tabukan Utara, Sangihe Islands","country":"ID","lat":3.68478,"lng":125.527162,"tz":"Asia/Makassar"},{"iata":"NAJ","icao":"UBBN","name":"Nakhchivan International Airport","city":"Nakhchivan","country":"AZ","lat":39.188801,"lng":45.458401,"tz":"Asia/Baku"},{"iata":"NAL","icao":"URMN","name":"Nalchik Airport","city":"Nalchik","country":"RU","lat":43.512901,"lng":43.6366,"tz":"Europe/Moscow"},{"iata":"NAM","icao":"WAPN","name":"Namniwel Airport","city":"Namniwel","country":"ID","lat":-3.143159,"lng":126.976469,"tz":"Asia/Jayapura"},{"iata":"NAN","icao":"NFFN","name":"Nadi International Airport","city":"Nadi","country":"FJ","lat":-17.761822,"lng":177.437843,"tz":"Pacific/Fiji"},{"iata":"NAP","icao":"LIRN","name":"Naples International Airport","city":"Napoli","country":"IT","lat":40.886002,"lng":14.2908,"tz":"Europe/Rome"},{"iata":"NAQ","icao":"BGQQ","name":"Qaanaaq Airport","city":"Qaanaaq","country":"GL","lat":77.488602,"lng":-69.388702,"tz":"America/Thule"},{"iata":"NAS","icao":"MYNN","name":"Lynden Pindling International Airport","city":"Nassau","country":"BS","lat":25.039,"lng":-77.466202,"tz":"America/Nassau"},{"iata":"NAT","icao":null,"name":"Rio Grande do Norte/São Gonçalo do Amarante–Governador Aluízio Alves International Airport","city":"Natal","country":"BR","lat":-5.769822,"lng":-35.36661,"tz":"America/Fortaleza"},{"iata":"NAV","icao":"LTAZ","name":"Nevşehir Kapadokya Airport","city":"Nevşehir","country":"TR","lat":38.7719,"lng":34.5345,"tz":"Europe/Istanbul"},{"iata":"NAW","icao":"VTSC","name":"Narathiwat Airport","city":"","country":"TH","lat":6.51992,"lng":101.742996,"tz":"Asia/Bangkok"},{"iata":"NBC","icao":"UWKE","name":"Begishevo Airport","city":"Nizhnekamsk","country":"RU","lat":55.564701,"lng":52.092499,"tz":"Europe/Moscow"},{"iata":"NBE","icao":"DTNH","name":"Enfidha - Hammamet International Airport","city":"Enfidha","country":"TN","lat":36.075833,"lng":10.438611,"tz":"Africa/Tunis"},{"iata":"NBJ","icao":"FNBJ","name":"Dr. Antonio Agostinho Neto International Airport","city":"Luanda (Ícolo e Bengo)","country":"AO","lat":-9.050734,"lng":13.499078,"tz":"Africa/Luanda"},{"iata":"NBO","icao":"HKJK","name":"Jomo Kenyatta International Airport","city":"Nairobi","country":"KE","lat":-1.318886,"lng":36.928233,"tz":"Africa/Nairobi"},{"iata":"NBS","icao":"ZYBS","name":"Changbaishan Airport","city":"Baishan","country":"CN","lat":42.066944,"lng":127.602222,"tz":"Asia/Shanghai"},{"iata":"NCA","icao":"MBNC","name":"North Caicos Airport","city":"North Caicos","country":"TC","lat":21.916094,"lng":-71.942954,"tz":"America/Grand_Turk"},{"iata":"NCE","icao":"LFMN","name":"Nice-Côte d'Azur Airport","city":"Nice, Alpes-Maritimes","country":"FR","lat":43.658401,"lng":7.21587,"tz":"Europe/Paris"},{"iata":"NCL","icao":"EGNT","name":"Newcastle International Airport","city":"Newcastle upon Tyne, Tyne and Wear","country":"GB","lat":55.037958,"lng":-1.689577,"tz":"Europe/London"},{"iata":"NCU","icao":"UZNN","name":"Nukus International Airport","city":"Nukus","country":"UZ","lat":42.4884,"lng":59.623299,"tz":"Asia/Samarkand"},{"iata":"NCY","icao":"LFLP","name":"Annecy Meythet airport","city":"Annecy","country":"FR","lat":45.928947,"lng":6.0987,"tz":"Europe/Paris"},{"iata":"NDB","icao":"GQPP","name":"Nouadhibou International Airport","city":"Nouadhibou","country":"MR","lat":20.932404,"lng":-17.030199,"tz":"Africa/Nouakchott"},{"iata":"NDC","icao":null,"name":"Nanded Airport","city":"Nanded","country":"IN","lat":19.1833,"lng":77.316704,"tz":"Asia/Kolkata"},{"iata":"NDG","icao":"ZYQQ","name":"Qiqihar Sanjiazi Airport","city":"Qiqihar","country":"CN","lat":47.229969,"lng":123.914179,"tz":"Asia/Shanghai"},{"iata":"NDJ","icao":"FTTJ","name":"N'Djamena International Airport","city":"N'Djamena","country":"TD","lat":12.1337,"lng":15.034,"tz":"Africa/Ndjamena"},{"iata":"NDR","icao":"GMMW","name":"Nador Al Aaroui International Airport","city":"Al Aaroui","country":"MA","lat":34.9888,"lng":-3.02821,"tz":"Africa/Casablanca"},{"iata":"NDU","icao":"FYRU","name":"Rundu Airport","city":"Rundu","country":"NA","lat":-17.956499,"lng":19.7194,"tz":"Africa/Luanda"},{"iata":"NEC","icao":"SAZO","name":"Necochea Airport","city":"Necochea","country":"AR","lat":-38.490746,"lng":-58.816337,"tz":"America/Argentina/Buenos_Aires"},{"iata":"NER","icao":"UELL","name":"Chulman Airport","city":"Neryungri","country":"RU","lat":56.913898,"lng":124.914001,"tz":"Asia/Yakutsk"},{"iata":"NEV","icao":"TKPN","name":"Vance W. Amory International Airport","city":"Charlestown","country":"KN","lat":17.2057,"lng":-62.589901,"tz":"America/St_Kitts"},{"iata":"NFG","icao":"USRN","name":"Nefteyugansk Airport","city":"Nefteyugansk","country":"RU","lat":61.108299,"lng":72.650002,"tz":"Asia/Yekaterinburg"},{"iata":"NGB","icao":"ZSNB","name":"Ningbo Lishe International Airport","city":"Ningbo","country":"CN","lat":29.8267,"lng":121.461998,"tz":"Asia/Shanghai"},{"iata":"NGE","icao":"FKKN","name":"N'Gaoundéré Airport","city":"N'Gaoundéré","country":"CM","lat":7.35701,"lng":13.5592,"tz":"Africa/Douala"},{"iata":"NGO","icao":"RJGG","name":"Chubu Centrair International Airport","city":"Tokoname","country":"JP","lat":34.858398,"lng":136.804993,"tz":"Asia/Tokyo"},{"iata":"NGQ","icao":"ZUAL","name":"Ngari Gunsa Airport","city":"Shiquanhe","country":"CN","lat":32.09794,"lng":80.053971,"tz":"Asia/Shanghai"},{"iata":"NGS","icao":"RJFU","name":"Nagasaki Airport","city":"Nagasaki","country":"JP","lat":32.916901,"lng":129.914001,"tz":"Asia/Tokyo"},{"iata":"NHV","icao":"NTMD","name":"Nuku Hiva Airport","city":"Nuku Hiva","country":"PF","lat":-8.7956,"lng":-140.229004,"tz":"Pacific/Marquesas"},{"iata":"NIM","icao":"DRRN","name":"Diori Hamani International Airport","city":"Niamey","country":"NE","lat":13.4815,"lng":2.18361,"tz":"Africa/Niamey"},{"iata":"NJC","icao":"USNN","name":"Nizhnevartovsk Airport","city":"Nizhnevartovsk","country":"RU","lat":60.949299,"lng":76.483597,"tz":"Asia/Yekaterinburg"},{"iata":"NJF","icao":"ORNI","name":"Al Najaf International Airport","city":"Najaf","country":"IQ","lat":31.991116,"lng":44.405019,"tz":"Asia/Baghdad"},{"iata":"NKC","icao":"GQNO","name":"Nouakchott–Oumtounsy International Airport","city":"Nouakchott","country":"MR","lat":18.31,"lng":-15.969722,"tz":"Africa/Nouakchott"},{"iata":"NKG","icao":"ZSNJ","name":"Nanjing Lukou International Airport","city":"Nanjing","country":"CN","lat":31.735032,"lng":118.865949,"tz":"Asia/Shanghai"},{"iata":"NKM","icao":"RJNA","name":"Nagoya Airport / JASDF Komaki Air Base","city":"Nagoya","country":"JP","lat":35.255759,"lng":136.924095,"tz":"Asia/Tokyo"},{"iata":"NKT","icao":"LTCV","name":"Şırnak Şerafettin Elçi Airport","city":"Şırnak","country":"TR","lat":37.3647,"lng":42.0582,"tz":"Europe/Istanbul"},{"iata":"NLA","icao":"FLSK","name":"Simon Mwansa Kapwepwe International Airport","city":"Ndola","country":"ZM","lat":-12.96513,"lng":28.515624,"tz":"Africa/Lusaka"},{"iata":"NLD","icao":"MMNL","name":"Quetzalcóatl International Airport","city":"Nuevo Laredo","country":"MX","lat":27.443899,"lng":-99.570503,"tz":"America/Matamoros"},{"iata":"NLH","icao":"ZPNL","name":"Ninglang Luguhu Airport","city":"Ninglang","country":"CN","lat":27.5403,"lng":100.7593,"tz":"Asia/Shanghai"},{"iata":"NLI","icao":"UHNN","name":"Nikolayevsk-na-Amure Airport","city":"Nikolayevsk-na-Amure Airport","country":"RU","lat":53.154999,"lng":140.649994,"tz":"Asia/Sakhalin"},{"iata":"NLK","icao":"YSNF","name":"Norfolk Island International Airport","city":"Burnt Pine","country":"NF","lat":-29.041759,"lng":167.939474,"tz":"Pacific/Norfolk"},{"iata":"NLT","icao":"ZWNL","name":"Xinyuan Nalati Airport","city":"Xinyuan","country":"CN","lat":43.4318,"lng":83.3786,"tz":"Asia/Urumqi"},{"iata":"NLU","icao":"MMSM","name":"Felipe Ángeles International Airport","city":"Mexico City","country":"MX","lat":19.743824,"lng":-99.01507,"tz":"America/Mexico_City"},{"iata":"NMA","icao":"UZFN","name":"Namangan International Airport","city":"Namangan","country":"UZ","lat":40.984622,"lng":71.5578,"tz":"Asia/Tashkent"},{"iata":"NMF","icao":null,"name":"Maafaru International Airport","city":"Noonu Atoll","country":"MV","lat":5.817407,"lng":73.468404,"tz":"Indian/Maldives"},{"iata":"NMI","icao":"VANM","name":"Navi Mumbai International Airport","city":"Navi Mumbai","country":"IN","lat":18.984597,"lng":73.065253,"tz":"Asia/Kolkata"},{"iata":"NNG","icao":"ZGNN","name":"Nanning Wuxu International Airport","city":"Nanning (Jiangnan)","country":"CN","lat":22.598071,"lng":108.181922,"tz":"Asia/Shanghai"},{"iata":"NNM","icao":"ULAM","name":"Naryan Mar Airport","city":"Naryan Mar","country":"RU","lat":67.639999,"lng":53.121899,"tz":"Europe/Moscow"},{"iata":"NNT","icao":"VTCN","name":"Nan Airport","city":"","country":"TH","lat":18.807899,"lng":100.782997,"tz":"Asia/Bangkok"},{"iata":"NOB","icao":"MRNS","name":"Nosara Airport","city":"Nicoya","country":"CR","lat":9.97649,"lng":-85.653,"tz":"America/Costa_Rica"},{"iata":"NOC","icao":"EIKN","name":"Ireland West Airport Knock","city":"Charlestown","country":"IE","lat":53.910439,"lng":-8.817002,"tz":"Europe/Dublin"},{"iata":"NOJ","icao":"USRO","name":"Noyabrsk Airport","city":"Noyabrsk","country":"RU","lat":63.1833,"lng":75.269997,"tz":"Asia/Yekaterinburg"},{"iata":"NOP","icao":"LTCM","name":"Sinop Airport","city":"Sinop","country":"TR","lat":42.018313,"lng":35.071774,"tz":"Europe/Istanbul"},{"iata":"NOS","icao":"FMNN","name":"Nosy Be-Fascene International Airport","city":"Nosy Be","country":"MG","lat":-13.3121,"lng":48.3148,"tz":"Indian/Antananarivo"},{"iata":"NOU","icao":"NWWW","name":"La Tontouta International Airport","city":"Nouméa (La Tontouta)","country":"NC","lat":-22.014601,"lng":166.212997,"tz":"Pacific/Noumea"},{"iata":"NOV","icao":"FNHU","name":"Albano Machado Airport","city":"Huambo","country":"AO","lat":-12.8089,"lng":15.7605,"tz":"Africa/Luanda"},{"iata":"NOZ","icao":"UNWW","name":"Spichenkovo Airport","city":"Novokuznetsk","country":"RU","lat":53.811401,"lng":86.877197,"tz":"Asia/Novokuznetsk"},{"iata":"NPE","icao":"NZNR","name":"Hawke's Bay Airport","city":"Napier","country":"NZ","lat":-39.465801,"lng":176.869995,"tz":"Pacific/Auckland"},{"iata":"NPL","icao":"NZNP","name":"New Plymouth Airport","city":"New Plymouth","country":"NZ","lat":-39.008598,"lng":174.179001,"tz":"Pacific/Auckland"},{"iata":"NPO","icao":"WIOG","name":"Nanga Pinoh Airport","city":"Nanga Pinoh-Borneo Island","country":"ID","lat":-0.34864,"lng":111.746155,"tz":"Asia/Pontianak"},{"iata":"NPT","icao":"KUUU","name":"Newport State Airport","city":"Newport","country":"US","lat":41.532207,"lng":-71.281039,"tz":"America/New_York"},{"iata":"NQN","icao":"SAZN","name":"Presidente Perón International Airport","city":"Neuquén","country":"AR","lat":-38.949001,"lng":-68.155701,"tz":"America/Argentina/Salta"},{"iata":"NQY","icao":"EGHQ","name":"Cornwall Airport Newquay","city":"Newquay","country":"GB","lat":50.440601,"lng":-4.99541,"tz":"Europe/London"},{"iata":"NQZ","icao":"UACC","name":"Nursultan Nazarbayev International Airport","city":"Astana","country":"KZ","lat":51.027035,"lng":71.467094,"tz":"Asia/Almaty"},{"iata":"NRA","icao":"YNAR","name":"Narrandera Airport","city":"Narrandera","country":"AU","lat":-34.702202,"lng":146.511993,"tz":"Australia/Sydney"},{"iata":"NRK","icao":"ESSP","name":"Norrköping Airport","city":"Norrköping","country":"SE","lat":58.5863,"lng":16.250601,"tz":"Europe/Stockholm"},{"iata":"NRN","icao":"EDLV","name":"Weeze (Niederrhein) Airport","city":"Weeze","country":"DE","lat":51.601362,"lng":6.141228,"tz":"Europe/Berlin"},{"iata":"NRR","icao":"TJRV","name":"José Aponte de la Torre Airport","city":"Ceiba","country":"PR","lat":18.247262,"lng":-65.63979,"tz":"America/Puerto_Rico"},{"iata":"NRT","icao":"RJAA","name":"Narita International Airport","city":"Narita","country":"JP","lat":35.76858,"lng":140.388714,"tz":"Asia/Tokyo"},{"iata":"NSH","icao":"OINN","name":"Nowshahr Airport","city":"Nowshahr","country":"IR","lat":36.664286,"lng":51.46273,"tz":"Asia/Tehran"},{"iata":"NSI","icao":"FKYS","name":"Yaoundé Nsimalen International Airport","city":"Yaoundé","country":"CM","lat":3.72256,"lng":11.5533,"tz":"Africa/Douala"},{"iata":"NSK","icao":"UOOO","name":"Alykel International Airport","city":"Norilsk","country":"RU","lat":69.307951,"lng":87.325906,"tz":"Asia/Krasnoyarsk"},{"iata":"NSN","icao":"NZNS","name":"Nelson Airport","city":"Nelson","country":"NZ","lat":-41.298302,"lng":173.220993,"tz":"Pacific/Auckland"},{"iata":"NST","icao":"VTSF","name":"Nakhon Si Thammarat Airport","city":"Nakhon Si Thammarat","country":"TH","lat":8.53962,"lng":99.944702,"tz":"Asia/Bangkok"},{"iata":"NTE","icao":"LFRS","name":"Nantes Atlantique Airport","city":"Nantes","country":"FR","lat":47.153198,"lng":-1.61073,"tz":"Europe/Paris"},{"iata":"NTG","icao":"ZSNT","name":"Nantong Xingdong International Airport","city":"Nantong (Tongzhou)","country":"CN","lat":32.073566,"lng":120.980076,"tz":"Asia/Shanghai"},{"iata":"NTL","icao":"YWLM","name":"Newcastle Airport","city":"Williamtown","country":"AU","lat":-32.796114,"lng":151.835025,"tz":"Australia/Sydney"},{"iata":"NTN","icao":"YNTN","name":"Normanton Airport","city":"Normanton","country":"AU","lat":-17.68409,"lng":141.069664,"tz":"Australia/Brisbane"},{"iata":"NTQ","icao":"RJNW","name":"Noto Satoyama Airport","city":"Wajima","country":"JP","lat":37.293098,"lng":136.962006,"tz":"Asia/Tokyo"},{"iata":"NTX","icao":null,"name":"Ranai Airport","city":"Ranai-Natuna Besar Island","country":"ID","lat":3.90871,"lng":108.388,"tz":"Asia/Jakarta"},{"iata":"NUE","icao":"EDDN","name":"Nuremberg Airport","city":"Nuremberg","country":"DE","lat":49.498699,"lng":11.078056,"tz":"Europe/Berlin"},{"iata":"NUI","icao":"PAQT","name":"Nuiqsut Airport","city":"Nuiqsut","country":"US","lat":70.209999,"lng":-151.005998,"tz":"America/Anchorage"},{"iata":"NUM","icao":"OENN","name":"Neom Bay Airport","city":"Sharma","country":"SA","lat":27.924261,"lng":35.29358,"tz":"Asia/Riyadh"},{"iata":"NUX","icao":"USMU","name":"Novy Urengoy Airport","city":"Novy Urengoy","country":"RU","lat":66.069397,"lng":76.520302,"tz":"Asia/Yekaterinburg"},{"iata":"NVA","icao":"SKNV","name":"Benito Salas Airport","city":"Neiva","country":"CO","lat":2.95015,"lng":-75.294,"tz":"America/Bogota"},{"iata":"NVI","icao":"UZSA","name":"Navoi International Airport","city":"Navoi","country":"UZ","lat":40.117599,"lng":65.172658,"tz":"Asia/Samarkand"},{"iata":"NVT","icao":"SBNF","name":"Ministro Victor Konder International Airport","city":"Navegantes","country":"BR","lat":-26.879431,"lng":-48.650979,"tz":"America/Sao_Paulo"},{"iata":"NWI","icao":"EGSH","name":"Norwich Airport","city":"Norwich, Norfolk","country":"GB","lat":52.6758,"lng":1.28278,"tz":"Europe/London"},{"iata":"NYA","icao":"USHN","name":"Nyagan Airport","city":"Nyagan","country":"RU","lat":62.110001,"lng":65.614998,"tz":"Asia/Yekaterinburg"},{"iata":"NYI","icao":"DGSN","name":"Sunyani Airport","city":"Sunyani","country":"GH","lat":7.36183,"lng":-2.32876,"tz":"Africa/Accra"},{"iata":"NYK","icao":"HKNL","name":"Nanyuki Civil Airport","city":"Gathiuru","country":"KE","lat":-0.062352,"lng":37.041296,"tz":"Africa/Nairobi"},{"iata":"NYM","icao":"USMM","name":"Nadym Airport","city":"Nadym","country":"RU","lat":65.480904,"lng":72.698898,"tz":"Asia/Yekaterinburg"},{"iata":"NYO","icao":"ESKN","name":"Stockholm Skavsta Airport","city":"Nyköping","country":"SE","lat":58.789656,"lng":16.911479,"tz":"Europe/Stockholm"},{"iata":"NYT","icao":"VYNT","name":"Nay Pyi Taw International Airport","city":"Naypyitaw","country":"MM","lat":19.623501,"lng":96.200996,"tz":"Asia/Yangon"},{"iata":"NZC","icao":"SPZA","name":"Maria Reiche Neuman Airport","city":"Nazca","country":"PE","lat":-14.854,"lng":-74.961502,"tz":"America/Lima"},{"iata":"NZH","icao":"ZBMZ","name":"Manzhouli Xijiao Airport","city":"Manzhouli","country":"CN","lat":49.566667,"lng":117.33,"tz":"Asia/Shanghai"},{"iata":"NZL","icao":"ZBZL","name":"Zhalantun Genghis Khan Airport","city":"Zhalantun","country":"CN","lat":47.865942,"lng":122.768662,"tz":"Asia/Shanghai"},{"iata":"OAJ","icao":"KOAJ","name":"Albert J Ellis Airport","city":"Richlands","country":"US","lat":34.829201,"lng":-77.612099,"tz":"America/New_York"},{"iata":"OAK","icao":"KOAK","name":"San Francisco Bay Oakland International Airport","city":"Oakland","country":"US","lat":37.720085,"lng":-122.221184,"tz":"America/Los_Angeles"},{"iata":"OAX","icao":"MMOX","name":"Xoxocotlán International Airport","city":"Oaxaca","country":"MX","lat":16.998773,"lng":-96.726092,"tz":"America/Mexico_City"},{"iata":"OBO","icao":"RJCB","name":"Tokachi-Obihiro Airport","city":"Obihiro","country":"JP","lat":42.733299,"lng":143.216995,"tz":"Asia/Tokyo"},{"iata":"OCC","icao":"SECO","name":"Francisco De Orellana Airport","city":"Coca","country":"EC","lat":-0.462886,"lng":-76.986801,"tz":"America/Guayaquil"},{"iata":"OCE","icao":"KOXB","name":"Ocean City Municipal Airport","city":"Ocean City","country":"US","lat":38.310398,"lng":-75.124001,"tz":"America/New_York"},{"iata":"OCJ","icao":"MKBS","name":"Ian Fleming International Airport","city":"Boscobel","country":"JM","lat":18.404079,"lng":-76.969754,"tz":"America/Jamaica"},{"iata":"OCS","icao":null,"name":"Corisco International Airport","city":"Corisco Island","country":"GQ","lat":0.910937,"lng":9.33027,"tz":"Africa/Libreville"},{"iata":"ODE","icao":"EKOD","name":"Odense Hans Christian Andersen Airport","city":"Odense","country":"DK","lat":55.475307,"lng":10.327206,"tz":"Europe/Copenhagen"},{"iata":"OEC","icao":"WPOC","name":"Oecusse Route of the Sandalwood International Airport","city":"Oecussi-Ambeno","country":"TL","lat":-9.198419,"lng":124.337873,"tz":"Asia/Makassar"},{"iata":"OER","icao":"ESNO","name":"Örnsköldsvik Airport","city":"Örnsköldsvik","country":"SE","lat":63.408298,"lng":18.99,"tz":"Europe/Stockholm"},{"iata":"OGD","icao":"KOGD","name":"Ogden Hinckley Airport","city":"Ogden","country":"US","lat":41.1959,"lng":-112.012001,"tz":"America/Denver"},{"iata":"OGG","icao":"PHOG","name":"Kahului International Airport","city":"Kahului","country":"US","lat":20.896263,"lng":-156.431837,"tz":"Pacific/Honolulu"},{"iata":"OGL","icao":"SYEC","name":"Eugene F. Correia International Airport","city":"Ogle","country":"GY","lat":6.805881,"lng":-58.107657,"tz":"America/Guyana"},{"iata":"OGN","icao":"ROYN","name":"Yonaguni Airport","city":"Yonaguni","country":"JP","lat":24.467298,"lng":122.979827,"tz":"Asia/Tokyo"},{"iata":"OGS","icao":"KOGS","name":"Ogdensburg International Airport","city":"Ogdensburg","country":"US","lat":44.6819,"lng":-75.4655,"tz":"America/New_York"},{"iata":"OGU","icao":"LTCB","name":"Ordu–Giresun Airport","city":"Ordu","country":"TR","lat":40.966872,"lng":38.085995,"tz":"Europe/Istanbul"},{"iata":"OGX","icao":"DAUU","name":"Ain Beida Airport","city":"Ouargla","country":"DZ","lat":31.9172,"lng":5.41278,"tz":"Africa/Algiers"},{"iata":"OGZ","icao":"URMO","name":"Vladikavkaz Beslan International Airport","city":"Beslan","country":"RU","lat":43.205101,"lng":44.606602,"tz":"Europe/Moscow"},{"iata":"OHD","icao":"LWOH","name":"Ohrid St. Paul the Apostle Airport","city":"Ohrid","country":"MK","lat":41.18,"lng":20.7423,"tz":"Europe/Skopje"},{"iata":"OHE","icao":"ZYMH","name":"Mohe Gulian Airport","city":"Mohe","country":"CN","lat":52.916871,"lng":122.422759,"tz":"Asia/Shanghai"},{"iata":"OHO","icao":"UHOO","name":"Okhotsk Airport","city":"Okhotsk","country":"RU","lat":59.410065,"lng":143.056503,"tz":"Asia/Vladivostok"},{"iata":"OHS","icao":"OOSH","name":"Suhar International Airport","city":"Suhar","country":"OM","lat":24.38604,"lng":56.62541,"tz":"Asia/Muscat"},{"iata":"OIM","icao":"RJTO","name":"Oshima Airport","city":"Izu Oshima","country":"JP","lat":34.782001,"lng":139.360001,"tz":"Asia/Tokyo"},{"iata":"OIR","icao":"RJEO","name":"Okushiri Airport","city":"Okushiri Island","country":"JP","lat":42.071701,"lng":139.432999,"tz":"Asia/Tokyo"},{"iata":"OIT","icao":"RJFO","name":"Oita Airport","city":"Oita","country":"JP","lat":33.479401,"lng":131.737,"tz":"Asia/Tokyo"},{"iata":"OKA","icao":"ROAH","name":"Naha International Airport","city":"Naha","country":"JP","lat":26.192437,"lng":127.639804,"tz":"Asia/Tokyo"},{"iata":"OKC","icao":"KOKC","name":"OKC Will Rogers World Airport","city":"Oklahoma City","country":"US","lat":35.393388,"lng":-97.598248,"tz":"America/Chicago"},{"iata":"OKD","icao":"RJCO","name":"Sapporo Okadama Airport","city":"Sapporo","country":"JP","lat":43.117447,"lng":141.38134,"tz":"Asia/Tokyo"},{"iata":"OKE","icao":"RJKB","name":"Okinoerabu Airport","city":"Wadomari","country":"JP","lat":27.431604,"lng":128.705564,"tz":"Asia/Tokyo"},{"iata":"OKI","icao":"RJNO","name":"Oki Global Geopark Airport","city":"Okinoshima","country":"JP","lat":36.178388,"lng":133.323566,"tz":"Asia/Tokyo"},{"iata":"OKJ","icao":"RJOB","name":"Okayama Momotaro Airport","city":"Okayama","country":"JP","lat":34.756901,"lng":133.854996,"tz":"Asia/Tokyo"},{"iata":"OKL","icao":"WAJO","name":"Oksibil Airport","city":"Oksibil","country":"ID","lat":-4.9071,"lng":140.6277,"tz":"Pacific/Port_Moresby"},{"iata":"OKY","icao":"YBOK","name":"Oakey Army Aviation Centre","city":"","country":"AU","lat":-27.409262,"lng":151.736727,"tz":"Australia/Brisbane"},{"iata":"OLA","icao":"ENOL","name":"Ørland Airport","city":"Ørland","country":"NO","lat":63.698898,"lng":9.604,"tz":"Europe/Oslo"},{"iata":"OLB","icao":"LIEO","name":"Olbia Costa Smeralda Airport","city":"Olbia (SS)","country":"IT","lat":40.898953,"lng":9.518457,"tz":"Europe/Rome"},{"iata":"OLF","icao":"KOLF","name":"L M Clayton Airport","city":"Wolf Point","country":"US","lat":48.094501,"lng":-105.574997,"tz":"America/Denver"},{"iata":"OLM","icao":"KOLM","name":"Olympia Regional Airport","city":"Olympia","country":"US","lat":46.969399,"lng":-122.903,"tz":"America/Los_Angeles"},{"iata":"OLZ","icao":"UEMO","name":"Olyokminsk Airport","city":"Olyokminsk","country":"RU","lat":60.401833,"lng":120.476094,"tz":"Asia/Yakutsk"},{"iata":"OMA","icao":"KOMA","name":"Eppley Airfield","city":"Omaha","country":"US","lat":41.3032,"lng":-95.894096,"tz":"America/Chicago"},{"iata":"OMD","icao":"FYOG","name":"Oranjemund Airport","city":"Oranjemund","country":"NA","lat":-28.585318,"lng":16.44638,"tz":"Africa/Windhoek"},{"iata":"OME","icao":"PAOM","name":"Nome Airport","city":"Nome","country":"US","lat":64.512199,"lng":-165.445007,"tz":"America/Nome"},{"iata":"OMH","icao":"OITR","name":"Urmia Airport","city":"Urmia","country":"IR","lat":37.668098,"lng":45.068699,"tz":"Asia/Tehran"},{"iata":"OMN","icao":"UZTZ","name":"Zomin Airport","city":"Zomin","country":"UZ","lat":40.01402,"lng":68.41103,"tz":"Asia/Tashkent"},{"iata":"OMO","icao":"LQMO","name":"Mostar International Airport","city":"Mostar","country":"BA","lat":43.282489,"lng":17.846101,"tz":"Europe/Sarajevo"},{"iata":"OMR","icao":"LROD","name":"Oradea International Airport","city":"Oradea","country":"RO","lat":47.025299,"lng":21.9025,"tz":"Europe/Bucharest"},{"iata":"OMS","icao":"UNOO","name":"Omsk Central Airport","city":"Omsk","country":"RU","lat":54.963124,"lng":73.312418,"tz":"Asia/Omsk"},{"iata":"OND","icao":"FYOA","name":"Ondangwa Airport","city":"Ondangwa","country":"NA","lat":-17.878201,"lng":15.9526,"tz":"Africa/Windhoek"},{"iata":"ONJ","icao":"RJSR","name":"Odate Noshiro Airport","city":"Kitaakita","country":"JP","lat":40.191898,"lng":140.371002,"tz":"Asia/Tokyo"},{"iata":"ONQ","icao":"LTAS","name":"Zonguldak Çaycuma Airport","city":"Zonguldak","country":"TR","lat":41.506401,"lng":32.0886,"tz":"Europe/Istanbul"},{"iata":"ONT","icao":"KONT","name":"Ontario International Airport","city":"Ontario","country":"US","lat":34.056,"lng":-117.600998,"tz":"America/Los_Angeles"},{"iata":"ONX","icao":"MPEJ","name":"Enrique Adolfo Jimenez Airport","city":"Colón","country":"PA","lat":9.35664,"lng":-79.867401,"tz":"America/Panama"},{"iata":"OOL","icao":"YBCG","name":"Gold Coast Airport","city":"Gold Coast","country":"AU","lat":-28.165962,"lng":153.506641,"tz":"Australia/Brisbane"},{"iata":"OOM","icao":"YCOM","name":"Cooma Snowy Mountains Airport","city":"Cooma","country":"AU","lat":-36.300445,"lng":148.972408,"tz":"Australia/Sydney"},{"iata":"OPF","icao":"KOPF","name":"Miami-Opa Locka Executive Airport","city":"Miami","country":"US","lat":25.907,"lng":-80.278397,"tz":"America/New_York"},{"iata":"OPO","icao":"LPPR","name":"Francisco de Sá Carneiro Airport","city":"Porto","country":"PT","lat":41.2481,"lng":-8.68139,"tz":"Europe/Lisbon"},{"iata":"OPU","icao":"AYBM","name":"Balimo Airport","city":"Balimo","country":"PG","lat":-8.05,"lng":142.932999,"tz":"Pacific/Port_Moresby"},{"iata":"ORB","icao":"ESOE","name":"Örebro Airport","city":"Örebro","country":"SE","lat":59.223701,"lng":15.038,"tz":"Europe/Stockholm"},{"iata":"ORD","icao":"KORD","name":"Chicago O'Hare International Airport","city":"Chicago","country":"US","lat":41.9786,"lng":-87.9048,"tz":"America/Chicago"},{"iata":"ORF","icao":"KORF","name":"Norfolk International Airport","city":"Norfolk","country":"US","lat":36.895341,"lng":-76.201,"tz":"America/New_York"},{"iata":"ORH","icao":"KORH","name":"Worcester Regional Airport","city":"Worcester","country":"US","lat":42.2673,"lng":-71.875702,"tz":"America/New_York"},{"iata":"ORK","icao":"EICK","name":"Cork International Airport","city":"Cork","country":"IE","lat":51.841301,"lng":-8.49111,"tz":"Europe/Dublin"},{"iata":"ORN","icao":"DAOO","name":"Oran Es-Sénia (Ahmed Ben Bella) International Airport","city":"Es-Sénia","country":"DZ","lat":35.620648,"lng":-0.622486,"tz":"Africa/Algiers"},{"iata":"ORT","icao":"PAOR","name":"Northway Airport","city":"Northway","country":"US","lat":62.9613,"lng":-141.929001,"tz":"America/Anchorage"},{"iata":"ORU","icao":"SLOR","name":"Juan Mendoza International Airport","city":"Oruro","country":"BO","lat":-17.956151,"lng":-67.075829,"tz":"America/La_Paz"},{"iata":"ORY","icao":"LFPO","name":"Paris-Orly Airport","city":"Paris (Orly, Val-de-Marne)","country":"FR","lat":48.729499,"lng":2.358963,"tz":"Europe/Paris"},{"iata":"OSD","icao":"ESNZ","name":"Åre Östersund Airport","city":"Östersund","country":"SE","lat":63.193546,"lng":14.504168,"tz":"Europe/Stockholm"},{"iata":"OSI","icao":"LDOS","name":"Osijek Airport","city":"Osijek(Klisa)","country":"HR","lat":45.462355,"lng":18.811278,"tz":"Europe/Zagreb"},{"iata":"OSL","icao":"ENGM","name":"Oslo-Gardermoen International Airport","city":"Oslo (Gardermoen)","country":"NO","lat":60.193901,"lng":11.1004,"tz":"Europe/Oslo"},{"iata":"OSR","icao":"LKMT","name":"Leoš Janáček Airport Ostrava","city":"Mošnov","country":"CZ","lat":49.696301,"lng":18.111099,"tz":"Europe/Prague"},{"iata":"OSS","icao":"UCFO","name":"Osh International Airport","city":"Osh","country":"KG","lat":40.609001,"lng":72.793297,"tz":"Asia/Bishkek"},{"iata":"OST","icao":"EBOS","name":"Ostend-Bruges International Airport","city":"Oostende","country":"BE","lat":51.1998,"lng":2.874673,"tz":"Europe/Brussels"},{"iata":"OSW","icao":"UWOR","name":"Orsk Airport","city":"Orsk","country":"RU","lat":51.072498,"lng":58.5956,"tz":"Asia/Yekaterinburg"},{"iata":"OTH","icao":"KOTH","name":"Southwest Oregon Regional Airport","city":"North Bend","country":"US","lat":43.417099,"lng":-124.246002,"tz":"America/Los_Angeles"},{"iata":"OTP","icao":"LROP","name":"Bucharest Henri Coandă International Airport","city":"Otopeni","country":"RO","lat":44.571792,"lng":26.103285,"tz":"Europe/Bucharest"},{"iata":"OTZ","icao":"PAOT","name":"Ralph Wien Memorial Airport","city":"Kotzebue","country":"US","lat":66.884697,"lng":-162.598999,"tz":"America/Nome"},{"iata":"OUA","icao":"DFFD","name":"Ouagadougou Thomas Sankara International Airport","city":"Ouagadougou","country":"BF","lat":12.3532,"lng":-1.51242,"tz":"Africa/Ouagadougou"},{"iata":"OUD","icao":"GMFO","name":"Oujda Angads Airport","city":"Ahl Angad","country":"MA","lat":34.789558,"lng":-1.926041,"tz":"Africa/Casablanca"},{"iata":"OUL","icao":"EFOU","name":"Oulu Airport","city":"Oulu / Oulunsalo","country":"FI","lat":64.930099,"lng":25.354601,"tz":"Europe/Helsinki"},{"iata":"OUZ","icao":"GQPZ","name":"Tazadit Airport","city":"Zouérate","country":"MR","lat":22.757345,"lng":-12.482228,"tz":"Africa/Nouakchott"},{"iata":"OVB","icao":"UNNT","name":"Novosibirsk Tolmachevo Airport","city":"Novosibirsk","country":"RU","lat":55.019756,"lng":82.618675,"tz":"Asia/Novosibirsk"},{"iata":"OVD","icao":"LEAS","name":"Asturias Airport","city":"Ranón","country":"ES","lat":43.563599,"lng":-6.03462,"tz":"Europe/Madrid"},{"iata":"OVS","icao":"USHS","name":"Sovetskiy Airport","city":"Sovetskiy","country":"RU","lat":61.326622,"lng":63.601913,"tz":"Asia/Yekaterinburg"},{"iata":"OWB","icao":"KOWB","name":"Owensboro Daviess County Airport","city":"Owensboro","country":"US","lat":37.740101,"lng":-87.166801,"tz":"America/Chicago"},{"iata":"OXB","icao":"GGOV","name":"Osvaldo Vieira International Airport","city":"Bissau","country":"GW","lat":11.894262,"lng":-15.653596,"tz":"Africa/Bissau"},{"iata":"OYE","icao":"FOGO","name":"Oyem Airport","city":"Oyem","country":"GA","lat":1.54311,"lng":11.5814,"tz":"Africa/Libreville"},{"iata":"OZC","icao":"RPMO","name":"Labo Airport","city":"Ozamiz","country":"PH","lat":8.17851,"lng":123.842003,"tz":"Asia/Manila"},{"iata":"OZG","icao":"GMAZ","name":"Zagora Airport","city":"Zagora","country":"MA","lat":30.265788,"lng":-5.860808,"tz":"Africa/Casablanca"},{"iata":"OZZ","icao":"GMMZ","name":"Ouarzazate International Airport","city":"Ouarzazate","country":"MA","lat":30.9391,"lng":-6.90943,"tz":"Africa/Casablanca"},{"iata":"PAB","icao":"VEBU","name":"Bilaspur Airport","city":"Bilaspur","country":"IN","lat":21.9884,"lng":82.111,"tz":"Asia/Kolkata"},{"iata":"PAC","icao":"MPMG","name":"Marcos A. Gelabert International Airport","city":"Albrook","country":"PA","lat":8.97334,"lng":-79.555603,"tz":"America/Panama"},{"iata":"PAD","icao":"EDLP","name":"Paderborn Lippstadt Airport","city":"Büren","country":"DE","lat":51.612527,"lng":8.617459,"tz":"Europe/Berlin"},{"iata":"PAE","icao":"KPAE","name":"Seattle Paine Field International Airport","city":"Everett","country":"US","lat":47.9063,"lng":-122.281998,"tz":"America/Los_Angeles"},{"iata":"PAG","icao":"RPMP","name":"Pagadian Airport","city":"Pagadian","country":"PH","lat":7.825632,"lng":123.459635,"tz":"Asia/Manila"},{"iata":"PAH","icao":"KPAH","name":"Barkley Regional Airport","city":"Paducah","country":"US","lat":37.060799,"lng":-88.773804,"tz":"America/Chicago"},{"iata":"PAP","icao":"MTPP","name":"Toussaint Louverture International Airport","city":"Port-au-Prince","country":"HT","lat":18.580023,"lng":-72.292596,"tz":"America/Port-au-Prince"},{"iata":"PAT","icao":"VEPT","name":"Jay Prakash Narayan Airport","city":"Patna","country":"IN","lat":25.591299,"lng":85.087997,"tz":"Asia/Kolkata"},{"iata":"PAV","icao":"SBUF","name":"Paulo Afonso Airport","city":"Paulo Afonso","country":"BR","lat":-9.40088,"lng":-38.250599,"tz":"America/Bahia"},{"iata":"PAZ","icao":"MMPA","name":"El Tajín National Airport","city":"Poza Rica","country":"MX","lat":20.602699,"lng":-97.4608,"tz":"America/Mexico_City"},{"iata":"PBC","icao":"MMPB","name":"Hermanos Serdán International Airport","city":"Puebla","country":"MX","lat":19.158465,"lng":-98.371582,"tz":"America/Mexico_City"},{"iata":"PBD","icao":"VAPR","name":"Porbandar Airport","city":"Porbandar","country":"IN","lat":21.649524,"lng":69.656405,"tz":"Asia/Kolkata"},{"iata":"PBG","icao":"KPBG","name":"Plattsburgh International Airport","city":"Plattsburgh","country":"US","lat":44.650902,"lng":-73.468102,"tz":"America/New_York"},{"iata":"PBH","icao":"VQPR","name":"Paro International Airport","city":"Paro","country":"BT","lat":27.4032,"lng":89.424599,"tz":"Asia/Thimphu"},{"iata":"PBI","icao":"KPBI","name":"Palm Beach International Airport","city":"West Palm Beach","country":"US","lat":26.683201,"lng":-80.095596,"tz":"America/New_York"},{"iata":"PBM","icao":"SMJP","name":"Johan Adolf Pengel International Airport","city":"Paramaribo","country":"SR","lat":5.45283,"lng":-55.187801,"tz":"America/Paramaribo"},{"iata":"PBO","icao":"YPBO","name":"Paraburdoo Airport","city":"Paraburdoo","country":"AU","lat":-23.171101,"lng":117.745003,"tz":"Australia/Perth"},{"iata":"PBR","icao":"MGPB","name":"Puerto Barrios Airport","city":"Puerto Barrios","country":"GT","lat":15.7309,"lng":-88.583801,"tz":"America/Guatemala"},{"iata":"PBU","icao":"VYPT","name":"Putao Airport","city":"Putao","country":"MM","lat":27.329901,"lng":97.4263,"tz":"Asia/Yangon"},{"iata":"PCL","icao":"SPCL","name":"Cap FAP David Abenzur Rengifo International Airport","city":"Pucallpa","country":"PE","lat":-8.378064,"lng":-74.574495,"tz":"America/Lima"},{"iata":"PCP","icao":"FPPR","name":"Principe Airport","city":"São Tomé & Príncipe","country":"ST","lat":1.661155,"lng":7.411081,"tz":"Africa/Sao_Tome"},{"iata":"PCR","icao":"SKPC","name":"German Olano Airport","city":"Puerto Carreño","country":"CO","lat":6.18472,"lng":-67.4932,"tz":"America/Caracas"},{"iata":"PDA","icao":"SKPD","name":"Obando Cesar Gaviria Trujillo Airport","city":"Puerto Inírida","country":"CO","lat":3.85353,"lng":-67.9062,"tz":"America/Bogota"},{"iata":"PDG","icao":"WIEE","name":"Minangkabau International Airport","city":"Padang (Katapiang)","country":"ID","lat":-0.785964,"lng":100.280384,"tz":"Asia/Jakarta"},{"iata":"PDK","icao":"KPDK","name":"DeKalb Peachtree Airport","city":"Atlanta","country":"US","lat":33.87633,"lng":-84.30213,"tz":"America/New_York"},{"iata":"PDL","icao":"LPPD","name":"João Paulo II Airport","city":"Ponta Delgada","country":"PT","lat":37.741199,"lng":-25.697901,"tz":"Atlantic/Azores"},{"iata":"PDO","icao":"WIPQ","name":"Pendopo Airport","city":"Talang Gudang-Sumatra Island","country":"ID","lat":-3.28607,"lng":103.879997,"tz":"Asia/Jakarta"},{"iata":"PDP","icao":"SULS","name":"Capitan Corbeta CA Curbelo International Airport","city":"Punta del Este","country":"UY","lat":-34.855099,"lng":-55.094299,"tz":"America/Montevideo"},{"iata":"PDS","icao":"MMPG","name":"Piedras Negras International Airport","city":"Piedras Negras","country":"MX","lat":28.627873,"lng":-100.53524,"tz":"America/Matamoros"},{"iata":"PDT","icao":"KPDT","name":"Eastern Oregon Regional Airport at Pendleton","city":"Pendleton","country":"US","lat":45.695099,"lng":-118.841003,"tz":"America/Los_Angeles"},{"iata":"PDV","icao":"LBPD","name":"Plovdiv International Airport","city":"Plovdiv","country":"BG","lat":42.067799,"lng":24.8508,"tz":"Europe/Sofia"},{"iata":"PDX","icao":"KPDX","name":"Portland International Airport","city":"Portland","country":"US","lat":45.588699,"lng":-122.598,"tz":"America/Los_Angeles"},{"iata":"PED","icao":"LKPD","name":"Pardubice Airport","city":"Pardubice","country":"CZ","lat":50.015049,"lng":15.73981,"tz":"Europe/Prague"},{"iata":"PEE","icao":"USPP","name":"Perm International Airport","city":"Perm","country":"RU","lat":57.914501,"lng":56.021198,"tz":"Asia/Yekaterinburg"},{"iata":"PEG","icao":"LIRZ","name":"Perugia San Francesco d'Assisi – Umbria International Airport","city":"Perugia (PG)","country":"IT","lat":43.095901,"lng":12.5132,"tz":"Europe/Rome"},{"iata":"PEI","icao":"SKPE","name":"Matecaña International Airport","city":"Pereira","country":"CO","lat":4.81267,"lng":-75.7395,"tz":"America/Bogota"},{"iata":"PEK","icao":"ZBAA","name":"Beijing Capital International Airport","city":"Beijing","country":"CN","lat":40.077349,"lng":116.596702,"tz":"Asia/Shanghai"},{"iata":"PEM","icao":"SPTU","name":"Padre Aldamiz International Airport","city":"Puerto Maldonado","country":"PE","lat":-12.6136,"lng":-69.2286,"tz":"America/La_Paz"},{"iata":"PEN","icao":"WMKP","name":"Penang International Airport","city":"Penang","country":"MY","lat":5.296303,"lng":100.276185,"tz":"Asia/Kuala_Lumpur"},{"iata":"PER","icao":"YPPH","name":"Perth International Airport","city":"Perth","country":"AU","lat":-31.9403,"lng":115.967003,"tz":"Australia/Perth"},{"iata":"PES","icao":"ULPB","name":"Petrozavodsk Airport","city":"Petrozavodsk","country":"RU","lat":61.885201,"lng":34.154701,"tz":"Europe/Moscow"},{"iata":"PET","icao":"SBPK","name":"João Simões Lopes Neto International Airport","city":"Pelotas","country":"BR","lat":-31.717189,"lng":-52.327796,"tz":"America/Sao_Paulo"},{"iata":"PEV","icao":"LHPP","name":"Pécs-Pogány International Airport","city":"Pécs","country":"HU","lat":45.988891,"lng":18.242044,"tz":"Europe/Budapest"},{"iata":"PEW","icao":"OPPS","name":"Bacha Khan International Airport","city":"Peshawar","country":"PK","lat":33.9939,"lng":71.514603,"tz":"Asia/Karachi"},{"iata":"PEX","icao":"UUYP","name":"Pechora Airport","city":"Pechora","country":"RU","lat":65.121101,"lng":57.130798,"tz":"Europe/Moscow"},{"iata":"PEZ","icao":"UWPP","name":"Penza Airport","city":"Penza","country":"RU","lat":53.1106,"lng":45.021099,"tz":"Europe/Moscow"},{"iata":"PFB","icao":"SBPF","name":"Lauro Kurtz Airport","city":"Passo Fundo","country":"BR","lat":-28.243976,"lng":-52.32777,"tz":"America/Sao_Paulo"},{"iata":"PFO","icao":"LCPH","name":"Paphos International Airport","city":"Paphos","country":"CY","lat":34.717999,"lng":32.485699,"tz":"Asia/Nicosia"},{"iata":"PGA","icao":"KPGA","name":"Page Municipal Airport","city":"Page","country":"US","lat":36.924234,"lng":-111.447716,"tz":"America/Phoenix"},{"iata":"PGD","icao":"KPGD","name":"Punta Gorda Airport","city":"Punta Gorda","country":"US","lat":26.9202,"lng":-81.990501,"tz":"America/New_York"},{"iata":"PGF","icao":"LFMP","name":"Perpignan-Rivesaltes (Llabanère) Airport","city":"Perpignan/Rivesaltes","country":"FR","lat":42.740398,"lng":2.87067,"tz":"Europe/Paris"},{"iata":"PGH","icao":"VIPT","name":"Pantnagar Airport","city":"Pantnagar","country":"IN","lat":29.0334,"lng":79.473701,"tz":"Asia/Kolkata"},{"iata":"PGK","icao":"WIKK","name":"Depati Amir Airport","city":"Pangkal Pinang","country":"ID","lat":-2.1622,"lng":106.139,"tz":"Asia/Jakarta"},{"iata":"PGU","icao":"OIBP","name":"Persian Gulf International Airport","city":"Khiyaroo","country":"IR","lat":27.379601,"lng":52.737701,"tz":"Asia/Tehran"},{"iata":"PGV","icao":"KPGV","name":"Pitt-Greenville Airport","city":"Greenville","country":"US","lat":35.635535,"lng":-77.384262,"tz":"America/New_York"},{"iata":"PGZ","icao":"SBPG","name":"Ponta Grossa Airport - Comandante Antonio Amilton Beraldo","city":"Ponta Grossa","country":"BR","lat":-25.184476,"lng":-50.143822,"tz":"America/Sao_Paulo"},{"iata":"PHB","icao":"SBPB","name":"Parnaíba - Prefeito Doutor João Silva Filho International Airport","city":"Parnaíba","country":"BR","lat":-2.89375,"lng":-41.731998,"tz":"America/Fortaleza"},{"iata":"PHC","icao":"DNPO","name":"Port Harcourt International Airport","city":"Port Harcourt","country":"NG","lat":5.01549,"lng":6.94959,"tz":"Africa/Lagos"},{"iata":"PHE","icao":"YPPD","name":"Port Hedland International Airport","city":"Port Hedland","country":"AU","lat":-20.382787,"lng":118.629789,"tz":"Australia/Perth"},{"iata":"PHF","icao":"KPHF","name":"Newport News Williamsburg International Airport","city":"Newport News","country":"US","lat":37.131901,"lng":-76.492996,"tz":"America/New_York"},{"iata":"PHG","icao":"DNPM","name":"Port Harcourt City Airport / Port Harcourt Air Force Base","city":"Port Harcourt","country":"NG","lat":4.846111,"lng":7.021389,"tz":"Africa/Lagos"},{"iata":"PHH","icao":null,"name":"Pokhara International Airport","city":"Pokhara","country":"NP","lat":28.1838,"lng":84.0147,"tz":"Asia/Kathmandu"},{"iata":"PHL","icao":"KPHL","name":"Philadelphia International Airport","city":"Philadelphia","country":"US","lat":39.871899,"lng":-75.241096,"tz":"America/New_York"},{"iata":"PHS","icao":"VTPP","name":"Phitsanulok Airport","city":"Phitsanulok","country":"TH","lat":16.7829,"lng":100.278999,"tz":"Asia/Bangkok"},{"iata":"PHW","icao":"FAPH","name":"Hendrik Van Eck Airport","city":"Phalaborwa","country":"ZA","lat":-23.937201,"lng":31.155399,"tz":"Africa/Johannesburg"},{"iata":"PHX","icao":"KPHX","name":"Phoenix Sky Harbor International Airport","city":"Phoenix","country":"US","lat":33.435302,"lng":-112.005905,"tz":"America/Phoenix"},{"iata":"PHY","icao":"VTPB","name":"Phetchabun Airport","city":"","country":"TH","lat":16.676001,"lng":101.195,"tz":"Asia/Bangkok"},{"iata":"PIA","icao":"KPIA","name":"General Wayne A. Downing Peoria International Airport","city":"Peoria","country":"US","lat":40.663841,"lng":-89.692631,"tz":"America/Chicago"},{"iata":"PIB","icao":"KPIB","name":"Hattiesburg Laurel Regional Airport","city":"Moselle","country":"US","lat":31.4671,"lng":-89.337097,"tz":"America/Chicago"},{"iata":"PIE","icao":"KPIE","name":"St. Petersburg Clearwater International Airport","city":"Pinellas Park","country":"US","lat":27.9102,"lng":-82.687401,"tz":"America/New_York"},{"iata":"PIF","icao":null,"name":"Pingtung Air Force Base North","city":"Pingtung","country":"TW","lat":22.700199,"lng":120.482002,"tz":"Asia/Taipei"},{"iata":"PIH","icao":"KPIH","name":"Pocatello Regional Airport","city":"Pocatello","country":"US","lat":42.909801,"lng":-112.596001,"tz":"America/Boise"},{"iata":"PIK","icao":"EGPK","name":"Glasgow Prestwick Airport","city":"Prestwick, South Ayrshire","country":"GB","lat":55.501499,"lng":-4.577182,"tz":"Europe/London"},{"iata":"PIR","icao":"KPIR","name":"Pierre Regional Airport","city":"Pierre","country":"US","lat":44.382702,"lng":-100.286003,"tz":"America/Chicago"},{"iata":"PIS","icao":"LFBI","name":"Poitiers-Biard Airport","city":"Poitiers/Biard","country":"FR","lat":46.5877,"lng":0.306666,"tz":"Europe/Paris"},{"iata":"PIT","icao":"KPIT","name":"Pittsburgh International Airport","city":"Pittsburgh","country":"US","lat":40.491501,"lng":-80.232903,"tz":"America/New_York"},{"iata":"PIU","icao":"SPUR","name":"PAF Captain Guillermo Concha Iberico International Airport","city":"Piura","country":"PE","lat":-5.20575,"lng":-80.616402,"tz":"America/Lima"},{"iata":"PIX","icao":"LPPI","name":"Pico Airport","city":"Pico Island","country":"PT","lat":38.554298,"lng":-28.441299,"tz":"Atlantic/Azores"},{"iata":"PIZ","icao":"PPIZ","name":"Point Lay LRRS Airport","city":"Point Lay","country":"US","lat":69.732903,"lng":-163.005005,"tz":"America/Nome"},{"iata":"PJM","icao":"MRPJ","name":"Puerto Jimenez Airport","city":"Puerto Jimenez","country":"CR","lat":8.53333,"lng":-83.300003,"tz":"America/Costa_Rica"},{"iata":"PKB","icao":"KPKB","name":"Mid Ohio Valley Regional Airport","city":"Parkersburg (Williamstown)","country":"US","lat":39.3451,"lng":-81.439201,"tz":"America/New_York"},{"iata":"PKC","icao":"UHPP","name":"Yelizovo Airport","city":"Petropavlovsk-Kamchatsky","country":"RU","lat":53.168716,"lng":158.451068,"tz":"Asia/Kamchatka"},{"iata":"PKE","icao":"YPKS","name":"Parkes Airport","city":"Parkes","country":"AU","lat":-33.131401,"lng":148.238998,"tz":"Australia/Sydney"},{"iata":"PKR","icao":"VNPK","name":"Pokhara Domestic Airport","city":"Pokhara","country":"NP","lat":28.200621,"lng":83.981203,"tz":"Asia/Kathmandu"},{"iata":"PKU","icao":"WIBB","name":"Sultan Syarif Kasim II International Airport / Roesmin Nurjadin AFB","city":"Pekanbaru","country":"ID","lat":0.458647,"lng":101.444321,"tz":"Asia/Jakarta"},{"iata":"PKV","icao":"ULOO","name":"Princess Olga Pskov International Airport","city":"Pskov","country":"RU","lat":57.781316,"lng":28.39384,"tz":"Europe/Moscow"},{"iata":"PKX","icao":"ZBAD","name":"Beijing Daxing International Airport","city":"Beijing","country":"CN","lat":39.501289,"lng":116.413967,"tz":"Asia/Shanghai"},{"iata":"PKY","icao":"WAGG","name":"Tjilik Riwut Airport","city":"Palangkaraya","country":"ID","lat":-2.227146,"lng":113.943388,"tz":"Asia/Pontianak"},{"iata":"PKZ","icao":"VLPS","name":"Pakse International Airport","city":"Pakse","country":"LA","lat":15.133973,"lng":105.779871,"tz":"Asia/Vientiane"},{"iata":"PLJ","icao":"MZPL","name":"Placencia Airport","city":"Placencia","country":"BZ","lat":16.536957,"lng":-88.361511,"tz":"America/Guatemala"},{"iata":"PLM","icao":"WIPP","name":"Sultan Mahmud Badaruddin II Airport","city":"Palembang","country":"ID","lat":-2.897653,"lng":104.698147,"tz":"Asia/Jakarta"},{"iata":"PLN","icao":"KPLN","name":"Pellston Regional Airport of Emmet County Airport","city":"Pellston","country":"US","lat":45.5709,"lng":-84.7967,"tz":"America/Detroit"},{"iata":"PLO","icao":"YPLC","name":"Port Lincoln Airport","city":"Port Lincoln","country":"AU","lat":-34.605301,"lng":135.880005,"tz":"Australia/Adelaide"},{"iata":"PLQ","icao":"EYPA","name":"Palanga International Airport","city":"Palanga","country":"LT","lat":55.973202,"lng":21.093901,"tz":"Europe/Vilnius"},{"iata":"PLS","icao":"MBPV","name":"Providenciales International Airport","city":"Providenciales","country":"TC","lat":21.773697,"lng":-72.268321,"tz":"America/Grand_Turk"},{"iata":"PLW","icao":"WAFF","name":"Mutiara - SIS Al-Jufrie Airport","city":"Palu","country":"ID","lat":-0.916462,"lng":119.908647,"tz":"Asia/Makassar"},{"iata":"PLX","icao":"UASS","name":"Semei International Airport","city":"Semey","country":"KZ","lat":50.351295,"lng":80.234398,"tz":"Asia/Almaty"},{"iata":"PLZ","icao":"FAPE","name":"Chief Dawid Stuurman International Airport","city":"Gqeberha (Port Elizabeth)","country":"ZA","lat":-33.989715,"lng":25.617353,"tz":"Africa/Johannesburg"},{"iata":"PMC","icao":"SCTE","name":"El Tepual International Airport","city":"Puerto Montt","country":"CL","lat":-41.443093,"lng":-73.094065,"tz":"America/Santiago"},{"iata":"PMF","icao":"LIMP","name":"Parma Airport","city":"Parma (PR)","country":"IT","lat":44.826351,"lng":10.29705,"tz":"Europe/Rome"},{"iata":"PMG","icao":"SBPP","name":"Ponta Porã Airport","city":"Ponta Porã","country":"BR","lat":-22.549601,"lng":-55.702599,"tz":"America/Campo_Grande"},{"iata":"PMI","icao":"LEPA","name":"Palma de Mallorca Airport","city":"Palma de Mallorca","country":"ES","lat":39.551701,"lng":2.73881,"tz":"Europe/Madrid"},{"iata":"PMO","icao":"LICJ","name":"Falcone–Borsellino Airport","city":"Palermo","country":"IT","lat":38.175999,"lng":13.091,"tz":"Europe/Rome"},{"iata":"PMQ","icao":"SAWP","name":"Perito Moreno Jalil Hamer Airport","city":"Perito Moreno","country":"AR","lat":-46.537899,"lng":-70.978699,"tz":"America/Argentina/Rio_Gallegos"},{"iata":"PMR","icao":"NZPM","name":"Palmerston North Airport","city":"Palmerston North","country":"NZ","lat":-40.320599,"lng":175.617004,"tz":"Pacific/Auckland"},{"iata":"PMV","icao":"SVMG","name":"Del Caribe Santiago Mariño International Airport","city":"Isla Margarita","country":"VE","lat":10.912603,"lng":-63.966599,"tz":"America/Caracas"},{"iata":"PMW","icao":"SBPJ","name":"Brigadeiro Lysias Rodrigues Airport","city":"Palmas","country":"BR","lat":-10.2915,"lng":-48.356998,"tz":"America/Araguaina"},{"iata":"PMY","icao":"SAVY","name":"El Tehuelche Airport","city":"Puerto Madryn","country":"AR","lat":-42.7592,"lng":-65.1027,"tz":"America/Argentina/Catamarca"},{"iata":"PNA","icao":"LEPP","name":"Pamplona Airport","city":"Pamplona","country":"ES","lat":42.77,"lng":-1.64633,"tz":"Europe/Madrid"},{"iata":"PNI","icao":"PTPN","name":"Pohnpei International Airport","city":"Pohnpei Island","country":"FM","lat":6.985082,"lng":158.20992,"tz":"Pacific/Pohnpei"},{"iata":"PNK","icao":"WIOO","name":"Supadio International Airport","city":"Pontianak","country":"ID","lat":-0.152258,"lng":109.404493,"tz":"Asia/Pontianak"},{"iata":"PNL","icao":"LICG","name":"Pantelleria Airport","city":"Pantelleria (TP)","country":"IT","lat":36.816502,"lng":11.9689,"tz":"Europe/Rome"},{"iata":"PNP","icao":"AYGR","name":"Girua Airport","city":"Popondetta","country":"PG","lat":-8.80454,"lng":148.309006,"tz":"Pacific/Port_Moresby"},{"iata":"PNQ","icao":"VAPO","name":"Pune International Airport","city":"Pune","country":"IN","lat":18.5821,"lng":73.919701,"tz":"Asia/Kolkata"},{"iata":"PNR","icao":"FCPP","name":"Antonio Agostinho-Neto International Airport","city":"Pointe Noire","country":"CG","lat":-4.81603,"lng":11.8866,"tz":"Africa/Brazzaville"},{"iata":"PNS","icao":"KPNS","name":"Pensacola International Airport","city":"Pensacola","country":"US","lat":30.472718,"lng":-87.186639,"tz":"America/Chicago"},{"iata":"PNT","icao":"SCNT","name":"Lieutenant Julio Gallardo Airport","city":"Puerto Natales","country":"CL","lat":-51.67067,"lng":-72.529078,"tz":"America/Punta_Arenas"},{"iata":"PNY","icao":"VOPC","name":"Pondicherry Airport","city":"Puducherry (Pondicherry)","country":"IN","lat":11.968,"lng":79.812,"tz":"Asia/Kolkata"},{"iata":"PNZ","icao":"SBPL","name":"Senador Nilo Coelho Airport","city":"Petrolina","country":"BR","lat":-9.362422,"lng":-40.569098,"tz":"America/Recife"},{"iata":"POA","icao":"SBPA","name":"Porto Alegre-Salgado Filho International Airport","city":"Porto Alegre","country":"BR","lat":-29.993984,"lng":-51.167482,"tz":"America/Sao_Paulo"},{"iata":"POG","icao":"FOOG","name":"Port Gentil International Airport","city":"Port Gentil","country":"GA","lat":-0.711739,"lng":8.75438,"tz":"Africa/Libreville"},{"iata":"POL","icao":"FQPB","name":"Pemba Airport","city":"Pemba","country":"MZ","lat":-12.993302,"lng":40.524867,"tz":"Africa/Maputo"},{"iata":"POM","icao":"AYPY","name":"Port Moresby Jacksons International Airport","city":"Port Moresby","country":"PG","lat":-9.44338,"lng":147.220001,"tz":"Pacific/Port_Moresby"},{"iata":"POP","icao":"MDPP","name":"Gregorio Luperon International Airport","city":"Puerto Plata","country":"DO","lat":19.7579,"lng":-70.57,"tz":"America/Santo_Domingo"},{"iata":"POR","icao":"EFPO","name":"Pori Airport","city":"Pori","country":"FI","lat":61.4617,"lng":21.799999,"tz":"Europe/Helsinki"},{"iata":"POS","icao":"TTPP","name":"Piarco International Airport","city":"Port of Spain","country":"TT","lat":10.59535,"lng":-61.337568,"tz":"America/Port_of_Spain"},{"iata":"POZ","icao":"EPPO","name":"Poznań-Ławica Airport","city":"Poznań","country":"PL","lat":52.421598,"lng":16.823359,"tz":"Europe/Warsaw"},{"iata":"PPB","icao":"SBDN","name":"Presidente Prudente Airport","city":"Presidente Prudente","country":"BR","lat":-22.1751,"lng":-51.424599,"tz":"America/Sao_Paulo"},{"iata":"PPG","icao":"NSTU","name":"Pago Pago International Airport","city":"Pago Pago","country":"AS","lat":-14.331,"lng":-170.710007,"tz":"Pacific/Apia"},{"iata":"PPK","icao":"UACP","name":"Petropavl International Airport","city":"Petropavl","country":"KZ","lat":54.775622,"lng":69.187415,"tz":"Asia/Almaty"},{"iata":"PPN","icao":"SKPP","name":"Guillermo León Valencia Airport","city":"Popayán","country":"CO","lat":2.454359,"lng":-76.609253,"tz":"America/Bogota"},{"iata":"PPP","icao":"YBPN","name":"Proserpine Whitsunday Coast Airport","city":"Proserpine","country":"AU","lat":-20.494416,"lng":148.553583,"tz":"Australia/Brisbane"},{"iata":"PPS","icao":"RPVP","name":"Puerto Princesa International Airport / PAF Antonio Bautista Air Base","city":"Puerto Princesa","country":"PH","lat":9.742044,"lng":118.75911,"tz":"Asia/Manila"},{"iata":"PPT","icao":"NTAA","name":"Fa'a'ā International Airport","city":"Papeete","country":"PF","lat":-17.553472,"lng":-149.606936,"tz":"Pacific/Tahiti"},{"iata":"PQC","icao":"VVPQ","name":"Phú Quốc International Airport","city":"Phu Quoc Island","country":"VN","lat":10.169783,"lng":103.99353,"tz":"Asia/Phnom_Penh"},{"iata":"PQI","icao":"KPQI","name":"Presque Isle International Airport","city":"Presque Isle","country":"US","lat":46.688999,"lng":-68.0448,"tz":"America/New_York"},{"iata":"PQQ","icao":"YPMQ","name":"Port Macquarie Airport","city":"Port Macquarie","country":"AU","lat":-31.435801,"lng":152.863007,"tz":"Australia/Sydney"},{"iata":"PRA","icao":"SAAP","name":"General Urquiza Airport","city":"Parana","country":"AR","lat":-31.7948,"lng":-60.4804,"tz":"America/Argentina/Cordoba"},{"iata":"PRC","icao":"KPRC","name":"Prescott Regional Airport - Ernest A. Love Field","city":"Prescott","country":"US","lat":34.653502,"lng":-112.419883,"tz":"America/Phoenix"},{"iata":"PRG","icao":"LKPR","name":"Václav Havel Airport Prague","city":"Prague","country":"CZ","lat":50.100874,"lng":14.259911,"tz":"Europe/Prague"},{"iata":"PRI","icao":"FSPP","name":"Praslin Island Airport","city":"Praslin Island","country":"SC","lat":-4.319256,"lng":55.691561,"tz":"Indian/Mahe"},{"iata":"PRM","icao":"LPPM","name":"Portimão Airport","city":"Portimão","country":"PT","lat":37.1493,"lng":-8.58396,"tz":"Europe/Lisbon"},{"iata":"PRN","icao":"BKPR","name":"Priština Adem Jashari International Airport","city":"Prishtina","country":"XK","lat":42.5728,"lng":21.035801,"tz":"Europe/Belgrade"},{"iata":"PSA","icao":"LIRP","name":"Pisa International Airport","city":"Pisa (PI)","country":"IT","lat":43.683899,"lng":10.3927,"tz":"Europe/Rome"},{"iata":"PSC","icao":"KPSC","name":"Tri Cities Airport","city":"Pasco","country":"US","lat":46.264702,"lng":-119.119003,"tz":"America/Los_Angeles"},{"iata":"PSD","icao":"HEPS","name":"Port Said International Airport","city":"Port Said","country":"EG","lat":31.279285,"lng":32.240582,"tz":"Africa/Cairo"},{"iata":"PSE","icao":"TJPS","name":"Mercedita International Airport","city":"Ponce","country":"PR","lat":18.008301,"lng":-66.563004,"tz":"America/Puerto_Rico"},{"iata":"PSG","icao":"PAPG","name":"Petersburg James A Johnson Airport","city":"Petersburg","country":"US","lat":56.801701,"lng":-132.945007,"tz":"America/Vancouver"},{"iata":"PSM","icao":"KPSM","name":"Portsmouth International Airport at Pease","city":"Portsmouth","country":"US","lat":43.0779,"lng":-70.823303,"tz":"America/New_York"},{"iata":"PSO","icao":"SKPS","name":"Antonio Nariño Airport","city":"Chachagüí","country":"CO","lat":1.396722,"lng":-77.29093,"tz":"America/Bogota"},{"iata":"PSP","icao":"KPSP","name":"Palm Springs International Airport","city":"Palm Springs","country":"US","lat":33.8297,"lng":-116.507004,"tz":"America/Los_Angeles"},{"iata":"PSR","icao":"LIBP","name":"Abruzzo Airport","city":"Pescara","country":"IT","lat":42.431079,"lng":14.182981,"tz":"Europe/Rome"},{"iata":"PSS","icao":"SARP","name":"Libertador Gral D Jose De San Martin Airport","city":"Posadas","country":"AR","lat":-27.3858,"lng":-55.9707,"tz":"America/Argentina/Cordoba"},{"iata":"PSU","icao":"WIOP","name":"Pangsuma Airport","city":"Putussibau-Borneo Island","country":"ID","lat":0.834579,"lng":112.940217,"tz":"Asia/Pontianak"},{"iata":"PSZ","icao":"SLPS","name":"Capitán Av. Salvador Ogaya G. airport","city":"Puerto Suárez","country":"BO","lat":-18.975301,"lng":-57.820599,"tz":"America/La_Paz"},{"iata":"PTG","icao":"FAPP","name":"Polokwane International Airport","city":"Polokwane","country":"ZA","lat":-23.845269,"lng":29.458615,"tz":"Africa/Johannesburg"},{"iata":"PTH","icao":"PAPH","name":"Port Heiden Airport","city":"Port Heiden","country":"US","lat":56.957893,"lng":-158.630219,"tz":"America/Anchorage"},{"iata":"PTJ","icao":"YPOD","name":"Portland Airport","city":"","country":"AU","lat":-38.3181,"lng":141.470993,"tz":"Australia/Melbourne"},{"iata":"PTP","icao":"TFFR","name":"Maryse Condé International Airport","city":"Pointe-à-Pitre","country":"GP","lat":16.265443,"lng":-61.532754,"tz":"America/Guadeloupe"},{"iata":"PTU","icao":"PAPM","name":"Platinum Airport","city":"Platinum","country":"US","lat":59.017675,"lng":-161.827927,"tz":"America/Anchorage"},{"iata":"PTY","icao":"MPTO","name":"Tocumen International Airport","city":"Tocumen","country":"PA","lat":9.07136,"lng":-79.383499,"tz":"America/Panama"},{"iata":"PUB","icao":"KPUB","name":"Pueblo Memorial Airport","city":"Pueblo","country":"US","lat":38.289101,"lng":-104.497002,"tz":"America/Denver"},{"iata":"PUD","icao":"SAWD","name":"Puerto Deseado Airport","city":"Puerto Deseado","country":"AR","lat":-47.7353,"lng":-65.9041,"tz":"America/Argentina/Rio_Gallegos"},{"iata":"PUF","icao":"LFBP","name":"Pau Pyrénées Airport","city":"Pau/Pyrénées (Uzein)","country":"FR","lat":43.380001,"lng":-0.418611,"tz":"Europe/Paris"},{"iata":"PUG","icao":"YPAG","name":"Port Augusta Airport","city":"","country":"AU","lat":-32.506901,"lng":137.716995,"tz":"Australia/Adelaide"},{"iata":"PUJ","icao":"MDPC","name":"Punta Cana International Airport","city":"Punta Cana","country":"DO","lat":18.567093,"lng":-68.364558,"tz":"America/Puerto_Rico"},{"iata":"PUQ","icao":"SCCI","name":"President Carlos Ibáñez International Airport","city":"Punta Arenas","country":"CL","lat":-53.002602,"lng":-70.854599,"tz":"America/Punta_Arenas"},{"iata":"PUS","icao":"RKPK","name":"Gimhae International Airport","city":"Busan","country":"KR","lat":35.179501,"lng":128.938004,"tz":"Asia/Seoul"},{"iata":"PUU","icao":"SKAS","name":"Tres De Mayo Airport","city":"Puerto Asís","country":"CO","lat":0.505228,"lng":-76.5008,"tz":"America/Bogota"},{"iata":"PUW","icao":"KPUW","name":"Pullman-Moscow Regional Airport","city":"Pullman","country":"US","lat":46.741601,"lng":-117.11163,"tz":"America/Los_Angeles"},{"iata":"PUY","icao":"LDPL","name":"Pula Airport","city":"Pula","country":"HR","lat":44.893501,"lng":13.9222,"tz":"Europe/Zagreb"},{"iata":"PUZ","icao":"MNPC","name":"Puerto Cabezas Airport","city":"Puerto Cabezas","country":"NI","lat":14.0472,"lng":-83.386703,"tz":"America/Managua"},{"iata":"PVA","icao":"SKPV","name":"El Embrujo Airport","city":"Providencia","country":"CO","lat":13.357461,"lng":-81.357977,"tz":"America/Bogota"},{"iata":"PVD","icao":"KPVD","name":"Rhode Island T. F. Green International Airport","city":"Providence/Warwick","country":"US","lat":41.725038,"lng":-71.425668,"tz":"America/New_York"},{"iata":"PVG","icao":"ZSPD","name":"Shanghai Pudong International Airport","city":"Shanghai (Pudong)","country":"CN","lat":31.1434,"lng":121.805,"tz":"Asia/Shanghai"},{"iata":"PVH","icao":"SBPV","name":"Governador Jorge Teixeira de Oliveira International Airport","city":"Porto Velho","country":"BR","lat":-8.708491,"lng":-63.902338,"tz":"America/Porto_Velho"},{"iata":"PVK","icao":"LGPZ","name":"Aktion National Airport","city":"Preveza","country":"GR","lat":38.925499,"lng":20.765301,"tz":"Europe/Athens"},{"iata":"PVR","icao":"MMPR","name":"Puerto Vallarta International Airport","city":"Puerto Vallarta","country":"MX","lat":20.679913,"lng":-105.254391,"tz":"America/Mexico_City"},{"iata":"PVU","icao":"KPVU","name":"Provo Municipal Airport","city":"Provo","country":"US","lat":40.218894,"lng":-111.722445,"tz":"America/Denver"},{"iata":"PWE","icao":"UHMP","name":"Pevek Airport","city":"Apapelgino","country":"RU","lat":69.783302,"lng":170.597,"tz":"Asia/Anadyr"},{"iata":"PWM","icao":"KPWM","name":"Portland International Jetport","city":"Portland","country":"US","lat":43.646198,"lng":-70.309303,"tz":"America/New_York"},{"iata":"PWQ","icao":"UASP","name":"Pavlodar International Airport","city":"Pavlodar","country":"KZ","lat":52.194982,"lng":77.073088,"tz":"Asia/Almaty"},{"iata":"PXM","icao":"MMPS","name":"Puerto Escondido International Airport","city":"Puerto Escondido","country":"MX","lat":15.876808,"lng":-97.0891,"tz":"America/Mexico_City"},{"iata":"PXO","icao":"LPPS","name":"Porto Santo Airport","city":"Vila Baleira","country":"PT","lat":33.073399,"lng":-16.35,"tz":"Atlantic/Madeira"},{"iata":"PXR","icao":"VTUJ","name":"Surin Airport","city":"Surin","country":"TH","lat":14.8683,"lng":103.498001,"tz":"Asia/Bangkok"},{"iata":"PXU","icao":"VVPK","name":"Pleiku Airport","city":"Pleiku","country":"VN","lat":14.0045,"lng":108.016998,"tz":"Asia/Ho_Chi_Minh"},{"iata":"PYJ","icao":"UERP","name":"Polyarny Airport","city":"Yakutia","country":"RU","lat":66.400398,"lng":112.029999,"tz":"Asia/Yakutsk"},{"iata":"PYK","icao":"OIIP","name":"Payam International Airport","city":"Karaj","country":"IR","lat":35.7761,"lng":50.826698,"tz":"Asia/Tehran"},{"iata":"PZB","icao":"FAPM","name":"Pietermaritzburg Airport","city":"Pietermaritzburg","country":"ZA","lat":-29.649,"lng":30.398701,"tz":"Africa/Johannesburg"},{"iata":"PZH","icao":"OPZB","name":"Zhob Airport","city":"Fort Sandeman","country":"PK","lat":31.3584,"lng":69.4636,"tz":"Asia/Karachi"},{"iata":"PZI","icao":"ZUZH","name":"Panzhihua Bao'anying Airport","city":"Panzhihua (Renhe)","country":"CN","lat":26.54,"lng":101.79852,"tz":"Asia/Shanghai"},{"iata":"PZO","icao":"SVPR","name":"General Manuel Carlos Piar International Airport","city":"Guyana City","country":"VE","lat":8.28853,"lng":-62.760399,"tz":"America/Caracas"},{"iata":"PZU","icao":"HSPN","name":"Port Sudan New International Airport","city":"Port Sudan","country":"SD","lat":19.434558,"lng":37.234125,"tz":"Africa/Khartoum"},{"iata":"QBC","icao":"CYBD","name":"Bella Coola Airport","city":"Bella Coola","country":"CA","lat":52.387501,"lng":-126.596001,"tz":"America/Vancouver"},{"iata":"QGY","icao":"LHPR","name":"Győr-Pér Airport","city":"Győr","country":"HU","lat":47.628436,"lng":17.804718,"tz":"Europe/Budapest"},{"iata":"QOW","icao":"DNIM","name":"Sam Mbakwe International Cargo Airport","city":"Owerri","country":"NG","lat":5.42706,"lng":7.20603,"tz":"Africa/Lagos"},{"iata":"QRO","icao":"MMQT","name":"Querétaro Intercontinental Airport","city":"Querétaro","country":"MX","lat":20.618779,"lng":-100.186449,"tz":"America/Mexico_City"},{"iata":"QRW","icao":"DNSU","name":"Warri Airport","city":"Okpe","country":"NG","lat":5.59821,"lng":5.8187,"tz":"Africa/Lagos"},{"iata":"QSF","icao":"DAAS","name":"Ain Arnat Airport","city":"Sétif","country":"DZ","lat":36.178488,"lng":5.329909,"tz":"Africa/Algiers"},{"iata":"QSR","icao":"LIRI","name":"Salerno Costa d'Amalfi Airport","city":"Salerno","country":"IT","lat":40.620399,"lng":14.9113,"tz":"Europe/Rome"},{"iata":"QSZ","icao":"ZWSC","name":"Shache Airport","city":"Shache","country":"CN","lat":38.24542,"lng":77.056149,"tz":"Asia/Urumqi"},{"iata":"QUO","icao":"DNAI","name":"Akwa Ibom International Airport","city":"Uyo","country":"NG","lat":4.8725,"lng":8.093,"tz":"Africa/Lagos"},{"iata":"RAB","icao":"AYTK","name":"Tokua Airport","city":"Kokopo","country":"PG","lat":-4.34046,"lng":152.380005,"tz":"Pacific/Port_Moresby"},{"iata":"RAE","icao":"OERR","name":"Arar Domestic Airport","city":"Arar","country":"SA","lat":30.906601,"lng":41.138199,"tz":"Asia/Riyadh"},{"iata":"RAH","icao":"OERF","name":"Rafha Domestic Airport","city":"Rafha","country":"SA","lat":29.6264,"lng":43.490601,"tz":"Asia/Riyadh"},{"iata":"RAI","icao":"GVNP","name":"Nelson Mandela International Airport","city":"Praia","country":"CV","lat":14.941126,"lng":-23.484728,"tz":"Atlantic/Cape_Verde"},{"iata":"RAK","icao":"GMMX","name":"Marrakesh Menara Airport","city":"Marrakesh","country":"MA","lat":31.604807,"lng":-8.035788,"tz":"Africa/Casablanca"},{"iata":"RAO","icao":"SBRP","name":"Leite Lopes Airport","city":"Ribeirão Preto","country":"BR","lat":-21.134314,"lng":-47.774053,"tz":"America/Sao_Paulo"},{"iata":"RAP","icao":"KRAP","name":"Rapid City Regional Airport","city":"Rapid City","country":"US","lat":44.0453,"lng":-103.056999,"tz":"America/Denver"},{"iata":"RAR","icao":"NCRG","name":"Rarotonga International Airport","city":"Avarua","country":"CK","lat":-21.2027,"lng":-159.806,"tz":"Pacific/Rarotonga"},{"iata":"RAS","icao":"OIGG","name":"Sardar-e-Jangal Airport","city":"Rasht","country":"IR","lat":37.323333,"lng":49.617778,"tz":"Asia/Tehran"},{"iata":"RBA","icao":"GMME","name":"Rabat-Salé Airport","city":"Rabat","country":"MA","lat":34.051498,"lng":-6.75152,"tz":"Africa/Casablanca"},{"iata":"RBR","icao":"SBRB","name":"Rio Branco-Plácido de Castro International Airport","city":"Rio Branco","country":"BR","lat":-9.869031,"lng":-67.893984,"tz":"America/Rio_Branco"},{"iata":"RBY","icao":"PARY","name":"Ruby Airport","city":"Ruby","country":"US","lat":64.727203,"lng":-155.470001,"tz":"America/Anchorage"},{"iata":"RCB","icao":"FARB","name":"Richards Bay Airport","city":"Richards Bay","country":"ZA","lat":-28.740999,"lng":32.092098,"tz":"Africa/Johannesburg"},{"iata":"RCH","icao":"SKRH","name":"Almirante Padilla Airport","city":"Riohacha","country":"CO","lat":11.5262,"lng":-72.926,"tz":"America/Bogota"},{"iata":"RDD","icao":"KRDD","name":"Redding Municipal Airport","city":"Redding","country":"US","lat":40.508999,"lng":-122.292999,"tz":"America/Los_Angeles"},{"iata":"RDM","icao":"KRDM","name":"Roberts Field","city":"Redmond","country":"US","lat":44.254101,"lng":-121.150002,"tz":"America/Los_Angeles"},{"iata":"RDO","icao":"EPRA","name":"Warsaw Radom Airport","city":"Radom","country":"PL","lat":51.38937,"lng":21.214742,"tz":"Europe/Warsaw"},{"iata":"RDP","icao":"VEDG","name":"Kazi Nazrul Islam Airport","city":"Durgapur","country":"IN","lat":23.6225,"lng":87.243,"tz":"Asia/Kolkata"},{"iata":"RDU","icao":"KRDU","name":"Raleigh-Durham International Airport","city":"Raleigh/Durham","country":"US","lat":35.878659,"lng":-78.7873,"tz":"America/New_York"},{"iata":"RDZ","icao":"LFCR","name":"Rodez–Aveyron Airport","city":"Rodez/Marcillac","country":"FR","lat":44.407902,"lng":2.48267,"tz":"Europe/Paris"},{"iata":"REC","icao":"SBRF","name":"Recife/Guararapes - Gilberto Freyre International Airport","city":"Recife","country":"BR","lat":-8.12747,"lng":-34.922961,"tz":"America/Recife"},{"iata":"REG","icao":"LICR","name":"Reggio Calabria Airport","city":"Reggio Calabria","country":"IT","lat":38.071201,"lng":15.6516,"tz":"Europe/Rome"},{"iata":"REL","icao":"SAVT","name":"Almirante Marco Andres Zar Airport","city":"Rawson","country":"AR","lat":-43.2105,"lng":-65.2703,"tz":"America/Argentina/Catamarca"},{"iata":"REN","icao":"UWOO","name":"Orenburg Central Airport","city":"Orenburg","country":"RU","lat":51.792668,"lng":55.457229,"tz":"Asia/Yekaterinburg"},{"iata":"RER","icao":"MGRT","name":"Retalhuleu Airport","city":"Retalhuleu","country":"GT","lat":14.521431,"lng":-91.697001,"tz":"America/Guatemala"},{"iata":"RES","icao":"SARE","name":"Resistencia International Airport","city":"Resistencia","country":"AR","lat":-27.44991,"lng":-59.056125,"tz":"America/Argentina/Cordoba"},{"iata":"REU","icao":"LERS","name":"Reus Airport","city":"Reus","country":"ES","lat":41.147509,"lng":1.168354,"tz":"Europe/Madrid"},{"iata":"REW","icao":null,"name":"Rewa Airport, Chorhata, REWA","city":"Rewa","country":"IN","lat":24.503401,"lng":81.220299,"tz":"Asia/Kolkata"},{"iata":"REX","icao":"MMRX","name":"General Lucio Blanco International Airport","city":"Reynosa","country":"MX","lat":26.0089,"lng":-98.2285,"tz":"America/Matamoros"},{"iata":"RFD","icao":"KRFD","name":"Chicago Rockford International Airport","city":"Chicago/Rockford","country":"US","lat":42.1954,"lng":-89.097198,"tz":"America/Chicago"},{"iata":"RFP","icao":"NTTR","name":"Raiatea Airport","city":"Uturoa","country":"PF","lat":-16.7229,"lng":-151.466003,"tz":"Pacific/Tahiti"},{"iata":"RGA","icao":"SAWE","name":"Hermes Quijada International Airport","city":"Rio Grande","country":"AR","lat":-53.7777,"lng":-67.7494,"tz":"America/Argentina/Ushuaia"},{"iata":"RGI","icao":"NTTG","name":"Rangiroa Airport","city":"","country":"PF","lat":-14.9543,"lng":-147.660995,"tz":"Pacific/Tahiti"},{"iata":"RGL","icao":"SAWG","name":"Piloto Civil Norberto Fernández International Airport","city":"Rio Gallegos","country":"AR","lat":-51.608791,"lng":-69.308948,"tz":"America/Argentina/Rio_Gallegos"},{"iata":"RGN","icao":"VYYY","name":"Yangon International Airport","city":"Yangon","country":"MM","lat":16.907301,"lng":96.133202,"tz":"Asia/Yangon"},{"iata":"RGO","icao":"ZKHM","name":"Orang (Chongjin) Airport","city":"Hoemun-ri","country":"KP","lat":41.428538,"lng":129.647555,"tz":"Asia/Pyongyang"},{"iata":"RHD","icao":"SANR","name":"Termas de Río Hondo international Airport","city":"Termas de Río Hondo","country":"AR","lat":-27.4966,"lng":-64.93595,"tz":"America/Argentina/Tucuman"},{"iata":"RHI","icao":"KRHI","name":"Rhinelander Oneida County Airport","city":"Rhinelander","country":"US","lat":45.631199,"lng":-89.467499,"tz":"America/Chicago"},{"iata":"RHO","icao":"LGRP","name":"Rhodes International Airport \"Diagoras\"","city":"Rhodes","country":"GR","lat":36.405399,"lng":28.086201,"tz":"Europe/Athens"},{"iata":"RIA","icao":"SBSM","name":"Santa Maria Airport","city":"Santa Maria","country":"BR","lat":-29.711399,"lng":-53.688202,"tz":"America/Sao_Paulo"},{"iata":"RIB","icao":"SLRI","name":"Capitán Av. Selin Zeitun Lopez Airport","city":"Riberalta","country":"BO","lat":-11.009355,"lng":-66.075468,"tz":"America/La_Paz"},{"iata":"RIC","icao":"KRIC","name":"Richmond International Airport","city":"Richmond","country":"US","lat":37.505199,"lng":-77.319702,"tz":"America/New_York"},{"iata":"RIS","icao":"RJER","name":"Rishiri Airport","city":"Rishiri","country":"JP","lat":45.242001,"lng":141.186005,"tz":"Asia/Tokyo"},{"iata":"RIW","icao":"KRIW","name":"Central Wyoming Regional Airport","city":"Riverton","country":"US","lat":43.064201,"lng":-108.459999,"tz":"America/Denver"},{"iata":"RIX","icao":"EVRA","name":"Riga International Airport","city":"Riga","country":"LV","lat":56.920752,"lng":23.970711,"tz":"Europe/Riga"},{"iata":"RIY","icao":"OYRN","name":"Riyan International Airport","city":"Mukalla(Riyan)","country":"YE","lat":14.662241,"lng":49.375289,"tz":"Asia/Aden"},{"iata":"RIZ","icao":"ZSRZ","name":"Rizhao Shanzihe Airport","city":"Rizhao (Donggang)","country":"CN","lat":35.405033,"lng":119.324403,"tz":"Asia/Shanghai"},{"iata":"RJA","icao":"VORY","name":"Rajahmundry Airport","city":"Madhurapudi","country":"IN","lat":17.105799,"lng":81.813204,"tz":"Asia/Kolkata"},{"iata":"RJH","icao":"VGRJ","name":"Shah Makhdum Airport","city":"Rajshahi","country":"BD","lat":24.437201,"lng":88.616501,"tz":"Asia/Dhaka"},{"iata":"RJK","icao":"LDRI","name":"Rijeka Airport","city":"Rijeka(Omišalj)","country":"HR","lat":45.216376,"lng":14.57085,"tz":"Europe/Zagreb"},{"iata":"RJN","icao":"OIKR","name":"Rafsanjan Airport","city":"Rafsanjan","country":"IR","lat":30.298345,"lng":56.048979,"tz":"Asia/Tehran"},{"iata":"RKD","icao":"KRKD","name":"Knox County Regional Airport","city":"Rockland","country":"US","lat":44.060101,"lng":-69.099197,"tz":"America/New_York"},{"iata":"RKE","icao":"EKRK","name":"Copenhagen Roskilde Airport","city":"Roskilde","country":"DK","lat":55.585602,"lng":12.1314,"tz":"Europe/Copenhagen"},{"iata":"RKS","icao":"KRKS","name":"Southwest Wyoming Regional Airport","city":"Rock Springs","country":"US","lat":41.5942,"lng":-109.065001,"tz":"America/Denver"},{"iata":"RKT","icao":"OMRK","name":"Ras Al Khaimah International Airport","city":"Ras Al Khaimah","country":"AE","lat":25.613501,"lng":55.938801,"tz":"Asia/Dubai"},{"iata":"RKV","icao":"BIRK","name":"Reykjavík Domestic Airport","city":"Reykjavík","country":"IS","lat":64.128732,"lng":-21.93759,"tz":"Atlantic/Reykjavik"},{"iata":"RKZ","icao":"ZURK","name":"Xigaze Peace Airport / Shigatse Air Base","city":"Xigazê (Samzhubzê)","country":"CN","lat":29.350876,"lng":89.299157,"tz":"Asia/Shanghai"},{"iata":"RLG","icao":"ETNL","name":"Rostock-Laage Airport","city":"Laage","country":"DE","lat":53.918201,"lng":12.2783,"tz":"Europe/Berlin"},{"iata":"RLK","icao":"ZBYZ","name":"Bayannur Tianjitai Airport","city":"Bayannur","country":"CN","lat":40.926358,"lng":107.74093,"tz":"Asia/Shanghai"},{"iata":"RMA","icao":"YROM","name":"Roma Airport","city":"Roma","country":"AU","lat":-26.545,"lng":148.774994,"tz":"Australia/Brisbane"},{"iata":"RMF","icao":"HEMA","name":"Marsa Alam International Airport","city":"Marsa Alam","country":"EG","lat":25.555548,"lng":34.59245,"tz":"Africa/Cairo"},{"iata":"RMI","icao":"LIPR","name":"Federico Fellini International Airport","city":"Rimini (RN)","country":"IT","lat":44.020024,"lng":12.612198,"tz":"Europe/Rome"},{"iata":"RML","icao":"VCCC","name":"Colombo Ratmalana International Airport","city":"Colombo","country":"LK","lat":6.821638,"lng":79.885859,"tz":"Asia/Colombo"},{"iata":"RMO","icao":"LUKK","name":"Chişinău International Airport","city":"Chişinău","country":"MD","lat":46.92774,"lng":28.931704,"tz":"Europe/Chisinau"},{"iata":"RMQ","icao":"RCMQ","name":"Taichung International Airport / Ching Chuang Kang Air Base","city":"Taichung (Qingshui)","country":"TW","lat":24.2647,"lng":120.621002,"tz":"Asia/Taipei"},{"iata":"RMU","icao":"LEMI","name":"Region of Murcia International Airport","city":"Corvera","country":"ES","lat":37.802852,"lng":-1.124884,"tz":"Europe/Madrid"},{"iata":"RMZ","icao":null,"name":"Tobolsk Remezov Airport","city":"Tobolsk","country":"RU","lat":58.059712,"lng":68.347997,"tz":"Asia/Yekaterinburg"},{"iata":"RNB","icao":"ESDF","name":"Ronneby Airport","city":"Ronneby","country":"SE","lat":56.266701,"lng":15.265,"tz":"Europe/Stockholm"},{"iata":"RNJ","icao":"RORY","name":"Yoron Airport","city":"Yoron","country":"JP","lat":27.043847,"lng":128.401648,"tz":"Asia/Tokyo"},{"iata":"RNN","icao":"EKRN","name":"Bornholm Airport","city":"Rønne","country":"DK","lat":55.063301,"lng":14.7596,"tz":"Europe/Copenhagen"},{"iata":"RNO","icao":"KRNO","name":"Reno Tahoe International Airport","city":"Reno","country":"US","lat":39.4991,"lng":-119.767998,"tz":"America/Los_Angeles"},{"iata":"RNS","icao":"LFRN","name":"Rennes-Saint-Jacques Airport","city":"Saint-Jacques-de-la-Lande, Ille-et-Vilaine","country":"FR","lat":48.0695,"lng":-1.73479,"tz":"Europe/Paris"},{"iata":"ROA","icao":"KROA","name":"Roanoke–Blacksburg Regional Airport","city":"Roanoke","country":"US","lat":37.3255,"lng":-79.975403,"tz":"America/New_York"},{"iata":"ROB","icao":"GLRB","name":"Roberts International Airport","city":"Monrovia","country":"LR","lat":6.23379,"lng":-10.3623,"tz":"Africa/Monrovia"},{"iata":"ROC","icao":"KROC","name":"Frederick Douglass Greater Rochester International Airport","city":"Rochester","country":"US","lat":43.1189,"lng":-77.672401,"tz":"America/New_York"},{"iata":"ROI","icao":"VTUV","name":"Roi Et Airport","city":"Roi Et","country":"TH","lat":16.1168,"lng":103.774002,"tz":"Asia/Bangkok"},{"iata":"ROK","icao":"YBRK","name":"Rockhampton Airport","city":"Rockhampton","country":"AU","lat":-23.380019,"lng":150.475359,"tz":"Australia/Brisbane"},{"iata":"ROO","icao":"SBRD","name":"Maestro Marinho Franco Airport","city":"Rondonópolis","country":"BR","lat":-16.584292,"lng":-54.724803,"tz":"America/Cuiaba"},{"iata":"ROP","icao":"PGRO","name":"Rota International Airport","city":"Rota Island","country":"MP","lat":14.173267,"lng":145.241103,"tz":"Pacific/Guam"},{"iata":"ROR","icao":"PTRO","name":"Roman Tmetuchl International Airport","city":"Babelthuap Island","country":"PW","lat":7.366965,"lng":134.544085,"tz":"Pacific/Palau"},{"iata":"ROS","icao":"SAAR","name":"Rosario Islas Malvinas International Airport","city":"Rosario","country":"AR","lat":-32.9036,"lng":-60.785,"tz":"America/Argentina/Cordoba"},{"iata":"ROT","icao":"NZRO","name":"Rotorua Regional Airport","city":"Rotorua","country":"NZ","lat":-38.1092,"lng":176.317001,"tz":"Pacific/Auckland"},{"iata":"ROV","icao":"URRP","name":"Platov International Airport","city":"Rostov-on-Don","country":"RU","lat":47.493888,"lng":39.924722,"tz":"Europe/Moscow"},{"iata":"ROW","icao":"KROW","name":"Roswell Air Center Airport","city":"Roswell","country":"US","lat":33.301601,"lng":-104.530998,"tz":"America/Denver"},{"iata":"RPR","icao":null,"name":"Swami Vivekananda Airport","city":"Raipur","country":"IN","lat":21.180401,"lng":81.7388,"tz":"Asia/Kolkata"},{"iata":"RQA","icao":"ZWRQ","name":"Ruoqiang Loulan Airport","city":"Ruoqiang Town","country":"CN","lat":38.974722,"lng":88.008333,"tz":"Asia/Urumqi"},{"iata":"RRG","icao":"FIMR","name":"Sir Charles Gaetan Duval Airport","city":"Port Mathurin","country":"MU","lat":-19.756696,"lng":63.359326,"tz":"Indian/Mauritius"},{"iata":"RRJ","icao":"SBJR","name":"Jacarepaguá - Roberto Marinho Airport","city":"Rio de Janeiro","country":"BR","lat":-22.986773,"lng":-43.372194,"tz":"America/Sao_Paulo"},{"iata":"RRS","icao":"ENRO","name":"Røros Airport","city":"Røros","country":"NO","lat":62.5784,"lng":11.3423,"tz":"Europe/Stockholm"},{"iata":"RSA","icao":"SAZR","name":"Santa Rosa Airport","city":"Santa Rosa","country":"AR","lat":-36.588299,"lng":-64.275703,"tz":"America/Argentina/Salta"},{"iata":"RSD","icao":"MYER","name":"Rock Sound International Airport","city":"Rock Sound","country":"BS","lat":24.89165,"lng":-76.177602,"tz":"America/Nassau"},{"iata":"RSI","icao":"OERS","name":"Red Sea International Airport","city":"Hanak","country":"SA","lat":25.627975,"lng":37.088914,"tz":"Asia/Riyadh"},{"iata":"RST","icao":"KRST","name":"Rochester International Airport","city":"Rochester","country":"US","lat":43.908298,"lng":-92.5,"tz":"America/Chicago"},{"iata":"RSU","icao":"RKJY","name":"Yeosu Airport","city":"Yeosu","country":"KR","lat":34.8423,"lng":127.616997,"tz":"Asia/Seoul"},{"iata":"RSW","icao":"KRSW","name":"Southwest Florida International Airport","city":"Fort Myers","country":"US","lat":26.534685,"lng":-81.752816,"tz":"America/New_York"},{"iata":"RTB","icao":"MHRO","name":"Juan Manuel Gálvez International Airport","city":"Coxen Hole","country":"HN","lat":16.316799,"lng":-86.523003,"tz":"America/Tegucigalpa"},{"iata":"RTM","icao":"EHRD","name":"Rotterdam The Hague Airport","city":"Rotterdam","country":"NL","lat":51.956902,"lng":4.43722,"tz":"Europe/Amsterdam"},{"iata":"RUA","icao":"HUAR","name":"Arua Airport","city":"Arua","country":"UG","lat":3.049152,"lng":30.911714,"tz":"Africa/Lubumbashi"},{"iata":"RUH","icao":"OERK","name":"King Khalid International Airport","city":"Riyadh","country":"SA","lat":24.9576,"lng":46.698799,"tz":"Asia/Riyadh"},{"iata":"RUN","icao":"FMEE","name":"Roland Garros Airport","city":"Sainte-Marie","country":"RE","lat":-20.890087,"lng":55.518894,"tz":"Indian/Reunion"},{"iata":"RUR","icao":"NTAR","name":"Rurutu Airport","city":"","country":"PF","lat":-22.434099,"lng":-151.360992,"tz":"Pacific/Tahiti"},{"iata":"RUT","icao":"KRUT","name":"Rutland - Southern Vermont Regional Airport","city":"Rutland","country":"US","lat":43.5294,"lng":-72.9496,"tz":"America/New_York"},{"iata":"RVK","icao":"ENRM","name":"Rørvik Airport, Ryum","city":"Rørvik","country":"NO","lat":64.838303,"lng":11.1461,"tz":"Europe/Oslo"},{"iata":"RVN","icao":"EFRO","name":"Rovaniemi Airport","city":"Rovaniemi","country":"FI","lat":66.563327,"lng":25.829751,"tz":"Europe/Helsinki"},{"iata":"RVY","icao":"SURV","name":"Pres. Gral. Óscar D. Gestido Binational Airport","city":"Rivera/Santana do Livramento","country":"UY","lat":-30.9746,"lng":-55.4762,"tz":"America/Montevideo"},{"iata":"RWN","icao":"UKLR","name":"Rivne International Airport","city":"Rivne","country":"UA","lat":50.607101,"lng":26.1416,"tz":"Europe/Kiev"},{"iata":"RXS","icao":"RPVR","name":"Roxas Airport","city":"Roxas City","country":"PH","lat":11.5977,"lng":122.751999,"tz":"Asia/Manila"},{"iata":"RYB","icao":"UUBK","name":"Staroselye Airport","city":"Rybinsk","country":"RU","lat":58.104198,"lng":38.929401,"tz":"Europe/Moscow"},{"iata":"RYK","icao":"OPRK","name":"Shaikh Zaid Airport","city":"Rahim Yar Khan","country":"PK","lat":28.3839,"lng":70.279602,"tz":"Asia/Karachi"},{"iata":"RZE","icao":"EPRZ","name":"Rzeszów-Jasionka Airport","city":"Jasionka","country":"PL","lat":50.109791,"lng":22.024155,"tz":"Europe/Warsaw"},{"iata":"RZR","icao":"OINR","name":"Ramsar Airport","city":"Ramsar","country":"IR","lat":36.90701,"lng":50.687316,"tz":"Asia/Tehran"},{"iata":"RZV","icao":"LTFO","name":"Rize–Artvin Airport","city":"Rize","country":"TR","lat":41.179766,"lng":40.848802,"tz":"Europe/Istanbul"},{"iata":"SAB","icao":"TNCS","name":"Juancho E. Yrausquin Airport","city":"Zion's Hill","country":"BQ","lat":17.64533,"lng":-63.220514,"tz":"America/Kralendijk"},{"iata":"SAF","icao":"KSAF","name":"Santa Fe Municipal Airport","city":"Santa Fe","country":"US","lat":35.6171,"lng":-106.088997,"tz":"America/Denver"},{"iata":"SAG","icao":"VASD","name":"Shirdi International Airport","city":"Kakadi","country":"IN","lat":19.689211,"lng":74.373655,"tz":"Asia/Kolkata"},{"iata":"SAH","icao":"OYSN","name":"Sanaa International Airport","city":"Sanaa","country":"YE","lat":15.4763,"lng":44.2197,"tz":"Asia/Aden"},{"iata":"SAI","icao":"VDSA","name":"Siem Reap-Angkor International Airport","city":"Siem Reap","country":"KH","lat":13.36974,"lng":104.223831,"tz":"Asia/Phnom_Penh"},{"iata":"SAL","icao":"MSLP","name":"El Salvador International Airport Saint Óscar Arnulfo Romero y Galdámez","city":"San Salvador (San Luis Talpa)","country":"SV","lat":13.44447,"lng":-89.055784,"tz":"America/El_Salvador"},{"iata":"SAN","icao":"KSAN","name":"San Diego International Airport","city":"San Diego","country":"US","lat":32.733601,"lng":-117.190002,"tz":"America/Los_Angeles"},{"iata":"SAP","icao":"MHLM","name":"Ramón Villeda Morales International Airport","city":"San Pedro Sula","country":"HN","lat":15.4526,"lng":-87.923599,"tz":"America/Tegucigalpa"},{"iata":"SAQ","icao":"MYAN","name":"San Andros Airport","city":"Andros Island","country":"BS","lat":25.053801,"lng":-78.049004,"tz":"America/Nassau"},{"iata":"SAT","icao":"KSAT","name":"San Antonio International Airport","city":"San Antonio","country":"US","lat":29.533701,"lng":-98.469803,"tz":"America/Chicago"},{"iata":"SAV","icao":"KSAV","name":"Savannah Hilton Head International Airport","city":"Savannah","country":"US","lat":32.126591,"lng":-81.19998,"tz":"America/New_York"},{"iata":"SAW","icao":"LTFJ","name":"Istanbul Sabiha Gökçen International Airport","city":"Pendik, Istanbul","country":"TR","lat":40.898602,"lng":29.3092,"tz":"Europe/Istanbul"},{"iata":"SBA","icao":"KSBA","name":"Santa Barbara Municipal Airport","city":"Santa Barbara","country":"US","lat":34.426201,"lng":-119.839996,"tz":"America/Los_Angeles"},{"iata":"SBD","icao":"KSBD","name":"San Bernardino International Airport","city":"San Bernardino","country":"US","lat":34.096717,"lng":-117.236596,"tz":"America/Los_Angeles"},{"iata":"SBH","icao":"TFFJ","name":"St. Jean Airport","city":"Gustavia","country":"BL","lat":17.904398,"lng":-62.843333,"tz":"America/St_Barthelemy"},{"iata":"SBN","icao":"KSBN","name":"South Bend International Airport","city":"South Bend","country":"US","lat":41.708304,"lng":-86.316922,"tz":"America/Indiana/Indianapolis"},{"iata":"SBP","icao":"KSBP","name":"San Luis County Regional Airport","city":"San Luis Obispo","country":"US","lat":35.236801,"lng":-120.641998,"tz":"America/Los_Angeles"},{"iata":"SBT","icao":"USDA","name":"Sabetta International Airport","city":"Sabetta","country":"RU","lat":71.219167,"lng":72.052222,"tz":"Asia/Yekaterinburg"},{"iata":"SBW","icao":"WBGS","name":"Sibu Airport","city":"Sibu","country":"MY","lat":2.2616,"lng":111.985001,"tz":"Asia/Kuching"},{"iata":"SBY","icao":"KSBY","name":"Salisbury Ocean City Wicomico Regional Airport","city":"Salisbury","country":"US","lat":38.3405,"lng":-75.5103,"tz":"America/New_York"},{"iata":"SBZ","icao":"LRSB","name":"Sibiu International Airport","city":"Sibiu","country":"RO","lat":45.785841,"lng":24.086666,"tz":"Europe/Bucharest"},{"iata":"SCC","icao":"PASC","name":"Deadhorse Airport","city":"Deadhorse","country":"US","lat":70.194702,"lng":-148.464996,"tz":"America/Anchorage"},{"iata":"SCE","icao":"KUNV","name":"State College Regional Airport","city":"State College","country":"US","lat":40.849374,"lng":-77.84852,"tz":"America/New_York"},{"iata":"SCK","icao":"KSCK","name":"Stockton Metropolitan Airport","city":"Stockton","country":"US","lat":37.893279,"lng":-121.238079,"tz":"America/Los_Angeles"},{"iata":"SCL","icao":"SCEL","name":"Comodoro Arturo Merino Benítez International Airport","city":"Santiago","country":"CL","lat":-33.393002,"lng":-70.785797,"tz":"America/Santiago"},{"iata":"SCN","icao":"EDDR","name":"Saarbrücken Airport","city":"Saarbrücken","country":"DE","lat":49.214545,"lng":7.109735,"tz":"Europe/Berlin"},{"iata":"SCO","icao":"UATE","name":"Aktau International Airport","city":"Aktau","country":"KZ","lat":43.860093,"lng":51.09086,"tz":"Asia/Aqtau"},{"iata":"SCQ","icao":"LEST","name":"Santiago-Rosalía de Castro Airport","city":"Santiago de Compostela","country":"ES","lat":42.896301,"lng":-8.41514,"tz":"Europe/Madrid"},{"iata":"SCR","icao":null,"name":"Scandinavian Mountains Airport","city":"Malung-Sälen","country":"SE","lat":61.16508,"lng":12.83352,"tz":"Europe/Stockholm"},{"iata":"SCT","icao":"OYSQ","name":"Socotra Airport","city":"Mori","country":"YE","lat":12.632093,"lng":53.906173,"tz":"Asia/Aden"},{"iata":"SCU","icao":"MUCU","name":"Antonio Maceo International Airport","city":"Santiago","country":"CU","lat":19.97474,"lng":-75.835504,"tz":"America/Havana"},{"iata":"SCV","icao":"LRSV","name":"Suceava Ștefan cel Mare International Airport","city":"Suceava","country":"RO","lat":47.6875,"lng":26.354099,"tz":"Europe/Bucharest"},{"iata":"SCW","icao":"UUYY","name":"Syktyvkar Airport","city":"Syktyvkar","country":"RU","lat":61.646999,"lng":50.8451,"tz":"Europe/Moscow"},{"iata":"SDD","icao":"FNUB","name":"Lubango Mukanka International Airport","city":"Lubango","country":"AO","lat":-14.924839,"lng":13.576653,"tz":"Africa/Luanda"},{"iata":"SDE","icao":"SANE","name":"Vicecomodoro Angel D. La Paz Aragonés Airport","city":"Santiago del Estero","country":"AR","lat":-27.765556,"lng":-64.309998,"tz":"America/Argentina/Cordoba"},{"iata":"SDF","icao":"KSDF","name":"Louisville Muhammad Ali International Airport","city":"Louisville","country":"US","lat":38.1706,"lng":-85.735076,"tz":"America/Kentucky/Louisville"},{"iata":"SDG","icao":"OICS","name":"Sanandaj Airport","city":"","country":"IR","lat":35.245899,"lng":47.009201,"tz":"Asia/Tehran"},{"iata":"SDJ","icao":"RJSS","name":"Sendai Airport","city":"Natori","country":"JP","lat":38.139702,"lng":140.917007,"tz":"Asia/Tokyo"},{"iata":"SDK","icao":"WBKS","name":"Sandakan Airport","city":"Sandakan","country":"MY","lat":5.9009,"lng":118.058998,"tz":"Asia/Kuching"},{"iata":"SDL","icao":"ESNN","name":"Sundsvall-Härnösand Airport","city":"Sundsvall/ Härnösand","country":"SE","lat":62.528099,"lng":17.443899,"tz":"Europe/Stockholm"},{"iata":"SDP","icao":"PASD","name":"Sand Point Airport","city":"Sand Point","country":"US","lat":55.313908,"lng":-160.522099,"tz":"America/Anchorage"},{"iata":"SDQ","icao":"MDSD","name":"Las Américas International Airport","city":"Santo Domingo","country":"DO","lat":18.429701,"lng":-69.6689,"tz":"America/Santo_Domingo"},{"iata":"SDR","icao":"LEXJ","name":"Seve Ballesteros-Santander Airport","city":"Santander","country":"ES","lat":43.427101,"lng":-3.82001,"tz":"Europe/Madrid"},{"iata":"SDS","icao":"RJSD","name":"Sado Airport","city":"Sado","country":"JP","lat":38.0602,"lng":138.414001,"tz":"Asia/Tokyo"},{"iata":"SDU","icao":"SBRJ","name":"Santos Dumont Airport","city":"Rio de Janeiro","country":"BR","lat":-22.910397,"lng":-43.16282,"tz":"America/Sao_Paulo"},{"iata":"SDW","icao":"VOSR","name":"Sindhudurg Airport","city":"Chipi","country":"IN","lat":16.002552,"lng":73.529846,"tz":"Asia/Kolkata"},{"iata":"SDY","icao":"KSDY","name":"Sidney - Richland Regional Airport","city":"Sidney","country":"US","lat":47.705141,"lng":-104.194422,"tz":"America/Denver"},{"iata":"SEA","icao":"KSEA","name":"Seattle–Tacoma International Airport","city":"Seattle","country":"US","lat":47.447943,"lng":-122.310276,"tz":"America/Los_Angeles"},{"iata":"SEB","icao":"HLLS","name":"Sabha Airport","city":"Sabha","country":"LY","lat":26.992452,"lng":14.466162,"tz":"Africa/Tripoli"},{"iata":"SEK","icao":"UESK","name":"Srednekolymsk Airport","city":"Srednekolymsk","country":"RU","lat":67.4805,"lng":153.7364,"tz":"Asia/Srednekolymsk"},{"iata":"SEN","icao":"EGMC","name":"London Southend Airport","city":"Southend-on-Sea, Essex","country":"GB","lat":51.570562,"lng":0.693627,"tz":"Europe/London"},{"iata":"SEZ","icao":"FSIA","name":"Seychelles International Airport","city":"Victoria","country":"SC","lat":-4.67434,"lng":55.521801,"tz":"Indian/Mahe"},{"iata":"SFA","icao":"DTTX","name":"Sfax Thyna International Airport","city":"Sfax","country":"TN","lat":34.717999,"lng":10.691,"tz":"Africa/Tunis"},{"iata":"SFB","icao":"KSFB","name":"Orlando Sanford International Airport","city":"Orlando","country":"US","lat":28.774277,"lng":-81.234626,"tz":"America/New_York"},{"iata":"SFG","icao":"TFFG","name":"Grand Case-l'Espérance Airport","city":"Grand Case","country":"MF","lat":18.100057,"lng":-63.047444,"tz":"America/Marigot"},{"iata":"SFJ","icao":"BGSF","name":"Kangerlussuaq International Airport","city":"Kangerlussuaq","country":"GL","lat":67.010446,"lng":-50.715294,"tz":"America/Godthab"},{"iata":"SFN","icao":"SAAV","name":"Sauce Viejo Airport","city":"Santa Fe","country":"AR","lat":-31.7117,"lng":-60.8117,"tz":"America/Argentina/Cordoba"},{"iata":"SFO","icao":"KSFO","name":"San Francisco International Airport","city":"San Francisco","country":"US","lat":37.619806,"lng":-122.374821,"tz":"America/Los_Angeles"},{"iata":"SFS","icao":"RPLB","name":"Subic Bay International Airport / Naval Air Station Cubi Point","city":"Olongapo","country":"PH","lat":14.794833,"lng":120.271883,"tz":"Asia/Manila"},{"iata":"SFT","icao":"ESNS","name":"Skellefteå Airport","city":"Skellefteå","country":"SE","lat":64.624802,"lng":21.0769,"tz":"Europe/Stockholm"},{"iata":"SGC","icao":"USRR","name":"Surgut International Airport","city":"Surgut","country":"RU","lat":61.340501,"lng":73.405782,"tz":"Asia/Yekaterinburg"},{"iata":"SGD","icao":"EKSB","name":"Sønderborg Airport","city":"Sønderborg","country":"DK","lat":54.964401,"lng":9.79173,"tz":"Europe/Copenhagen"},{"iata":"SGF","icao":"KSGF","name":"Springfield Branson National Airport","city":"Springfield","country":"US","lat":37.245047,"lng":-93.388596,"tz":"America/Chicago"},{"iata":"SGN","icao":"VVTS","name":"Tan Son Nhat International Airport","city":"Ho Chi Minh City","country":"VN","lat":10.8188,"lng":106.652,"tz":"Asia/Ho_Chi_Minh"},{"iata":"SGU","icao":"KSGU","name":"St George Regional Airport","city":"St George","country":"US","lat":37.036389,"lng":-113.510306,"tz":"America/Denver"},{"iata":"SHA","icao":"ZSSS","name":"Shanghai Hongqiao International Airport","city":"Shanghai (Minhang)","country":"CN","lat":31.198104,"lng":121.33426,"tz":"Asia/Shanghai"},{"iata":"SHB","icao":"RJCN","name":"Nakashibetsu Airport","city":"Nakashibetsu","country":"JP","lat":43.577499,"lng":144.960007,"tz":"Asia/Tokyo"},{"iata":"SHD","icao":"KSHD","name":"Shenandoah Valley Regional Airport","city":"Weyers Cave","country":"US","lat":38.263802,"lng":-78.8964,"tz":"America/New_York"},{"iata":"SHE","icao":"ZYTX","name":"Shenyang Taoxian International Airport","city":"Shenyang","country":"CN","lat":41.6398,"lng":123.483668,"tz":"Asia/Shanghai"},{"iata":"SHI","icao":"RORS","name":"Shimojishima Airport","city":"Miyakojima","country":"JP","lat":24.8267,"lng":125.144997,"tz":"Asia/Tokyo"},{"iata":"SHJ","icao":"OMSJ","name":"Sharjah International Airport","city":"Sharjah","country":"AE","lat":25.3286,"lng":55.5172,"tz":"Asia/Dubai"},{"iata":"SHL","icao":"VEBI","name":"Shillong Airport","city":"Shillong","country":"IN","lat":25.7036,"lng":91.978699,"tz":"Asia/Kolkata"},{"iata":"SHM","icao":"RJBD","name":"Nanki Shirahama Airport","city":"Shirahama","country":"JP","lat":33.662201,"lng":135.363998,"tz":"Asia/Tokyo"},{"iata":"SHO","icao":"FDSK","name":"King Mswati III International Airport","city":"Mpaka","country":"SZ","lat":-26.358611,"lng":31.716944,"tz":"Africa/Mbabane"},{"iata":"SHR","icao":"KSHR","name":"Sheridan County Airport","city":"Sheridan","country":"US","lat":44.769199,"lng":-106.980003,"tz":"America/Denver"},{"iata":"SHS","icao":"ZHJZ","name":"Jingzhou Shashi Airport","city":"Jingzhou (Shashi)","country":"CN","lat":30.29281,"lng":112.44854,"tz":"Asia/Shanghai"},{"iata":"SHV","icao":"KSHV","name":"Shreveport Regional Airport","city":"Shreveport","country":"US","lat":32.446602,"lng":-93.8256,"tz":"America/Chicago"},{"iata":"SHW","icao":"OESH","name":"Sharurah Domestic Airport","city":"Sharurah","country":"SA","lat":17.4669,"lng":47.121399,"tz":"Asia/Riyadh"},{"iata":"SID","icao":"GVAC","name":"Amílcar Cabral International Airport","city":"Espargos","country":"CV","lat":16.7414,"lng":-22.9494,"tz":"Atlantic/Cape_Verde"},{"iata":"SIG","icao":"TJIG","name":"Fernando Luis Ribas Dominicci Airport","city":"San Juan","country":"PR","lat":18.4568,"lng":-66.098099,"tz":"America/Puerto_Rico"},{"iata":"SIN","icao":"WSSS","name":"Singapore Changi Airport","city":"Singapore","country":"SG","lat":1.35019,"lng":103.994003,"tz":"Asia/Singapore"},{"iata":"SIP","icao":"UKFF","name":"Simferopol International Airport","city":"Simferopol","country":"UA","lat":45.0522,"lng":33.975101,"tz":"Europe/Simferopol"},{"iata":"SIS","icao":"FASS","name":"Sishen Airport","city":"Sishen","country":"ZA","lat":-27.6486,"lng":22.9993,"tz":"Africa/Johannesburg"},{"iata":"SIT","icao":"PASI","name":"Sitka Rocky Gutierrez Airport","city":"Sitka","country":"US","lat":57.0471,"lng":-135.362,"tz":"America/Sitka"},{"iata":"SJC","icao":"KSJC","name":"Norman Y. Mineta San Jose International Airport","city":"San Jose","country":"US","lat":37.362452,"lng":-121.929188,"tz":"America/Los_Angeles"},{"iata":"SJD","icao":"MMSD","name":"Los Cabos International Airport","city":"San José del Cabo","country":"MX","lat":23.151919,"lng":-109.720731,"tz":"America/Mazatlan"},{"iata":"SJE","icao":"SKSJ","name":"Jorge E. Gonzalez Torres Airport","city":"San José Del Guaviare","country":"CO","lat":2.57969,"lng":-72.6394,"tz":"America/Bogota"},{"iata":"SJI","icao":"RPUH","name":"San Jose Airport","city":"San Jose","country":"PH","lat":12.3615,"lng":121.046997,"tz":"Asia/Manila"},{"iata":"SJJ","icao":"LQSA","name":"Sarajevo International Airport","city":"Sarajevo","country":"BA","lat":43.8246,"lng":18.331499,"tz":"Europe/Sarajevo"},{"iata":"SJK","icao":"SBSJ","name":"Professor Urbano Ernesto Stumpf Airport","city":"São José Dos Campos","country":"BR","lat":-23.2292,"lng":-45.8615,"tz":"America/Sao_Paulo"},{"iata":"SJL","icao":"SBUA","name":"São Gabriel da Cachoeira Airport","city":"São Gabriel da Cachoeira","country":"BR","lat":-0.14835,"lng":-66.9855,"tz":"America/Manaus"},{"iata":"SJO","icao":"MROC","name":"Juan Santamaría International Airport","city":"San José (Alajuela)","country":"CR","lat":9.99386,"lng":-84.208801,"tz":"America/Costa_Rica"},{"iata":"SJP","icao":"SBSR","name":"Prof. Eribelto Manoel Reino State Airport","city":"São José do Rio Preto","country":"BR","lat":-20.817113,"lng":-49.406963,"tz":"America/Sao_Paulo"},{"iata":"SJT","icao":"KSJT","name":"San Angelo Regional Mathis Field","city":"San Angelo","country":"US","lat":31.3577,"lng":-100.496002,"tz":"America/Chicago"},{"iata":"SJU","icao":"TJSJ","name":"Luis Munoz Marin International Airport","city":"San Juan","country":"PR","lat":18.4394,"lng":-66.001801,"tz":"America/Puerto_Rico"},{"iata":"SJW","icao":"ZBSJ","name":"Shijiazhuang Zhengding International Airport","city":"Shijiazhuang","country":"CN","lat":38.280701,"lng":114.696999,"tz":"Asia/Shanghai"},{"iata":"SJZ","icao":"LPSJ","name":"São Jorge Airport","city":"Velas","country":"PT","lat":38.665501,"lng":-28.1758,"tz":"Atlantic/Azores"},{"iata":"SKB","icao":"TKPK","name":"Robert L. Bradshaw International Airport","city":"Basseterre","country":"KN","lat":17.310845,"lng":-62.719117,"tz":"America/St_Kitts"},{"iata":"SKD","icao":"UZSS","name":"Samarkand International Airport","city":"Samarkand","country":"UZ","lat":39.701842,"lng":66.981467,"tz":"Asia/Samarkand"},{"iata":"SKG","icao":"LGTS","name":"Thessaloniki Macedonia International Airport","city":"Thessaloniki","country":"GR","lat":40.51928,"lng":22.970009,"tz":"Europe/Athens"},{"iata":"SKN","icao":"ENSK","name":"Stokmarknes Airport, Skagen","city":"Hadsel","country":"NO","lat":68.578827,"lng":15.033417,"tz":"Europe/Oslo"},{"iata":"SKO","icao":"DNSO","name":"Sadiq Abubakar III International Airport","city":"Sokoto","country":"NG","lat":12.915729,"lng":5.207547,"tz":"Africa/Lagos"},{"iata":"SKP","icao":"LWSK","name":"Skopje International Airport","city":"Ilinden","country":"MK","lat":41.958087,"lng":21.622581,"tz":"Europe/Skopje"},{"iata":"SKT","icao":"OPST","name":"Sialkot International Airport","city":"Sialkot","country":"PK","lat":32.535941,"lng":74.364623,"tz":"Asia/Karachi"},{"iata":"SKX","icao":"UWPS","name":"Saransk International Airport","city":"Saransk","country":"RU","lat":54.12513,"lng":45.212257,"tz":"Europe/Moscow"},{"iata":"SKZ","icao":"OPSK","name":"Begum Nusrat Bhutto International Airport Sukkur","city":"Sukkur","country":"PK","lat":27.722,"lng":68.791702,"tz":"Asia/Karachi"},{"iata":"SLA","icao":"SASA","name":"Martín Miguel de Güemes International Airport","city":"Salta","country":"AR","lat":-24.856001,"lng":-65.486198,"tz":"America/Argentina/Salta"},{"iata":"SLC","icao":"KSLC","name":"Salt Lake City International Airport","city":"Salt Lake City","country":"US","lat":40.78886,"lng":-111.979866,"tz":"America/Denver"},{"iata":"SLD","icao":"LZSL","name":"Sliač Airport","city":"Sliač","country":"SK","lat":48.637798,"lng":19.1341,"tz":"Europe/Bratislava"},{"iata":"SLE","icao":"KSLE","name":"Salem-Willamette Valley Airport/McNary Field","city":"Salem","country":"US","lat":44.9095,"lng":-123.002998,"tz":"America/Los_Angeles"},{"iata":"SLK","icao":"KSLK","name":"Adirondack Regional Airport","city":"Saranac Lake","country":"US","lat":44.38691,"lng":-74.204629,"tz":"America/New_York"},{"iata":"SLL","icao":"OOSA","name":"Salalah International Airport","city":"Salalah","country":"OM","lat":17.0387,"lng":54.091301,"tz":"Asia/Muscat"},{"iata":"SLM","icao":"LESA","name":"Salamanca Airport","city":"Salamanca","country":"ES","lat":40.952099,"lng":-5.50199,"tz":"Europe/Madrid"},{"iata":"SLN","icao":"KSLN","name":"Salina Municipal Airport","city":"Salina","country":"US","lat":38.791,"lng":-97.652199,"tz":"America/Chicago"},{"iata":"SLP","icao":"MMSP","name":"Ponciano Arriaga International Airport","city":"San Luis Potosí","country":"MX","lat":22.262026,"lng":-100.935692,"tz":"America/Mexico_City"},{"iata":"SLU","icao":"TLPC","name":"George F. L. Charles Airport","city":"Castries","country":"LC","lat":14.0202,"lng":-60.992901,"tz":"America/St_Vincent"},{"iata":"SLW","icao":"MMIO","name":"Plan de Guadalupe International Airport","city":"Saltillo","country":"MX","lat":25.53786,"lng":-100.928346,"tz":"America/Monterrey"},{"iata":"SLY","icao":"USDD","name":"Salekhard Airport","city":"Salekhard","country":"RU","lat":66.590797,"lng":66.611,"tz":"Asia/Yekaterinburg"},{"iata":"SLZ","icao":"SBSL","name":"Marechal Cunha Machado International Airport","city":"São Luís","country":"BR","lat":-2.586386,"lng":-44.235008,"tz":"America/Fortaleza"},{"iata":"SMA","icao":"LPAZ","name":"Santa Maria Airport","city":"Vila do Porto","country":"PT","lat":36.971401,"lng":-25.170601,"tz":"Atlantic/Azores"},{"iata":"SMF","icao":"KSMF","name":"Sacramento International Airport","city":"Sacramento","country":"US","lat":38.6954,"lng":-121.591003,"tz":"America/Los_Angeles"},{"iata":"SMI","icao":"LGSM","name":"Samos Airport","city":"Samos Island","country":"GR","lat":37.689999,"lng":26.911699,"tz":"Europe/Athens"},{"iata":"SML","icao":"MYLS","name":"Stella Maris Airport","city":"Stella Maris","country":"BS","lat":23.582317,"lng":-75.268621,"tz":"America/Nassau"},{"iata":"SMN","icao":"KSMN","name":"Lemhi County Airport","city":"Salmon","country":"US","lat":45.122233,"lng":-113.88196,"tz":"America/Denver"},{"iata":"SMR","icao":"SKSM","name":"Simón Bolívar International Airport","city":"Santa Marta","country":"CO","lat":11.1196,"lng":-74.2306,"tz":"America/Bogota"},{"iata":"SMS","icao":"FMMS","name":"Sainte Marie Airport","city":"Vohilava","country":"MG","lat":-17.093901,"lng":49.8158,"tz":"Indian/Antananarivo"},{"iata":"SMX","icao":"KSMX","name":"Santa Maria Public Airport Captain G Allan Hancock Field","city":"Santa Maria","country":"US","lat":34.898899,"lng":-120.457001,"tz":"America/Los_Angeles"},{"iata":"SNA","icao":"KSNA","name":"John Wayne Orange County International Airport","city":"Santa Ana","country":"US","lat":33.675063,"lng":-117.869281,"tz":"America/Los_Angeles"},{"iata":"SNB","icao":null,"name":"Snake Bay Airport","city":"Milikapiti","country":"AU","lat":-11.417674,"lng":130.648481,"tz":"Australia/Darwin"},{"iata":"SNC","icao":"SESA","name":"General Ulpiano Paez International Airport","city":"Salinas/La Libertad","country":"EC","lat":-2.210057,"lng":-80.985067,"tz":"America/Guayaquil"},{"iata":"SNE","icao":"GVSN","name":"Preguiça Airport","city":"Preguiça","country":"CV","lat":16.588852,"lng":-24.284132,"tz":"Atlantic/Cape_Verde"},{"iata":"SNN","icao":"EINN","name":"Shannon Airport","city":"Shannon","country":"IE","lat":52.702,"lng":-8.92482,"tz":"Europe/Dublin"},{"iata":"SNO","icao":"VTUI","name":"Sakon Nakhon Airport","city":"","country":"TH","lat":17.195101,"lng":104.119003,"tz":"Asia/Bangkok"},{"iata":"SNP","icao":"PASN","name":"St Paul Island Airport","city":"St Paul Island","country":"US","lat":57.166311,"lng":-170.222555,"tz":"America/Nome"},{"iata":"SNR","icao":"LFRZ","name":"Saint-Nazaire-Montoir Airport","city":"Saint-Nazaire/Montoir","country":"FR","lat":47.31142,"lng":-2.152634,"tz":"Europe/Paris"},{"iata":"SNU","icao":"MUSC","name":"Abel Santamaria International Airport","city":"Santa Clara","country":"CU","lat":22.492215,"lng":-79.943119,"tz":"America/Havana"},{"iata":"SNV","icao":"SVSE","name":"Santa Elena de Uairén Airport","city":"Santa Elena de Uairén","country":"VE","lat":4.554699,"lng":-61.145234,"tz":"America/Boa_Vista"},{"iata":"SNW","icao":"VYTD","name":"Thandwe Airport","city":"Thandwe","country":"MM","lat":18.460699,"lng":94.300102,"tz":"Asia/Yangon"},{"iata":"SOB","icao":"LHSM","name":"Hévíz–Balaton Airport","city":"Sármellék","country":"HU","lat":46.686391,"lng":17.159084,"tz":"Europe/Budapest"},{"iata":"SOC","icao":"WAHQ","name":"Adisoemarmo International Airport","city":"Surakarta","country":"ID","lat":-7.516044,"lng":110.757492,"tz":"Asia/Jakarta"},{"iata":"SOF","icao":"LBSF","name":"Sofia Airport","city":"Sofia","country":"BG","lat":42.696357,"lng":23.417671,"tz":"Europe/Sofia"},{"iata":"SOJ","icao":"ENSR","name":"Sørkjosen Airport","city":"Sørkjosen","country":"NO","lat":69.786797,"lng":20.9594,"tz":"Europe/Oslo"},{"iata":"SOM","icao":"SVST","name":"San Tomé Airport","city":"El Tigre","country":"VE","lat":8.945147,"lng":-64.151085,"tz":"America/Caracas"},{"iata":"SON","icao":"NVSS","name":"Santo Pekoa International Airport","city":"Luganville","country":"VU","lat":-15.505,"lng":167.220001,"tz":"Pacific/Efate"},{"iata":"SOQ","icao":"WASS","name":"Domine Eduard Osok Airport","city":"Sorong","country":"ID","lat":-0.894,"lng":131.287,"tz":"Asia/Jayapura"},{"iata":"SOU","icao":"EGHI","name":"Southampton Airport","city":"Southampton","country":"GB","lat":50.950298,"lng":-1.3568,"tz":"Europe/London"},{"iata":"SOW","icao":"KSOW","name":"Show Low Regional Airport","city":"Show Low","country":"US","lat":34.264062,"lng":-110.007091,"tz":"America/Phoenix"},{"iata":"SPC","icao":"GCLA","name":"La Palma Airport","city":"Sta Cruz de la Palma, La Palma Island","country":"ES","lat":28.626499,"lng":-17.7556,"tz":"Atlantic/Canary"},{"iata":"SPD","icao":"VGSD","name":"Saidpur Airport","city":"Saidpur","country":"BD","lat":25.759199,"lng":88.908897,"tz":"Asia/Dhaka"},{"iata":"SPI","icao":"KSPI","name":"Abraham Lincoln Capital Airport","city":"Springfield","country":"US","lat":39.844101,"lng":-89.677902,"tz":"America/Chicago"},{"iata":"SPN","icao":"PGSN","name":"Saipan International Airport","city":"I Fadang, Saipan","country":"MP","lat":15.119384,"lng":145.728848,"tz":"Pacific/Saipan"},{"iata":"SPP","icao":"FNME","name":"Menongue Airport","city":"Menongue","country":"AO","lat":-14.6576,"lng":17.719801,"tz":"Africa/Luanda"},{"iata":"SPR","icao":null,"name":"John Greif II Airport","city":"San Pedro","country":"BZ","lat":17.9139,"lng":-87.9711,"tz":"America/Belize"},{"iata":"SPS","icao":"KSPS","name":"Wichita Falls Municipal Airport / Sheppard Air Force Base","city":"Wichita Falls","country":"US","lat":33.9888,"lng":-98.491898,"tz":"America/Chicago"},{"iata":"SPU","icao":"LDSP","name":"Split Saint Jerome Airport","city":"Split","country":"HR","lat":43.538898,"lng":16.298,"tz":"Europe/Zagreb"},{"iata":"SPX","icao":"HESX","name":"Sphinx International Airport","city":"Al Jiza","country":"EG","lat":30.108179,"lng":30.895728,"tz":"Africa/Cairo"},{"iata":"SPY","icao":"DISP","name":"San Pedro Airport","city":"","country":"CI","lat":4.74672,"lng":-6.66082,"tz":"Africa/Abidjan"},{"iata":"SQD","icao":"ZSSR","name":"Shangrao Sanqingshan Airport","city":"Shangrao (Hengfeng)","country":"CN","lat":28.3797,"lng":117.9643,"tz":"Asia/Shanghai"},{"iata":"SQG","icao":"WIOS","name":"Tebelian Airport","city":"Sintang","country":"ID","lat":-0.045214,"lng":111.458049,"tz":"Asia/Pontianak"},{"iata":"SQJ","icao":"ZSSM","name":"Sanming Shaxian Airport","city":"Sanming (Sha)","country":"CN","lat":26.4263,"lng":117.8336,"tz":"Asia/Shanghai"},{"iata":"SQL","icao":"KSQL","name":"San Carlos Airport","city":"San Carlos","country":"US","lat":37.51313,"lng":-122.250838,"tz":"America/Los_Angeles"},{"iata":"SRE","icao":"SLAL","name":"Alcantarí International Airport","city":"Sucre","country":"BO","lat":-19.246835,"lng":-65.149611,"tz":"America/La_Paz"},{"iata":"SRG","icao":"WAHS","name":"Jenderal Ahmad Yani Airport","city":"Semarang","country":"ID","lat":-6.970732,"lng":110.373244,"tz":"Asia/Jakarta"},{"iata":"SRP","icao":"ENSO","name":"Stord Airport, Sørstokken","city":"Leirvik","country":"NO","lat":59.791901,"lng":5.34085,"tz":"Europe/Oslo"},{"iata":"SRQ","icao":"KSRQ","name":"Sarasota Bradenton International Airport","city":"Sarasota/Bradenton","country":"US","lat":27.394631,"lng":-82.554359,"tz":"America/New_York"},{"iata":"SRT","icao":"HUSO","name":"Soroti Airport","city":"Soroti","country":"UG","lat":1.72769,"lng":33.622799,"tz":"Africa/Kampala"},{"iata":"SRY","icao":"OINZ","name":"Sari Dasht-e Naz International Airport","city":"Sari","country":"IR","lat":36.644408,"lng":53.188761,"tz":"Asia/Tehran"},{"iata":"SRZ","icao":"SLET","name":"El Trompillo Airport","city":"Santa Cruz","country":"BO","lat":-17.8116,"lng":-63.171501,"tz":"America/La_Paz"},{"iata":"SSA","icao":"SBSV","name":"Deputado Luiz Eduardo Magalhães International Airport","city":"Salvador","country":"BR","lat":-12.908611,"lng":-38.322498,"tz":"America/Bahia"},{"iata":"SSG","icao":"FGSL","name":"Malabo International Airport","city":"Malabo","country":"GQ","lat":3.75527,"lng":8.70872,"tz":"Africa/Malabo"},{"iata":"SSH","icao":"HESH","name":"Sharm El Sheikh International Airport","city":"Sharm El Sheikh","country":"EG","lat":27.977272,"lng":34.394717,"tz":"Africa/Cairo"},{"iata":"SSJ","icao":"ENST","name":"Sandnessjøen Airport, Stokka","city":"Alstahaug","country":"NO","lat":65.956802,"lng":12.4689,"tz":"Europe/Oslo"},{"iata":"SST","icao":"SAZL","name":"Santa Teresita Airport","city":"Santa Teresita","country":"AR","lat":-36.5423,"lng":-56.7218,"tz":"America/Argentina/Buenos_Aires"},{"iata":"SSY","icao":"FNBC","name":"Mbanza Congo Airport","city":"Mbanza Congo","country":"AO","lat":-6.2699,"lng":14.247,"tz":"Africa/Luanda"},{"iata":"STC","icao":"KSTC","name":"Saint Cloud Regional Airport","city":"Saint Cloud","country":"US","lat":45.5466,"lng":-94.059898,"tz":"America/Chicago"},{"iata":"STD","icao":"SVSO","name":"Mayor Buenaventura Vivas International Airport","city":"Santo Domingo","country":"VE","lat":7.56538,"lng":-72.035103,"tz":"America/Caracas"},{"iata":"STG","icao":"PAPB","name":"St George Airport","city":"St George","country":"US","lat":56.577345,"lng":-169.663823,"tz":"America/Nome"},{"iata":"STI","icao":"MDST","name":"Cibao International Airport","city":"Santiago","country":"DO","lat":19.40406,"lng":-70.604431,"tz":"America/Santo_Domingo"},{"iata":"STL","icao":"KSTL","name":"St. Louis Lambert International Airport","city":"St Louis","country":"US","lat":38.748697,"lng":-90.370003,"tz":"America/Chicago"},{"iata":"STM","icao":"SBSN","name":"Santarém - Maestro Wilson Fonseca International Airport","city":"Santarém","country":"BR","lat":-2.422423,"lng":-54.79306,"tz":"America/Santarem"},{"iata":"STN","icao":"EGSS","name":"London Stansted Airport","city":"London, Essex","country":"GB","lat":51.884998,"lng":0.235,"tz":"Europe/London"},{"iata":"STR","icao":"EDDS","name":"Stuttgart Airport","city":"Stuttgart","country":"DE","lat":48.689899,"lng":9.22196,"tz":"Europe/Berlin"},{"iata":"STS","icao":"KSTS","name":"Charles M. Schulz Sonoma County Airport","city":"Santa Rosa","country":"US","lat":38.508999,"lng":-122.813003,"tz":"America/Los_Angeles"},{"iata":"STT","icao":"TIST","name":"Cyril E. King Airport","city":"Charlotte Amalie","country":"VI","lat":18.337091,"lng":-64.977251,"tz":"America/St_Thomas"},{"iata":"STV","icao":"VASU","name":"Surat International Airport","city":"Surat","country":"IN","lat":21.115531,"lng":72.743251,"tz":"Asia/Kolkata"},{"iata":"STW","icao":"URMT","name":"Stavropol Shpakovskoye Airport","city":"Stavropol","country":"RU","lat":45.1092,"lng":42.112801,"tz":"Europe/Moscow"},{"iata":"STX","icao":"TISX","name":"Henry E. Rohlsen Airport","city":"Christiansted","country":"VI","lat":17.701413,"lng":-64.802608,"tz":"America/St_Thomas"},{"iata":"SUB","icao":"WARR","name":"Juanda International Airport","city":"Surabaya","country":"ID","lat":-7.37983,"lng":112.787003,"tz":"Asia/Jakarta"},{"iata":"SUF","icao":"LICA","name":"Lamezia Terme Sant'Eufemia International Airport","city":"Lamezia Terme (CZ)","country":"IT","lat":38.906214,"lng":16.246007,"tz":"Europe/Rome"},{"iata":"SUG","icao":"RPMS","name":"Surigao Airport","city":"Surigao City","country":"PH","lat":9.755838,"lng":125.480947,"tz":"Asia/Manila"},{"iata":"SUI","icao":"UGSS","name":"Vladislav Ardzinba Sukhum International Airport","city":"Sukhumi","country":"GE","lat":42.8582,"lng":41.128101,"tz":"Asia/Tbilisi"},{"iata":"SUJ","icao":"LRSM","name":"Satu Mare International Airport","city":"Satu Mare","country":"RO","lat":47.7033,"lng":22.8857,"tz":"Europe/Bucharest"},{"iata":"SUN","icao":"KSUN","name":"Friedman Memorial Airport","city":"Hailey","country":"US","lat":43.504398,"lng":-114.295998,"tz":"America/Boise"},{"iata":"SUV","icao":"NFNA","name":"Nausori International Airport","city":"Nausori","country":"FJ","lat":-18.044226,"lng":178.561486,"tz":"Pacific/Fiji"},{"iata":"SUX","icao":"KSUX","name":"Sioux Gateway Airport / Brigadier General Bud Day Field","city":"Sioux City","country":"US","lat":42.397605,"lng":-96.382237,"tz":"America/Chicago"},{"iata":"SVA","icao":"PASA","name":"Savoonga Airport","city":"Savoonga","country":"US","lat":63.686401,"lng":-170.492996,"tz":"America/Nome"},{"iata":"SVB","icao":"FMNS","name":"Sambava Airport","city":"Sambava","country":"MG","lat":-14.2786,"lng":50.174702,"tz":"Indian/Antananarivo"},{"iata":"SVC","icao":"KSVC","name":"Grant County Airport","city":"Silver City","country":"US","lat":32.636701,"lng":-108.154736,"tz":"America/Denver"},{"iata":"SVD","icao":"TVSA","name":"Argyle International Airport","city":"Kingstown","country":"VC","lat":13.159725,"lng":-61.148801,"tz":"America/St_Vincent"},{"iata":"SVG","icao":"ENZV","name":"Stavanger Airport, Sola","city":"Stavanger","country":"NO","lat":58.876701,"lng":5.63778,"tz":"Europe/Oslo"},{"iata":"SVI","icao":"SKSV","name":"Eduardo Falla Solano Airport","city":"San Vicente Del Caguán","country":"CO","lat":2.15217,"lng":-74.7663,"tz":"America/Bogota"},{"iata":"SVJ","icao":"ENSH","name":"Svolvær Airport, Helle","city":"Svolvær","country":"NO","lat":68.243301,"lng":14.6692,"tz":"Europe/Oslo"},{"iata":"SVL","icao":"EFSA","name":"Savonlinna Airport","city":"Savonlinna","country":"FI","lat":61.9431,"lng":28.945101,"tz":"Europe/Helsinki"},{"iata":"SVO","icao":"UUEE","name":"Sheremetyevo International Airport","city":"Moscow","country":"RU","lat":55.976858,"lng":37.41121,"tz":"Europe/Moscow"},{"iata":"SVQ","icao":"LEZL","name":"Seville Airport","city":"Seville","country":"ES","lat":37.417999,"lng":-5.89311,"tz":"Europe/Madrid"},{"iata":"SVX","icao":"USSS","name":"Koltsovo Airport","city":"Yekaterinburg","country":"RU","lat":56.743099,"lng":60.8027,"tz":"Asia/Yekaterinburg"},{"iata":"SVZ","icao":"SVSA","name":"Juan Vicente Gómez International Airport","city":"San Antonio del Tachira","country":"VE","lat":7.840809,"lng":-72.439878,"tz":"America/Caracas"},{"iata":"SWA","icao":"ZGOW","name":"Jieyang Chaoshan International Airport","city":"Jieyang (Rongcheng)","country":"CN","lat":23.552,"lng":116.5033,"tz":"Asia/Shanghai"},{"iata":"SWF","icao":"KSWF","name":"New York Stewart International Airport","city":"Newburgh","country":"US","lat":41.50421,"lng":-74.108901,"tz":"America/New_York"},{"iata":"SWO","icao":"KSWO","name":"Stillwater Regional Airport","city":"Stillwater","country":"US","lat":36.162132,"lng":-97.085581,"tz":"America/Chicago"},{"iata":"SXB","icao":"LFST","name":"Strasbourg Airport","city":"Strasbourg","country":"FR","lat":48.5383,"lng":7.62823,"tz":"Europe/Paris"},{"iata":"SXM","icao":"TNCM","name":"Princess Juliana International Airport","city":"Sint Maarten","country":"SX","lat":18.041,"lng":-63.108898,"tz":"America/Lower_Princes"},{"iata":"SXR","icao":"VISR","name":"Sheikh ul Alam International Airport","city":"Srinagar","country":"IN","lat":33.987099,"lng":74.7742,"tz":"Asia/Kolkata"},{"iata":"SYD","icao":"YSSY","name":"Sydney Kingsford Smith International Airport","city":"Sydney (Mascot)","country":"AU","lat":-33.946098,"lng":151.177002,"tz":"Australia/Sydney"},{"iata":"SYO","icao":"RJSY","name":"Shonai Airport","city":"Shonai","country":"JP","lat":38.812199,"lng":139.787003,"tz":"Asia/Tokyo"},{"iata":"SYQ","icao":"MRPV","name":"Tobías Bolaños International Airport","city":"San Jose","country":"CR","lat":9.95705,"lng":-84.139801,"tz":"America/Costa_Rica"},{"iata":"SYR","icao":"KSYR","name":"Syracuse Hancock International Airport","city":"Syracuse","country":"US","lat":43.111198,"lng":-76.1063,"tz":"America/New_York"},{"iata":"SYS","icao":"UERS","name":"Saskylakh Airport","city":"Saskylakh","country":"RU","lat":71.927902,"lng":114.080002,"tz":"Asia/Yakutsk"},{"iata":"SYX","icao":"ZJSY","name":"Sanya Phoenix International Airport","city":"Sanya (Tianya)","country":"CN","lat":18.3029,"lng":109.412003,"tz":"Asia/Shanghai"},{"iata":"SYY","icao":"EGPO","name":"Stornoway Airport","city":"Stornoway, Western Isles","country":"GB","lat":58.215599,"lng":-6.33111,"tz":"Europe/London"},{"iata":"SYZ","icao":"OISS","name":"Shiraz Shahid Dastghaib International Airport","city":"Shiraz","country":"IR","lat":29.5392,"lng":52.589802,"tz":"Asia/Tehran"},{"iata":"SZA","icao":"FNSO","name":"Soyo Airport","city":"Soyo","country":"AO","lat":-6.14109,"lng":12.3718,"tz":"Africa/Luanda"},{"iata":"SZB","icao":"WMSA","name":"Sultan Abdul Aziz Shah International Airport","city":"Subang","country":"MY","lat":3.13058,"lng":101.549004,"tz":"Asia/Kuala_Lumpur"},{"iata":"SZF","icao":"LTFH","name":"Samsun-Çarşamba Airport","city":"Samsun","country":"TR","lat":41.253988,"lng":36.567546,"tz":"Europe/Istanbul"},{"iata":"SZG","icao":"LOWS","name":"Salzburg Airport","city":"Salzburg","country":"AT","lat":47.793301,"lng":13.0043,"tz":"Europe/Vienna"},{"iata":"SZH","icao":"ZBSG","name":"Shuozhou Zirun Airport","city":"Shuozhou","country":"CN","lat":39.273241,"lng":112.691552,"tz":"Asia/Shanghai"},{"iata":"SZK","icao":"FASZ","name":"Skukuza Airport","city":"Skukuza","country":"ZA","lat":-24.96085,"lng":31.588587,"tz":"Africa/Johannesburg"},{"iata":"SZX","icao":"ZGSZ","name":"Shenzhen Bao'an International Airport","city":"Shenzhen","country":"CN","lat":22.639474,"lng":113.803262,"tz":"Asia/Shanghai"},{"iata":"SZY","icao":"EPSY","name":"Olsztyn-Mazury Airport","city":"Szymany","country":"PL","lat":53.481899,"lng":20.9377,"tz":"Europe/Warsaw"},{"iata":"SZZ","icao":"EPSC","name":"Solidarity Szczecin–Goleniów Airport","city":"Szczecin(Glewice)","country":"PL","lat":53.584702,"lng":14.9022,"tz":"Europe/Warsaw"},{"iata":"TAB","icao":"TTCP","name":"A.N.R. Robinson International Airport","city":"Scarborough","country":"TT","lat":11.149571,"lng":-60.831298,"tz":"America/Port_of_Spain"},{"iata":"TAC","icao":"RPVA","name":"Daniel Z. Romualdez Airport","city":"Tacloban City","country":"PH","lat":11.227761,"lng":125.027783,"tz":"Asia/Manila"},{"iata":"TAE","icao":"RKTN","name":"Daegu International Airport","city":"Daegu","country":"KR","lat":35.894394,"lng":128.656989,"tz":"Asia/Seoul"},{"iata":"TAG","icao":"RPSP","name":"Bohol-Panglao International Airport","city":"Panglao","country":"PH","lat":9.573045,"lng":123.770143,"tz":"Asia/Manila"},{"iata":"TAH","icao":"NVVW","name":"Whitegrass Airport","city":"Tanna Island","country":"VU","lat":-19.455099,"lng":169.223999,"tz":"Pacific/Efate"},{"iata":"TAI","icao":"OYTZ","name":"Taiz International Airport","city":"Taiz","country":"YE","lat":13.686,"lng":44.139099,"tz":"Asia/Aden"},{"iata":"TAK","icao":"RJOT","name":"Takamatsu Airport","city":"Takamatsu","country":"JP","lat":34.214963,"lng":134.015454,"tz":"Asia/Tokyo"},{"iata":"TAM","icao":"MMTM","name":"General Francisco Javier Mina International Airport","city":"Ciudad Madero","country":"MX","lat":22.292622,"lng":-97.867058,"tz":"America/Monterrey"},{"iata":"TAO","icao":"ZSQD","name":"Qingdao Jiaodong International Airport","city":"Qingdao (Jiaozhou)","country":"CN","lat":36.361953,"lng":120.088171,"tz":"Asia/Shanghai"},{"iata":"TAP","icao":"MMTP","name":"Tapachula International Airport","city":"Tapachula","country":"MX","lat":14.794549,"lng":-92.369871,"tz":"America/Mexico_City"},{"iata":"TAS","icao":"UZTT","name":"Tashkent International Airport","city":"Tashkent","country":"UZ","lat":41.2579,"lng":69.281197,"tz":"Asia/Tashkent"},{"iata":"TAT","icao":"LZTT","name":"Poprad-Tatry Airport","city":"Poprad","country":"SK","lat":49.070994,"lng":20.241394,"tz":"Europe/Bratislava"},{"iata":"TAY","icao":"EETU","name":"Tartu Airport","city":"Tartu","country":"EE","lat":58.307438,"lng":26.686473,"tz":"Europe/Tallinn"},{"iata":"TAZ","icao":"UTAT","name":"Dashoguz International Airport","city":"Daşoguz","country":"TM","lat":41.759853,"lng":59.836149,"tz":"Asia/Ashgabat"},{"iata":"TBB","icao":"VVTH","name":"Dong Tac Airport","city":"Tuy Hoa","country":"VN","lat":13.0496,"lng":109.334,"tz":"Asia/Ho_Chi_Minh"},{"iata":"TBH","icao":"RPVU","name":"Tugdan Airport","city":"Tablas Island","country":"PH","lat":12.311,"lng":122.084999,"tz":"Asia/Manila"},{"iata":"TBI","icao":"MYCB","name":"New Bight Airport","city":"Cat Island","country":"BS","lat":24.3153,"lng":-75.452301,"tz":"America/Nassau"},{"iata":"TBJ","icao":"DTKA","name":"Tabarka-Aïn Draham International Airport","city":"Tabarka","country":"TN","lat":36.98,"lng":8.87694,"tz":"Africa/Tunis"},{"iata":"TBN","icao":"KTBN","name":"Waynesville-St. Robert Regional Airport-Forney Field","city":"Fort Leonard Wood","country":"US","lat":37.7416,"lng":-92.140701,"tz":"America/Chicago"},{"iata":"TBP","icao":"SPME","name":"Captain Pedro Canga Rodríguez International Airport","city":"Tumbes","country":"PE","lat":-3.552074,"lng":-80.381086,"tz":"America/Lima"},{"iata":"TBS","icao":"UGTB","name":"Tbilisi International Airport","city":"Tbilisi","country":"GE","lat":41.669201,"lng":44.9547,"tz":"Asia/Tbilisi"},{"iata":"TBT","icao":"SBTT","name":"Tabatinga International Airport","city":"Tabatinga","country":"BR","lat":-4.25567,"lng":-69.935799,"tz":"America/Eirunepe"},{"iata":"TBU","icao":"NFTF","name":"Fua'amotu International Airport","city":"Nuku'alofa","country":"TO","lat":-21.241438,"lng":-175.149164,"tz":"Pacific/Tongatapu"},{"iata":"TBZ","icao":"OITT","name":"Tabriz International Airport","city":"Tabriz","country":"IR","lat":38.1339,"lng":46.235001,"tz":"Asia/Tehran"},{"iata":"TCA","icao":"YTNK","name":"Tennant Creek Airport","city":"Tennant Creek","country":"AU","lat":-19.634399,"lng":134.182999,"tz":"Australia/Darwin"},{"iata":"TCB","icao":"MYAT","name":"Treasure Cay Airport","city":"Treasure Cay","country":"BS","lat":26.7453,"lng":-77.391296,"tz":"America/Nassau"},{"iata":"TCO","icao":"SKCO","name":"La Florida Airport","city":"Tumaco","country":"CO","lat":1.81442,"lng":-78.7492,"tz":"America/Bogota"},{"iata":"TCP","icao":"HETB","name":"Taba International Airport","city":"Taba","country":"EG","lat":29.594496,"lng":34.775752,"tz":"Asia/Amman"},{"iata":"TCQ","icao":"SPTN","name":"Coronel FAP Carlos Ciriani Santa Rosa International Airport","city":"Tacna","country":"PE","lat":-18.053301,"lng":-70.275803,"tz":"America/Lima"},{"iata":"TCZ","icao":"ZPTC","name":"Tengchong Tuofeng Airport","city":"Baoshan (Tengchong)","country":"CN","lat":24.938056,"lng":98.485833,"tz":"Asia/Shanghai"},{"iata":"TDD","icao":"SLTR","name":"Teniente Av. Jorge Henrich Arauz Airport","city":"Trinidad","country":"BO","lat":-14.8187,"lng":-64.917999,"tz":"America/La_Paz"},{"iata":"TDK","icao":"UAAT","name":"Taldykorgan Airport","city":"Taldykorgan","country":"KZ","lat":45.12255,"lng":78.442758,"tz":"Asia/Almaty"},{"iata":"TDX","icao":"VTBO","name":"Trat Airport","city":"Laem Ngop","country":"TH","lat":12.2746,"lng":102.319,"tz":"Asia/Bangkok"},{"iata":"TEB","icao":"KTEB","name":"Teterboro Airport","city":"Teterboro","country":"US","lat":40.850101,"lng":-74.060799,"tz":"America/New_York"},{"iata":"TEE","icao":"DABS","name":"Cheikh Larbi Tébessi Airport","city":"Tébessi","country":"DZ","lat":35.431599,"lng":8.12072,"tz":"Africa/Algiers"},{"iata":"TEN","icao":"ZUTR","name":"Tongren Fenghuang Airport","city":"Tongren (Daxing)","country":"CN","lat":27.883333,"lng":109.308889,"tz":"Asia/Shanghai"},{"iata":"TEQ","icao":"LTBU","name":"Tekirdağ Çorlu Airport","city":"Çorlu","country":"TR","lat":41.138199,"lng":27.9191,"tz":"Europe/Istanbul"},{"iata":"TER","icao":"LPLA","name":"Lajes Airport","city":"Praia da Vitória","country":"PT","lat":38.761799,"lng":-27.090799,"tz":"Atlantic/Azores"},{"iata":"TET","icao":"FQTT","name":"Tete Airport","city":"Tete","country":"MZ","lat":-16.104799,"lng":33.640202,"tz":"Africa/Maputo"},{"iata":"TEX","icao":"KTEX","name":"Telluride Regional Airport","city":"Telluride","country":"US","lat":37.9538,"lng":-107.907997,"tz":"America/Denver"},{"iata":"TEZ","icao":"VETZ","name":"Tezpur Airport","city":"","country":"IN","lat":26.709101,"lng":92.784698,"tz":"Asia/Kolkata"},{"iata":"TFF","icao":"SBTF","name":"Tefé Airport","city":"Tefé","country":"BR","lat":-3.38294,"lng":-64.724098,"tz":"America/Manaus"},{"iata":"TFN","icao":"GCXO","name":"Tenerife Norte-Ciudad de La Laguna Airport","city":"Tenerife","country":"ES","lat":28.482752,"lng":-16.341707,"tz":"Atlantic/Canary"},{"iata":"TFS","icao":"GCTS","name":"Tenerife Sur Airport","city":"Tenerife","country":"ES","lat":28.0445,"lng":-16.5725,"tz":"Atlantic/Canary"},{"iata":"TFU","icao":"ZUTF","name":"Chengdu Tianfu International Airport","city":"Chengdu (Jianyang)","country":"CN","lat":30.31252,"lng":104.441284,"tz":"Asia/Shanghai"},{"iata":"TGD","icao":"LYPG","name":"Podgorica Airport / Podgorica Golubovci Airbase","city":"Podgorica","country":"ME","lat":42.359402,"lng":19.2519,"tz":"Europe/Podgorica"},{"iata":"TGG","icao":"WMKN","name":"Sultan Mahmud Airport","city":"Kuala Terengganu","country":"MY","lat":5.38264,"lng":103.102997,"tz":"Asia/Kuala_Lumpur"},{"iata":"TGJ","icao":"NWWA","name":"Tiga Airport","city":"Tiga","country":"NC","lat":-21.096407,"lng":167.80379,"tz":"Pacific/Noumea"},{"iata":"TGK","icao":"URRT","name":"Taganrog Yuzhny Airport","city":"Taganrog","country":"RU","lat":47.198333,"lng":38.849167,"tz":"Europe/Moscow"},{"iata":"TGM","icao":"LRTM","name":"Târgu Mureş Transilvania International Airport","city":"Recea","country":"RO","lat":46.467701,"lng":24.4125,"tz":"Europe/Bucharest"},{"iata":"TGO","icao":"ZBTL","name":"Tongliao Airport","city":"Tongliao","country":"CN","lat":43.556702,"lng":122.199997,"tz":"Asia/Shanghai"},{"iata":"TGR","icao":"DAUK","name":"Touggourt Sidi Madhi Airport","city":"Touggourt","country":"DZ","lat":33.067799,"lng":6.08867,"tz":"Africa/Algiers"},{"iata":"TGT","icao":"HTTG","name":"Tanga Airport","city":"Tanga","country":"TZ","lat":-5.09236,"lng":39.071201,"tz":"Africa/Dar_es_Salaam"},{"iata":"TGU","icao":"MHTG","name":"Toncontín Airport","city":"Tegucigalpa","country":"HN","lat":14.0609,"lng":-87.217201,"tz":"America/Tegucigalpa"},{"iata":"TGZ","icao":"MMTG","name":"Angel Albino Corzo International Airport","city":"Tuxtla Gutiérrez","country":"MX","lat":16.561611,"lng":-93.025731,"tz":"America/Mexico_City"},{"iata":"THE","icao":"SBTE","name":"Senador Petrônio Portela Airport","city":"Teresina","country":"BR","lat":-5.06025,"lng":-42.823712,"tz":"America/Fortaleza"},{"iata":"THG","icao":"YTNG","name":"Thangool Airport","city":"Biloela","country":"AU","lat":-24.494863,"lng":150.577967,"tz":"Australia/Brisbane"},{"iata":"THL","icao":"VYTL","name":"Tachileik Airport","city":"Tachileik","country":"MM","lat":20.483801,"lng":99.935402,"tz":"Asia/Yangon"},{"iata":"THN","icao":"ESGT","name":"Trollhättan-Vänersborg Airport","city":"Trollhättan","country":"SE","lat":58.3181,"lng":12.345,"tz":"Europe/Stockholm"},{"iata":"THQ","icao":"ZLTS","name":"Tianshui Maijishan Airport","city":"Tianshui (Maiji)","country":"CN","lat":34.5601,"lng":105.860343,"tz":"Asia/Shanghai"},{"iata":"THR","icao":"OIII","name":"Mehrabad International Airport","city":"Tehran","country":"IR","lat":35.689175,"lng":51.314392,"tz":"Asia/Tehran"},{"iata":"THS","icao":"VTPO","name":"Sukhothai Airport","city":"","country":"TH","lat":17.238001,"lng":99.818199,"tz":"Asia/Bangkok"},{"iata":"THU","icao":"BGTL","name":"Pituffik Space Base","city":"Pituffik","country":"GL","lat":76.53063,"lng":-68.700541,"tz":"America/Thule"},{"iata":"TIA","icao":"LATI","name":"Tirana International Airport Mother Teresa","city":"Rinas","country":"AL","lat":41.4147,"lng":19.7206,"tz":"Europe/Tirane"},{"iata":"TIF","icao":"OETF","name":"Taif International Airport","city":"Taif","country":"SA","lat":21.484739,"lng":40.544074,"tz":"Asia/Riyadh"},{"iata":"TIH","icao":"NTGC","name":"Tikehau Airport","city":"Tuherahera","country":"PF","lat":-15.1196,"lng":-148.231003,"tz":"Pacific/Tahiti"},{"iata":"TIJ","icao":"MMTJ","name":"General Abelardo L. Rodriguez International Airport","city":"Tijuana","country":"MX","lat":32.541043,"lng":-116.969976,"tz":"America/Tijuana"},{"iata":"TIM","icao":null,"name":"Mozes Kilangin Airport","city":"Timika","country":"ID","lat":-4.52978,"lng":136.887388,"tz":"Asia/Jayapura"},{"iata":"TIN","icao":"DAOF","name":"Tindouf Airport","city":"Tindouf","country":"DZ","lat":27.700399,"lng":-8.1671,"tz":"Africa/Algiers"},{"iata":"TIQ","icao":"PGWT","name":"Tinian International Airport","city":"Tinian Island","country":"MP","lat":15.000453,"lng":145.618974,"tz":"Pacific/Saipan"},{"iata":"TIR","icao":"VOTP","name":"Tirupati International Airport","city":"Tirupati","country":"IN","lat":13.631988,"lng":79.539869,"tz":"Asia/Kolkata"},{"iata":"TIU","icao":"NZTU","name":"Timaru Airport","city":"","country":"NZ","lat":-44.302799,"lng":171.225006,"tz":"Pacific/Auckland"},{"iata":"TIV","icao":"LYTV","name":"Tivat Airport","city":"Tivat","country":"ME","lat":42.404701,"lng":18.723301,"tz":"Europe/Podgorica"},{"iata":"TIW","icao":"KTIW","name":"Tacoma Narrows Airport","city":"Tacoma","country":"US","lat":47.267407,"lng":-122.577295,"tz":"America/Los_Angeles"},{"iata":"TJA","icao":"SLTJ","name":"Capitan Oriel Lea Plaza Airport","city":"Tarija","country":"BO","lat":-21.5557,"lng":-64.701302,"tz":"America/La_Paz"},{"iata":"TJG","icao":"WAON","name":"Warukin Airport","city":"Tanta-Tabalong","country":"ID","lat":-2.21656,"lng":115.435997,"tz":"Asia/Makassar"},{"iata":"TJH","icao":"RJBT","name":"Konotori Tajima Airport","city":"Toyooka","country":"JP","lat":35.512798,"lng":134.787003,"tz":"Asia/Tokyo"},{"iata":"TJK","icao":"LTAW","name":"Tokat Airport","city":"Tokat","country":"TR","lat":40.32472,"lng":36.39056,"tz":"Europe/Istanbul"},{"iata":"TJM","icao":"USTR","name":"Roshchino International Airport","city":"Tyumen","country":"RU","lat":57.178984,"lng":65.327696,"tz":"Asia/Yekaterinburg"},{"iata":"TJU","icao":"UTDK","name":"Kulob International Airport","city":"Kulob","country":"TJ","lat":37.988098,"lng":69.805,"tz":"Asia/Dushanbe"},{"iata":"TKD","icao":"DGTK","name":"Takoradi Airport","city":"Sekondi-Takoradi","country":"GH","lat":4.89606,"lng":-1.77476,"tz":"Africa/Accra"},{"iata":"TKF","icao":"KTRK","name":"Truckee Tahoe Airport","city":"Truckee","country":"US","lat":39.318628,"lng":-120.140562,"tz":"America/Los_Angeles"},{"iata":"TKG","icao":"WILL","name":"Radin Inten II International Airport","city":"Bandar Lampung","country":"ID","lat":-5.246803,"lng":105.182531,"tz":"Asia/Jakarta"},{"iata":"TKK","icao":"PTKK","name":"Chuuk International Airport","city":"Weno Island","country":"FM","lat":7.46187,"lng":151.843002,"tz":"Pacific/Chuuk"},{"iata":"TKN","icao":"RJKN","name":"Tokunoshima Airport","city":"Amagi","country":"JP","lat":27.836382,"lng":128.881356,"tz":"Asia/Tokyo"},{"iata":"TKP","icao":"NTGT","name":"Takapoto Airport","city":"","country":"PF","lat":-14.7095,"lng":-145.246002,"tz":"Pacific/Tahiti"},{"iata":"TKS","icao":"RJOS","name":"Tokushima Awaodori Airport / JMSDF Tokushima Air Base","city":"Tokushima","country":"JP","lat":34.132559,"lng":134.607816,"tz":"Asia/Tokyo"},{"iata":"TKU","icao":"EFTU","name":"Turku Airport","city":"Turku","country":"FI","lat":60.514099,"lng":22.2628,"tz":"Europe/Helsinki"},{"iata":"TKX","icao":"NTKR","name":"Takaroa Airport","city":"","country":"PF","lat":-14.4558,"lng":-145.024994,"tz":"Pacific/Tahiti"},{"iata":"TLC","icao":"MMTO","name":"Adolfo López Mateos International Airport","city":"Toluca","country":"MX","lat":19.3369,"lng":-99.56583,"tz":"America/Mexico_City"},{"iata":"TLE","icao":"FMST","name":"Toliara Airport","city":"Toliara","country":"MG","lat":-23.3834,"lng":43.7285,"tz":"Indian/Antananarivo"},{"iata":"TLH","icao":"KTLH","name":"Tallahassee International Airport","city":"Tallahassee","country":"US","lat":30.401209,"lng":-84.35433,"tz":"America/New_York"},{"iata":"TLL","icao":"EETN","name":"Lennart Meri Tallinn Airport","city":"Tallinn","country":"EE","lat":59.413246,"lng":24.83264,"tz":"Europe/Tallinn"},{"iata":"TLM","icao":"DAON","name":"Zenata – Messali El Hadj Airport","city":"Zenata","country":"DZ","lat":35.012732,"lng":-1.457117,"tz":"Africa/Algiers"},{"iata":"TLN","icao":"LFTH","name":"Toulon-Hyères Airport","city":"Hyères, Var","country":"FR","lat":43.097301,"lng":6.14603,"tz":"Europe/Paris"},{"iata":"TLQ","icao":"ZWTL","name":"Turpan Jiaohe Airport","city":"Turpan","country":"CN","lat":43.0308,"lng":89.0987,"tz":"Asia/Urumqi"},{"iata":"TLS","icao":"LFBO","name":"Toulouse-Blagnac Airport","city":"Toulouse/Blagnac","country":"FR","lat":43.629101,"lng":1.36382,"tz":"Europe/Paris"},{"iata":"TLV","icao":"LLBG","name":"Ben Gurion International Airport","city":"Tel Aviv","country":"IL","lat":32.011398,"lng":34.8867,"tz":"Asia/Jerusalem"},{"iata":"TME","icao":"SKTM","name":"Gustavo Vargas Airport","city":"Tame","country":"CO","lat":6.45108,"lng":-71.7603,"tz":"America/Bogota"},{"iata":"TMH","icao":"WAKT","name":"Tanah Merah Airport","city":"Tanah Merah","country":"ID","lat":-6.09669,"lng":140.303521,"tz":"Asia/Jayapura"},{"iata":"TMJ","icao":"UZST","name":"Termez Airport","city":"Termez","country":"UZ","lat":37.287261,"lng":67.311869,"tz":"Asia/Samarkand"},{"iata":"TML","icao":"DGLE","name":"Yakubu Tali International Airport","city":"Tamale","country":"GH","lat":9.553909,"lng":-0.86606,"tz":"Africa/Accra"},{"iata":"TMM","icao":"FMMT","name":"Toamasina Ambalamanasy Airport","city":"Toamasina","country":"MG","lat":-18.113537,"lng":49.392262,"tz":"Indian/Antananarivo"},{"iata":"TMP","icao":"EFTP","name":"Tampere-Pirkkala Airport","city":"Tampere / Pirkkala","country":"FI","lat":61.414101,"lng":23.604401,"tz":"Europe/Helsinki"},{"iata":"TMR","icao":"DAAT","name":"Aguenar – Hadj Bey Akhamok Airport","city":"Tamanrasset","country":"DZ","lat":22.810992,"lng":5.450832,"tz":"Africa/Algiers"},{"iata":"TMS","icao":"FPST","name":"São Tomé International Airport","city":"São Tomé","country":"ST","lat":0.378175,"lng":6.71215,"tz":"Africa/Sao_Tome"},{"iata":"TMT","icao":"SBTB","name":"Trombetas Airport","city":"Oriximiná","country":"BR","lat":-1.4896,"lng":-56.396801,"tz":"America/Santarem"},{"iata":"TMW","icao":"YSTW","name":"Tamworth Airport","city":"Tamworth","country":"AU","lat":-31.077898,"lng":150.845484,"tz":"Australia/Sydney"},{"iata":"TMX","icao":"DAUT","name":"Timimoun Airport","city":"Timimoun","country":"DZ","lat":29.237101,"lng":0.276033,"tz":"Africa/Algiers"},{"iata":"TNA","icao":"ZSJN","name":"Jinan Yaoqiang International Airport","city":"Jinan (Licheng)","country":"CN","lat":36.857201,"lng":117.216003,"tz":"Asia/Shanghai"},{"iata":"TND","icao":"MUTD","name":"Alberto Delgado Airport","city":"Trinidad","country":"CU","lat":21.7883,"lng":-79.9972,"tz":"America/Havana"},{"iata":"TNE","icao":"RJFG","name":"New Tanegashima Airport","city":"Tanegashima","country":"JP","lat":30.605101,"lng":130.990997,"tz":"Asia/Tokyo"},{"iata":"TNG","icao":"GMTT","name":"Tangier Ibn Battuta Airport","city":"Tangier","country":"MA","lat":35.731741,"lng":-5.921459,"tz":"Africa/Casablanca"},{"iata":"TNH","icao":"ZYTN","name":"Tonghua Sanyuanpu Airport","city":"Tonghua","country":"CN","lat":42.048435,"lng":125.733963,"tz":"Asia/Shanghai"},{"iata":"TNJ","icao":"WIDN","name":"Raja Haji Fisabilillah International Airport","city":"Tanjung Pinang-Bintan Island","country":"ID","lat":0.92397,"lng":104.53341,"tz":"Asia/Jakarta"},{"iata":"TNN","icao":"RCNN","name":"Tainan International Airport / Tainan Air Base","city":"Tainan (Rende)","country":"TW","lat":22.950399,"lng":120.206001,"tz":"Asia/Taipei"},{"iata":"TNR","icao":"FMMI","name":"Ivato International Airport","city":"Antananarivo","country":"MG","lat":-18.7969,"lng":47.478802,"tz":"Indian/Antananarivo"},{"iata":"TOD","icao":"WMBT","name":"Tioman Airport","city":"Tioman Island","country":"MY","lat":2.81818,"lng":104.160004,"tz":"Asia/Kuala_Lumpur"},{"iata":"TOE","icao":"DTTZ","name":"Tozeur Nefta International Airport","city":"Tozeur","country":"TN","lat":33.939701,"lng":8.11056,"tz":"Africa/Tunis"},{"iata":"TOF","icao":"UNTT","name":"Tomsk Kamov Airport","city":"Tomsk","country":"RU","lat":56.380299,"lng":85.208298,"tz":"Asia/Tomsk"},{"iata":"TOL","icao":"KTOL","name":"Eugene F. Kranz Toledo Express Airport","city":"Toledo","country":"US","lat":41.5868,"lng":-83.8078,"tz":"America/New_York"},{"iata":"TOM","icao":"GATB","name":"Tombouktou Airport","city":"Timbuktu","country":"ML","lat":16.730499,"lng":-3.00758,"tz":"Africa/Bamako"},{"iata":"TOS","icao":"ENTC","name":"Tromsø Airport","city":"Tromsø","country":"NO","lat":69.683296,"lng":18.9189,"tz":"Europe/Oslo"},{"iata":"TOU","icao":"NWWU","name":"Touho Airport","city":"Touho","country":"NC","lat":-20.790127,"lng":165.259524,"tz":"Pacific/Noumea"},{"iata":"TOY","icao":"RJNT","name":"Toyama Kitokito Airport","city":"Toyama","country":"JP","lat":36.648416,"lng":137.187359,"tz":"Asia/Tokyo"},{"iata":"TPA","icao":"KTPA","name":"Tampa International Airport","city":"Tampa","country":"US","lat":27.9755,"lng":-82.533203,"tz":"America/New_York"},{"iata":"TPE","icao":"RCTP","name":"Taiwan Taoyuan International Airport","city":"Taoyuan","country":"TW","lat":25.0777,"lng":121.233002,"tz":"Asia/Taipei"},{"iata":"TPJ","icao":"VNTJ","name":"Taplejung Airport","city":"Taplejung","country":"NP","lat":27.3509,"lng":87.69525,"tz":"Asia/Kathmandu"},{"iata":"TPP","icao":"SPST","name":"Cadete FAP Guillermo Del Castillo Paredes Airport","city":"Tarapoto","country":"PE","lat":-6.50874,"lng":-76.373199,"tz":"America/Lima"},{"iata":"TPQ","icao":"MMEP","name":"Amado Nervo National Airport","city":"Tepic","country":"MX","lat":21.419833,"lng":-104.842472,"tz":"America/Mazatlan"},{"iata":"TPS","icao":"LICT","name":"Vincenzo Florio Airport Trapani-Birgi","city":"Trapani (TP)","country":"IT","lat":37.9114,"lng":12.488,"tz":"Europe/Rome"},{"iata":"TQO","icao":"MMTL","name":"Felipe Carrillo Puerto International Airport Tulum","city":"Tulum","country":"MX","lat":20.172098,"lng":-87.660272,"tz":"America/Cancun"},{"iata":"TRA","icao":"RORT","name":"Tarama Airport","city":"Tarama","country":"JP","lat":24.653793,"lng":124.675453,"tz":"Asia/Tokyo"},{"iata":"TRC","icao":"MMTC","name":"Francisco Sarabia Tinoco International Airport","city":"Torreón","country":"MX","lat":25.562265,"lng":-103.404608,"tz":"America/Monterrey"},{"iata":"TRD","icao":"ENVA","name":"Trondheim Airport, Værnes","city":"Trondheim","country":"NO","lat":63.457802,"lng":10.924,"tz":"Europe/Oslo"},{"iata":"TRE","icao":"EGPU","name":"Tiree Airport","city":"Balemartine, Argyll and Bute","country":"GB","lat":56.499199,"lng":-6.86917,"tz":"Europe/London"},{"iata":"TRF","icao":"ENTO","name":"Sandefjord Airport, Torp","city":"Sandefjord(Torp)","country":"NO","lat":59.186699,"lng":10.2586,"tz":"Europe/Oslo"},{"iata":"TRG","icao":"NZTG","name":"Tauranga Airport","city":"Tauranga","country":"NZ","lat":-37.671902,"lng":176.195999,"tz":"Pacific/Auckland"},{"iata":"TRI","icao":"KTRI","name":"Tri-Cities Regional TN/VA Airport","city":"Blountville","country":"US","lat":36.475201,"lng":-82.407401,"tz":"America/New_York"},{"iata":"TRK","icao":"WAQQ","name":"Juwata International Airport / Suharnoko Harbani AFB","city":"Tarakan","country":"ID","lat":3.325145,"lng":117.564169,"tz":"Asia/Makassar"},{"iata":"TRN","icao":"LIMF","name":"Turin Airport","city":"Caselle Torinese (TO)","country":"IT","lat":45.200802,"lng":7.64963,"tz":"Europe/Rome"},{"iata":"TRR","icao":"VCCT","name":"China Bay Airport","city":"Trincomalee","country":"LK","lat":8.539159,"lng":81.18128,"tz":"Asia/Colombo"},{"iata":"TRS","icao":"LIPQ","name":"Trieste Airport","city":"Ronchi dei Legionari/Trieste","country":"IT","lat":45.827499,"lng":13.4722,"tz":"Europe/Rome"},{"iata":"TRT","icao":"WAFB","name":"Toraja Airport","city":"Toraja","country":"ID","lat":-3.185833,"lng":119.91775,"tz":"Asia/Makassar"},{"iata":"TRU","icao":"SPRU","name":"Capitán FAP Carlos Martínez de Pinillos International Airport","city":"Trujillo","country":"PE","lat":-8.082382,"lng":-79.108821,"tz":"America/Lima"},{"iata":"TRV","icao":"VOTV","name":"Thiruvananthapuram International Airport","city":"Thiruvananthapuram","country":"IN","lat":8.481889,"lng":76.920029,"tz":"Asia/Kolkata"},{"iata":"TRW","icao":"NGTA","name":"Bonriki International Airport","city":"South Tarawa","country":"KI","lat":1.38164,"lng":173.147003,"tz":"Pacific/Tarawa"},{"iata":"TRZ","icao":"VOTR","name":"Tiruchirappalli International Airport","city":"Tiruchirappalli","country":"IN","lat":10.762915,"lng":78.717741,"tz":"Asia/Kolkata"},{"iata":"TSA","icao":"RCSS","name":"Taipei Songshan International Airport","city":"Taipei (Songshan)","country":"TW","lat":25.067244,"lng":121.552822,"tz":"Asia/Taipei"},{"iata":"TSF","icao":"LIPH","name":"Treviso Airport","city":"Treviso (TV)","country":"IT","lat":45.648399,"lng":12.1944,"tz":"Europe/Rome"},{"iata":"TSJ","icao":"RJDT","name":"Tsushima Airport","city":"Tsushima","country":"JP","lat":34.284901,"lng":129.330994,"tz":"Asia/Tokyo"},{"iata":"TSM","icao":"KSKX","name":"Taos Regional Airport","city":"Taos","country":"US","lat":36.452494,"lng":-105.67749,"tz":"America/Denver"},{"iata":"TSN","icao":"ZBTJ","name":"Tianjin Binhai International Airport","city":"Tianjin","country":"CN","lat":39.124401,"lng":117.346001,"tz":"Asia/Shanghai"},{"iata":"TSR","icao":"LRTR","name":"Timișoara Traian Vuia International Airport","city":"Timişoara","country":"RO","lat":45.809898,"lng":21.3379,"tz":"Europe/Bucharest"},{"iata":"TST","icao":"VTST","name":"Trang Airport","city":"Trang","country":"TH","lat":7.50874,"lng":99.6166,"tz":"Asia/Bangkok"},{"iata":"TSV","icao":"YBTL","name":"Townsville Airport / RAAF Base Townsville","city":"Townsville","country":"AU","lat":-19.252904,"lng":146.766512,"tz":"Australia/Brisbane"},{"iata":"TTA","icao":"GMAT","name":"Tan Tan Airport","city":"Tan Tan","country":"MA","lat":28.447563,"lng":-11.161749,"tz":"Africa/Casablanca"},{"iata":"TTE","icao":"WAEE","name":"Sultan Babullah Airport","city":"Ternate","country":"ID","lat":0.831012,"lng":127.381611,"tz":"Asia/Jayapura"},{"iata":"TTJ","icao":"RJOR","name":"Tottori Sand Dunes Conan Airport","city":"Tottori","country":"JP","lat":35.530058,"lng":134.165023,"tz":"Asia/Tokyo"},{"iata":"TTN","icao":"KTTN","name":"Trenton Mercer Airport","city":"Ewing Township","country":"US","lat":40.276699,"lng":-74.813499,"tz":"America/New_York"},{"iata":"TTT","icao":"RCFN","name":"Taitung Airport","city":"Taitung City","country":"TW","lat":22.754999,"lng":121.101997,"tz":"Asia/Taipei"},{"iata":"TTU","icao":"GMTN","name":"Sania Ramel Airport","city":"Tétouan","country":"MA","lat":35.594299,"lng":-5.32002,"tz":"Africa/Casablanca"},{"iata":"TUA","icao":"SETU","name":"Lieutenant Colonel Luis A. Mantilla International Airport","city":"Tulcán","country":"EC","lat":0.809506,"lng":-77.708099,"tz":"America/Bogota"},{"iata":"TUB","icao":"NTAT","name":"Tubuai Airport","city":"","country":"PF","lat":-23.3654,"lng":-149.524002,"tz":"Pacific/Tahiti"},{"iata":"TUC","icao":"SANT","name":"Teniente Benjamín Matienzo International Airport","city":"San Miguel de Tucumán","country":"AR","lat":-26.837397,"lng":-65.104195,"tz":"America/Argentina/Tucuman"},{"iata":"TUF","icao":"LFOT","name":"Tours Val de Loire Airport","city":"Tours, Indre-et-Loire","country":"FR","lat":47.432201,"lng":0.727606,"tz":"Europe/Paris"},{"iata":"TUG","icao":"RPUT","name":"Tuguegarao Airport","city":"Tuguegarao City","country":"PH","lat":17.643368,"lng":121.73315,"tz":"Asia/Manila"},{"iata":"TUI","icao":"OETR","name":"Turaif Domestic Airport","city":"Turaif","country":"SA","lat":31.692188,"lng":38.731544,"tz":"Asia/Riyadh"},{"iata":"TUK","icao":"OPTU","name":"Turbat International Airport","city":"Turbat","country":"PK","lat":25.984767,"lng":63.028856,"tz":"Asia/Karachi"},{"iata":"TUL","icao":"KTUL","name":"Tulsa International Airport","city":"Tulsa","country":"US","lat":36.197084,"lng":-95.886225,"tz":"America/Chicago"},{"iata":"TUN","icao":"DTTA","name":"Tunis Carthage International Airport","city":"Tunis","country":"TN","lat":36.851002,"lng":10.2272,"tz":"Africa/Tunis"},{"iata":"TUO","icao":"NZAP","name":"Taupo Airport","city":"Taupo","country":"NZ","lat":-38.7397,"lng":176.084,"tz":"Pacific/Auckland"},{"iata":"TUP","icao":"KTUP","name":"Tupelo Regional Airport","city":"Tupelo","country":"US","lat":34.268101,"lng":-88.769897,"tz":"America/Chicago"},{"iata":"TUR","icao":"SBTU","name":"Tucuruí Airport","city":"Tucuruí","country":"BR","lat":-3.78601,"lng":-49.720299,"tz":"America/Belem"},{"iata":"TUS","icao":"KTUS","name":"Tucson International Airport","city":"Tucson","country":"US","lat":32.115004,"lng":-110.938053,"tz":"America/Phoenix"},{"iata":"TUU","icao":"OETB","name":"Prince Sultan bin Abdulaziz International Airport","city":"Tabuk","country":"SA","lat":28.3711,"lng":36.624865,"tz":"Asia/Riyadh"},{"iata":"TVC","icao":"KTVC","name":"Cherry Capital Airport","city":"Traverse City","country":"US","lat":44.741402,"lng":-85.582199,"tz":"America/Detroit"},{"iata":"TVF","icao":"KTVF","name":"Thief River Falls Regional Airport","city":"Thief River Falls","country":"US","lat":48.065701,"lng":-96.184998,"tz":"America/Chicago"},{"iata":"TVT","icao":"UZTP","name":"Tashkent-Khumo International Airport","city":"Tashkent","country":"UZ","lat":41.312889,"lng":69.395535,"tz":"Asia/Tashkent"},{"iata":"TVY","icao":"VYDW","name":"Dawei Airport","city":"Dawei","country":"MM","lat":14.1039,"lng":98.203598,"tz":"Asia/Yangon"},{"iata":"TWF","icao":"KTWF","name":"Joslin Field Magic Valley Regional Airport","city":"Twin Falls","country":"US","lat":42.4818,"lng":-114.487999,"tz":"America/Boise"},{"iata":"TWT","icao":"RPMN","name":"Sanga Sanga Airport","city":"Bongao","country":"PH","lat":5.048196,"lng":119.743338,"tz":"Asia/Kuching"},{"iata":"TWU","icao":"WBKW","name":"Tawau Airport","city":"Tawau","country":"MY","lat":4.31338,"lng":118.12152,"tz":"Asia/Kuching"},{"iata":"TXE","icao":"WITK","name":"Rembele Airport","city":"Takengon","country":"ID","lat":4.72113,"lng":96.851943,"tz":"Asia/Jakarta"},{"iata":"TXK","icao":"KTXK","name":"Texarkana Regional Airport (Webb Field)","city":"Texarkana","country":"US","lat":33.453701,"lng":-93.990997,"tz":"America/Chicago"},{"iata":"TXN","icao":"ZSTX","name":"Huangshan Tunxi International Airport","city":"Huangshan","country":"CN","lat":29.733299,"lng":118.255997,"tz":"Asia/Shanghai"},{"iata":"TYF","icao":"ESST","name":"Torsby Airport","city":"Torsby","country":"SE","lat":60.1576,"lng":12.9913,"tz":"Europe/Stockholm"},{"iata":"TYL","icao":"SPYL","name":"Captain Victor Montes Arias International Airport","city":"Talara","country":"PE","lat":-4.57664,"lng":-81.254097,"tz":"America/Lima"},{"iata":"TYN","icao":"ZBYN","name":"Taiyuan Wusu International Airport","city":"Taiyuan","country":"CN","lat":37.746899,"lng":112.627998,"tz":"Asia/Shanghai"},{"iata":"TYR","icao":"KTYR","name":"Tyler Pounds Regional Airport","city":"Tyler","country":"US","lat":32.354099,"lng":-95.402397,"tz":"America/Chicago"},{"iata":"TYS","icao":"KTYS","name":"McGhee Tyson Airport","city":"Knoxville/Maryville","country":"US","lat":35.811001,"lng":-83.994003,"tz":"America/New_York"},{"iata":"TZA","icao":null,"name":"Sir Barry Bowen Municipal Airport","city":"Belize City","country":"BZ","lat":17.517239,"lng":-88.195775,"tz":"America/Belize"},{"iata":"TZL","icao":"LQTZ","name":"Tuzla International Airport","city":"Dubrave Gornje","country":"BA","lat":44.459858,"lng":18.723627,"tz":"Europe/Sarajevo"},{"iata":"TZN","icao":"MYAK","name":"Congo Town Airport","city":"Andros","country":"BS","lat":24.158701,"lng":-77.589798,"tz":"America/Nassau"},{"iata":"TZX","icao":"LTCG","name":"Trabzon International Airport","city":"Trabzon","country":"TR","lat":40.995098,"lng":39.7897,"tz":"Europe/Istanbul"},{"iata":"UAI","icao":"WPDB","name":"Commander in Chief of FALINTIL, Kay Rala Xanana Gusmão, International Airport","city":"Suai","country":"TL","lat":-9.301856,"lng":125.286302,"tz":"Asia/Makassar"},{"iata":"UAK","icao":"BGBW","name":"Narsarsuaq Airport","city":"Narsarsuaq","country":"GL","lat":61.1605,"lng":-45.425999,"tz":"America/Godthab"},{"iata":"UAQ","icao":"SANU","name":"Domingo Faustino Sarmiento Airport","city":"San Juan","country":"AR","lat":-31.571501,"lng":-68.418198,"tz":"America/Argentina/San_Juan"},{"iata":"UBA","icao":"SBUR","name":"Mário de Almeida Franco Airport","city":"Uberaba","country":"BR","lat":-19.765036,"lng":-47.964805,"tz":"America/Sao_Paulo"},{"iata":"UBJ","icao":"RJDC","name":"Yamaguchi Ube Airport","city":"Ube","country":"JP","lat":33.93,"lng":131.279007,"tz":"Asia/Tokyo"},{"iata":"UBN","icao":"ZMCK","name":"Ulaanbaatar Chinggis Khaan International Airport","city":"Ulaanbaatar (Sergelen)","country":"MN","lat":47.646916,"lng":106.819833,"tz":"Asia/Ulaanbaatar"},{"iata":"UBP","icao":"VTUU","name":"Ubon Ratchathani Airport","city":"Ubon Ratchathani","country":"TH","lat":15.2513,"lng":104.870003,"tz":"Asia/Bangkok"},{"iata":"UCB","icao":null,"name":"Ulanqab Jining Airport","city":"Ulanqab","country":"CN","lat":41.130266,"lng":113.107274,"tz":"Asia/Shanghai"},{"iata":"UCT","icao":"UUYH","name":"Ukhta Airport","city":"Ukhta","country":"RU","lat":63.566898,"lng":53.804699,"tz":"Europe/Moscow"},{"iata":"UDI","icao":"SBUL","name":"Ten. Cel. Aviador César Bombonato Airport","city":"Uberlândia","country":"BR","lat":-18.883579,"lng":-48.225936,"tz":"America/Sao_Paulo"},{"iata":"UDJ","icao":"UKLU","name":"Uzhhorod International Airport","city":"Uzhhorod","country":"UA","lat":48.6343,"lng":22.263399,"tz":"Europe/Uzhgorod"},{"iata":"UDR","icao":"VAUD","name":"Maharana Pratap Airport","city":"Udaipur","country":"IN","lat":24.617701,"lng":73.896103,"tz":"Asia/Kolkata"},{"iata":"UEL","icao":"FQQL","name":"Quelimane Airport","city":"Quelimane","country":"MZ","lat":-17.855499,"lng":36.869099,"tz":"Africa/Maputo"},{"iata":"UEO","icao":"ROKJ","name":"Kumejima Airport","city":"Kumejima","country":"JP","lat":26.363445,"lng":126.71384,"tz":"Asia/Tokyo"},{"iata":"UET","icao":"OPQT","name":"Quetta International Airport","city":"Quetta","country":"PK","lat":30.2514,"lng":66.937798,"tz":"Asia/Karachi"},{"iata":"UFA","icao":"UWUU","name":"Ufa International Airport","city":"Ufa","country":"RU","lat":54.557499,"lng":55.874401,"tz":"Asia/Yekaterinburg"},{"iata":"UGA","icao":"ZMBN","name":"Bulgan Airport","city":"Bulgan","country":"MN","lat":48.855,"lng":103.475998,"tz":"Asia/Ulaanbaatar"},{"iata":"UGC","icao":"UZNU","name":"Urgench International Airport","city":"Urgench","country":"UZ","lat":41.58274,"lng":60.64338,"tz":"Asia/Samarkand"},{"iata":"UGU","icao":null,"name":"Bilorai Airport","city":"Bilogai","country":"ID","lat":-3.739503,"lng":137.031183,"tz":"Asia/Jayapura"},{"iata":"UIB","icao":"SKUI","name":"El Caraño Airport","city":"Quibdó","country":"CO","lat":5.69076,"lng":-76.6412,"tz":"America/Bogota"},{"iata":"UIH","icao":"VVPC","name":"Phu Cat Airport","city":"Quy Nohn","country":"VN","lat":13.955,"lng":109.042,"tz":"Asia/Ho_Chi_Minh"},{"iata":"UIN","icao":"KUIN","name":"Quincy Regional Airport Baldwin Field","city":"Quincy","country":"US","lat":39.942699,"lng":-91.194603,"tz":"America/Chicago"},{"iata":"UIO","icao":"SEQM","name":"Mariscal Sucre International Airport","city":"Quito","country":"EC","lat":-0.125399,"lng":-78.354306,"tz":"America/Guayaquil"},{"iata":"UKB","icao":"RJBE","name":"Kobe Airport","city":"Kobe","country":"JP","lat":34.632801,"lng":135.223999,"tz":"Asia/Tokyo"},{"iata":"UKK","icao":"UASK","name":"Oskemen International Airport","city":"Ust-Kamenogorsk (Oskemen)","country":"KZ","lat":50.035033,"lng":82.496057,"tz":"Asia/Almaty"},{"iata":"UKX","icao":"UITT","name":"Ust-Kut Airport","city":"Ust-Kut","country":"RU","lat":56.856701,"lng":105.730003,"tz":"Asia/Irkutsk"},{"iata":"ULG","icao":"ZMUL","name":"Ölgii Mongolei International Airport","city":"Ölgii","country":"MN","lat":48.993301,"lng":89.922501,"tz":"Asia/Barnaul"},{"iata":"ULH","icao":"OEAO","name":"Al-Ula International Airport","city":"Al-Ula","country":"SA","lat":26.483634,"lng":38.117048,"tz":"Asia/Riyadh"},{"iata":"ULK","icao":"UERL","name":"Lensk Airport","city":"Lensk","country":"RU","lat":60.7206,"lng":114.825996,"tz":"Asia/Yakutsk"},{"iata":"ULO","icao":"ZMUG","name":"Ulaangom Airport","city":"Ulaangom","country":"MN","lat":50.066588,"lng":91.938273,"tz":"Asia/Hovd"},{"iata":"ULP","icao":"YQLP","name":"Quilpie Airport","city":"","country":"AU","lat":-26.609176,"lng":144.253746,"tz":"Australia/Brisbane"},{"iata":"ULU","icao":"HUGU","name":"Gulu Airport","city":"Gulu","country":"UG","lat":2.80556,"lng":32.271801,"tz":"Africa/Kampala"},{"iata":"ULV","icao":"UWLL","name":"Ulyanovsk Baratayevka Airport","city":"Ulyanovsk","country":"RU","lat":54.268299,"lng":48.2267,"tz":"Europe/Ulyanovsk"},{"iata":"ULY","icao":"UWLW","name":"Ulyanovsk Vostochny Airport","city":"Cherdakly","country":"RU","lat":54.401001,"lng":48.8027,"tz":"Europe/Moscow"},{"iata":"UME","icao":"ESNU","name":"Umeå Airport","city":"Umeå","country":"SE","lat":63.791801,"lng":20.282801,"tz":"Europe/Stockholm"},{"iata":"UNI","icao":"TVSU","name":"Union Island International Airport","city":"Union Island","country":"VC","lat":12.600135,"lng":-61.411945,"tz":"America/Grenada"},{"iata":"UNK","icao":"PAUN","name":"Unalakleet Airport","city":"Unalakleet","country":"US","lat":63.888401,"lng":-160.798996,"tz":"America/Anchorage"},{"iata":"UNN","icao":"VTSR","name":"Ranong Airport","city":"Ranong","country":"TH","lat":9.77762,"lng":98.585503,"tz":"Asia/Bangkok"},{"iata":"UPG","icao":"WAAA","name":"Sultan Hasanuddin International Airport","city":"Makassar","country":"ID","lat":-5.075539,"lng":119.553702,"tz":"Asia/Makassar"},{"iata":"UPN","icao":"MMPN","name":"Uruapan - Licenciado y General Ignacio Lopez Rayon International Airport","city":"Uruapan","country":"MX","lat":19.3967,"lng":-102.039001,"tz":"America/Mexico_City"},{"iata":"URA","icao":"UARR","name":"Manshuk Mametova International Airport","city":"Uralsk","country":"KZ","lat":51.151976,"lng":51.543652,"tz":"Asia/Oral"},{"iata":"URC","icao":"ZWWW","name":"Ürümqi Tianshan International Airport","city":"Ürümqi","country":"CN","lat":43.913584,"lng":87.479372,"tz":"Asia/Urumqi"},{"iata":"URE","icao":"EEKE","name":"Kuressaare Airport","city":"Kuressaare","country":"EE","lat":58.2299,"lng":22.509501,"tz":"Europe/Tallinn"},{"iata":"URG","icao":"SBUG","name":"Rubem Berta Airport","city":"Uruguaiana","country":"BR","lat":-29.7822,"lng":-57.0382,"tz":"America/Sao_Paulo"},{"iata":"URJ","icao":"USHU","name":"Uray Airport","city":"Uray","country":"RU","lat":60.103298,"lng":64.826698,"tz":"Asia/Yekaterinburg"},{"iata":"URS","icao":"UUOK","name":"Kursk East Airport","city":"Kursk","country":"RU","lat":51.750599,"lng":36.295601,"tz":"Europe/Moscow"},{"iata":"URT","icao":"VTSB","name":"Surat Thani Airport","city":"Surat Thani","country":"TH","lat":9.1326,"lng":99.135597,"tz":"Asia/Bangkok"},{"iata":"URY","icao":"OEGT","name":"Gurayat Domestic Airport","city":"Gurayat","country":"SA","lat":31.412413,"lng":37.278898,"tz":"Asia/Amman"},{"iata":"USA","icao":"KJQF","name":"Concord-Padgett Regional Airport","city":"Concord","country":"US","lat":35.387798,"lng":-80.709099,"tz":"America/New_York"},{"iata":"USH","icao":"SAWH","name":"Ushuaia - Malvinas Argentinas International Airport","city":"Ushuaia","country":"AR","lat":-54.8433,"lng":-68.2958,"tz":"America/Punta_Arenas"},{"iata":"USK","icao":"UUYS","name":"Usinsk Airport","city":"Usinsk","country":"RU","lat":66.0047,"lng":57.367199,"tz":"Europe/Moscow"},{"iata":"USM","icao":"VTSM","name":"Samui International Airport","city":"Na Thon (Ko Samui Island)","country":"TH","lat":9.54779,"lng":100.061996,"tz":"Asia/Bangkok"},{"iata":"USN","icao":"RKPU","name":"Ulsan Airport","city":"Ulsan","country":"KR","lat":35.593498,"lng":129.352005,"tz":"Asia/Seoul"},{"iata":"USR","icao":"UEMT","name":"Ust-Nera Airport","city":"Ust-Nera","country":"RU","lat":64.550003,"lng":143.115005,"tz":"Asia/Ust-Nera"},{"iata":"UST","icao":"KSGJ","name":"Northeast Florida Regional Airport","city":"St Augustine","country":"US","lat":29.9592,"lng":-81.339798,"tz":"America/New_York"},{"iata":"USU","icao":"RPVV","name":"Francisco B. Reyes (Busuanga) Airport","city":"Coron","country":"PH","lat":12.121865,"lng":120.100801,"tz":"Asia/Manila"},{"iata":"UTH","icao":"VTUD","name":"Udon Thani International Airport","city":"Udon Thani","country":"TH","lat":17.386186,"lng":102.788577,"tz":"Asia/Bangkok"},{"iata":"UTN","icao":"FAUP","name":"Upington Airport","city":"Upington","country":"ZA","lat":-28.400246,"lng":21.263592,"tz":"Africa/Johannesburg"},{"iata":"UTO","icao":"PAIM","name":"Indian Mountain LRRS Airport","city":"Utopia Creek","country":"US","lat":65.992798,"lng":-153.703995,"tz":"America/Anchorage"},{"iata":"UTP","icao":"VTBU","name":"U-Tapao–Rayong–Pattaya International Airport","city":"Rayong","country":"TH","lat":12.6799,"lng":101.004997,"tz":"Asia/Bangkok"},{"iata":"UTT","icao":"FAUT","name":"K. D. Matanzima Airport","city":"Mthatha","country":"ZA","lat":-31.546363,"lng":28.673355,"tz":"Africa/Johannesburg"},{"iata":"UUA","icao":"UWKB","name":"Bugulma Airport","city":"Bugulma","country":"RU","lat":54.641184,"lng":52.800229,"tz":"Europe/Moscow"},{"iata":"UUD","icao":"UIUU","name":"Baikal International Airport","city":"Ulan Ude","country":"RU","lat":51.808614,"lng":107.439652,"tz":"Asia/Irkutsk"},{"iata":"UUS","icao":"UHSS","name":"Yuzhno-Sakhalinsk International Airport","city":"Yuzhno-Sakhalinsk","country":"RU","lat":46.885461,"lng":142.717466,"tz":"Asia/Sakhalin"},{"iata":"UVE","icao":"NWWV","name":"Ouvéa Airport","city":"Ouvéa","country":"NC","lat":-20.640932,"lng":166.573024,"tz":"Pacific/Noumea"},{"iata":"UVF","icao":"TLPL","name":"Hewanorra International Airport","city":"Vieux Fort","country":"LC","lat":13.7332,"lng":-60.952599,"tz":"America/St_Vincent"},{"iata":"UYL","icao":"HSNN","name":"Nyala Airport","city":"Nyala","country":"SD","lat":12.0535,"lng":24.9562,"tz":"Africa/Khartoum"},{"iata":"UYN","icao":"ZLYL","name":"Yulin Yuyang Airport","city":"Yulin","country":"CN","lat":38.35971,"lng":109.590927,"tz":"Asia/Shanghai"},{"iata":"UYU","icao":"SLUY","name":"Joya Andina International Airport","city":"Quijarro","country":"BO","lat":-20.441304,"lng":-66.857553,"tz":"America/La_Paz"},{"iata":"VAA","icao":"EFVA","name":"Vaasa Airport","city":"Vaasa","country":"FI","lat":63.05023,"lng":21.762543,"tz":"Europe/Helsinki"},{"iata":"VAI","icao":"AYVN","name":"Vanimo Airport","city":"Vanimo","country":"PG","lat":-2.6926,"lng":141.3028,"tz":"Pacific/Port_Moresby"},{"iata":"VAM","icao":"VRMV","name":"Villa International Airport Maamigili","city":"Maamigili","country":"MV","lat":3.471751,"lng":72.832633,"tz":"Indian/Maldives"},{"iata":"VAN","icao":"LTCI","name":"Van Ferit Melen Airport","city":"Van","country":"TR","lat":38.468201,"lng":43.332298,"tz":"Europe/Istanbul"},{"iata":"VAQ","icao":null,"name":"Vanavara Airport","city":"Vanavara","country":"RU","lat":60.356229,"lng":102.309641,"tz":"Asia/Krasnoyarsk"},{"iata":"VAR","icao":"LBWN","name":"Varna Airport","city":"Varna","country":"BG","lat":43.232101,"lng":27.8251,"tz":"Europe/Sofia"},{"iata":"VAV","icao":"NFTV","name":"Vava'u International Airport","city":"Vava'u Island","country":"TO","lat":-18.5853,"lng":-173.962006,"tz":"Pacific/Tongatapu"},{"iata":"VAW","icao":"ENSS","name":"Vardø Airport, Svartnes","city":"Vardø","country":"NO","lat":70.3554,"lng":31.044901,"tz":"Europe/Oslo"},{"iata":"VBS","icao":"LIPO","name":"Brescia Gabriele d'Annunzio Airport","city":"Montichiari (BS)","country":"IT","lat":45.428902,"lng":10.3306,"tz":"Europe/Rome"},{"iata":"VBY","icao":"ESSV","name":"Visby Airport","city":"Visby","country":"SE","lat":57.6628,"lng":18.346201,"tz":"Europe/Stockholm"},{"iata":"VCA","icao":"VVCT","name":"Can Tho International Airport","city":"Can Tho","country":"VN","lat":10.083397,"lng":105.709371,"tz":"Asia/Ho_Chi_Minh"},{"iata":"VCE","icao":"LIPZ","name":"Venice Marco Polo Airport","city":"Venezia (VE)","country":"IT","lat":45.505299,"lng":12.3519,"tz":"Europe/Rome"},{"iata":"VCP","icao":"SBKP","name":"Viracopos International Airport","city":"Campinas","country":"BR","lat":-23.007404,"lng":-47.134502,"tz":"America/Sao_Paulo"},{"iata":"VCS","icao":"VVCS","name":"Con Dao Airport","city":"Con Dao","country":"VN","lat":8.73183,"lng":106.633003,"tz":"Asia/Ho_Chi_Minh"},{"iata":"VCT","icao":"KVCT","name":"Victoria Regional Airport","city":"Victoria","country":"US","lat":28.8526,"lng":-96.918503,"tz":"America/Chicago"},{"iata":"VDC","icao":"SBVC","name":"Glauber de Andrade Rocha Airport","city":"Vitória da Conquista","country":"BR","lat":-14.907885,"lng":-40.914804,"tz":"America/Bahia"},{"iata":"VDE","icao":"GCHI","name":"El Hierro Airport","city":"El Hierro Island","country":"ES","lat":27.8148,"lng":-17.8871,"tz":"Atlantic/Canary"},{"iata":"VDH","icao":"VVDH","name":"Dong Hoi Airport","city":"Dong Hoi","country":"VN","lat":17.515,"lng":106.590556,"tz":"Asia/Bangkok"},{"iata":"VDM","icao":"SAVV","name":"Gobernador Castello Airport","city":"Viedma / Carmen de Patagones","country":"AR","lat":-40.8692,"lng":-63.0004,"tz":"America/Argentina/Salta"},{"iata":"VDO","icao":"VVVD","name":"Van Don International Airport","city":"Van Don","country":"VN","lat":21.120693,"lng":107.41539,"tz":"Asia/Bangkok"},{"iata":"VDS","icao":"ENVD","name":"Vadsø Airport","city":"Vadsø","country":"NO","lat":70.0653,"lng":29.8447,"tz":"Europe/Oslo"},{"iata":"VDZ","icao":"PAVD","name":"Valdez Pioneer Field","city":"Valdez","country":"US","lat":61.132712,"lng":-146.246567,"tz":"America/Anchorage"},{"iata":"VEL","icao":"KVEL","name":"Vernal Regional Airport","city":"Vernal","country":"US","lat":40.436214,"lng":-109.511661,"tz":"America/Denver"},{"iata":"VEO","icao":null,"name":"Severo-Yeniseysk Airport","city":"Severo-Yeniseysk","country":"RU","lat":60.373299,"lng":93.011703,"tz":"Asia/Krasnoyarsk"},{"iata":"VER","icao":"MMVR","name":"General Heriberto Jara International Airport","city":"Veracruz","country":"MX","lat":19.139589,"lng":-96.188602,"tz":"America/Mexico_City"},{"iata":"VFA","icao":"FVFA","name":"Victoria Falls International Airport","city":"Victoria Falls","country":"ZW","lat":-18.097437,"lng":25.836867,"tz":"Africa/Harare"},{"iata":"VGA","icao":"VOBZ","name":"Vijayawada International Airport","city":"Vijayawada","country":"IN","lat":16.530011,"lng":80.804888,"tz":"Asia/Kolkata"},{"iata":"VGO","icao":"LEVX","name":"Vigo Airport","city":"Vigo","country":"ES","lat":42.2318,"lng":-8.62677,"tz":"Europe/Madrid"},{"iata":"VHM","icao":"ESNV","name":"Vilhelmina South Lapland Airport","city":"Vilhelmina","country":"SE","lat":64.579102,"lng":16.833599,"tz":"Europe/Stockholm"},{"iata":"VIE","icao":"LOWW","name":"Vienna International Airport","city":"Vienna","country":"AT","lat":48.110298,"lng":16.5697,"tz":"Europe/Vienna"},{"iata":"VIG","icao":"SVVG","name":"Juan Pablo Pérez Alfonso Airport","city":"El Vigía","country":"VE","lat":8.624139,"lng":-71.672668,"tz":"America/Caracas"},{"iata":"VII","icao":"VVVH","name":"Vinh Airport","city":"Vinh","country":"VN","lat":18.7376,"lng":105.670998,"tz":"Asia/Bangkok"},{"iata":"VIJ","icao":"TUPW","name":"Virgin Gorda Airport","city":"Spanish Town","country":"VG","lat":18.446634,"lng":-64.427932,"tz":"America/Tortola"},{"iata":"VIL","icao":"GMMH","name":"Dakhla Airport","city":"Dakhla","country":"EH","lat":23.7183,"lng":-15.932,"tz":"Africa/El_Aaiun"},{"iata":"VIT","icao":"LEVT","name":"Vitoria Airport","city":"Alava","country":"ES","lat":42.882801,"lng":-2.72447,"tz":"Europe/Madrid"},{"iata":"VIX","icao":"SBVT","name":"Eurico de Aguiar Salles International Airport","city":"Vitória","country":"BR","lat":-20.258,"lng":-40.285,"tz":"America/Sao_Paulo"},{"iata":"VKG","icao":"VVRG","name":"Rach Gia Airport","city":"Rach Gia","country":"VN","lat":9.95803,"lng":105.13238,"tz":"Asia/Ho_Chi_Minh"},{"iata":"VKO","icao":"UUWW","name":"Vnukovo International Airport","city":"Moscow","country":"RU","lat":55.591499,"lng":37.261501,"tz":"Europe/Moscow"},{"iata":"VKT","icao":"UUYW","name":"Vorkuta Airport","city":"Vorkuta","country":"RU","lat":67.488602,"lng":63.993099,"tz":"Europe/Moscow"},{"iata":"VLC","icao":"LEVC","name":"Valencia Airport","city":"Valencia","country":"ES","lat":39.489162,"lng":-0.480961,"tz":"Europe/Madrid"},{"iata":"VLD","icao":"KVLD","name":"Valdosta Regional Airport","city":"Valdosta","country":"US","lat":30.782499,"lng":-83.276703,"tz":"America/New_York"},{"iata":"VLI","icao":"NVVV","name":"Bauerfield International Airport","city":"Port Vila","country":"VU","lat":-17.699301,"lng":168.320007,"tz":"Pacific/Efate"},{"iata":"VLL","icao":"LEVD","name":"Valladolid Airport","city":"Valladolid","country":"ES","lat":41.7061,"lng":-4.85194,"tz":"Europe/Madrid"},{"iata":"VLN","icao":"SVVA","name":"Arturo Michelena International Airport","city":"Valencia","country":"VE","lat":10.149733,"lng":-67.928398,"tz":"America/Caracas"},{"iata":"VLV","icao":"SVVL","name":"Dr. Antonio Nicolás Briceño Airport","city":"Valera","country":"VE","lat":9.340478,"lng":-70.584061,"tz":"America/Caracas"},{"iata":"VMU","icao":"AYBA","name":"Baimuru Airport","city":"Baimuru","country":"PG","lat":-7.496955,"lng":144.821756,"tz":"Pacific/Port_Moresby"},{"iata":"VNO","icao":"EYVI","name":"Vilnius International Airport","city":"Vilnius","country":"LT","lat":54.634102,"lng":25.285801,"tz":"Europe/Vilnius"},{"iata":"VNS","icao":"VEBN","name":"Lal Bahadur Shastri International Airport","city":"Varanasi","country":"IN","lat":25.452171,"lng":82.862549,"tz":"Asia/Kolkata"},{"iata":"VNX","icao":"FQVL","name":"Vilankulo Airport","city":"Vilanculo","country":"MZ","lat":-22.0184,"lng":35.313301,"tz":"Africa/Maputo"},{"iata":"VOG","icao":"URWW","name":"Volgograd International Airport","city":"Volgograd","country":"RU","lat":48.78134,"lng":44.339194,"tz":"Europe/Volgograd"},{"iata":"VOL","icao":"LGBL","name":"Nea Anchialos National Airport","city":"Nea Anchialos","country":"GR","lat":39.219601,"lng":22.7943,"tz":"Europe/Athens"},{"iata":"VOZ","icao":"UUOO","name":"Voronezh International Airport","city":"Voronezh","country":"RU","lat":51.813683,"lng":39.231711,"tz":"Europe/Moscow"},{"iata":"VPE","icao":"FNGI","name":"Ngjiva Pereira Airport","city":"Ngiva","country":"AO","lat":-17.043501,"lng":15.6838,"tz":"Africa/Luanda"},{"iata":"VPN","icao":"BIVO","name":"Vopnafjörður Airport","city":"Vopnafjörður","country":"IS","lat":65.720596,"lng":-14.8506,"tz":"Atlantic/Reykjavik"},{"iata":"VPS","icao":"KVPS","name":"Destin-Fort Walton Beach Airport","city":"Valparaiso","country":"US","lat":30.481315,"lng":-86.515839,"tz":"America/Chicago"},{"iata":"VPY","icao":"FQCH","name":"Chimoio Airport","city":"Chimoio","country":"MZ","lat":-19.1513,"lng":33.429001,"tz":"Africa/Maputo"},{"iata":"VQS","icao":"TJVQ","name":"Antonio Rivera Rodriguez Airport","city":"Vieques","country":"PR","lat":18.1348,"lng":-65.493599,"tz":"America/Puerto_Rico"},{"iata":"VRA","icao":"MUVR","name":"Juan Gualberto Gomez International Airport","city":"Matanzas","country":"CU","lat":23.034401,"lng":-81.435303,"tz":"America/Havana"},{"iata":"VRB","icao":"KVRB","name":"Vero Beach Regional Airport","city":"Vero Beach","country":"US","lat":27.6556,"lng":-80.417901,"tz":"America/New_York"},{"iata":"VRC","icao":"RPUV","name":"Virac Airport","city":"Virac","country":"PH","lat":13.5764,"lng":124.206001,"tz":"Asia/Manila"},{"iata":"VRL","icao":"LPVR","name":"Vila Real Airport","city":"Vila Real","country":"PT","lat":41.2743,"lng":-7.72047,"tz":"Europe/Lisbon"},{"iata":"VRN","icao":"LIPX","name":"Verona Villafranca Valerio Catullo Airport","city":"Caselle (VR)","country":"IT","lat":45.394955,"lng":10.887303,"tz":"Europe/Rome"},{"iata":"VSA","icao":"MMVA","name":"Carlos Rovirosa Pérez International Airport","city":"Villahermosa","country":"MX","lat":17.994283,"lng":-92.818199,"tz":"America/Mexico_City"},{"iata":"VSE","icao":"LPVZ","name":"Aerodromo Goncalves Lobato (Viseu Airport)","city":"Viseu","country":"PT","lat":40.725498,"lng":-7.88899,"tz":"Europe/Lisbon"},{"iata":"VST","icao":"ESOW","name":"Stockholm Västerås Airport","city":"Stockholm / Västerås","country":"SE","lat":59.589401,"lng":16.6336,"tz":"Europe/Stockholm"},{"iata":"VTE","icao":"VLVT","name":"Wattay International Airport","city":"Vientiane","country":"LA","lat":17.985052,"lng":102.566692,"tz":"Asia/Vientiane"},{"iata":"VTU","icao":"MUVT","name":"Hermanos Ameijeiras Airport","city":"Las Tunas","country":"CU","lat":20.9876,"lng":-76.935799,"tz":"America/Havana"},{"iata":"VTZ","icao":"VOVZ","name":"Visakhapatnam International Airport","city":"Visakhapatnam","country":"IN","lat":17.723506,"lng":83.227729,"tz":"Asia/Kolkata"},{"iata":"VUP","icao":"SKVP","name":"Alfonso López Pumarejo Airport","city":"Valledupar","country":"CO","lat":10.435,"lng":-73.2495,"tz":"America/Bogota"},{"iata":"VUS","icao":"ULWU","name":"Velikiy Ustyug Airport","city":"Velikiy Ustyug","country":"RU","lat":60.7883,"lng":46.259998,"tz":"Europe/Moscow"},{"iata":"VVC","icao":"SKVV","name":"Vanguardia Airport","city":"Villavicencio","country":"CO","lat":4.16787,"lng":-73.6138,"tz":"America/Bogota"},{"iata":"VVI","icao":"SLVR","name":"Viru Viru International Airport","city":"Santa Cruz","country":"BO","lat":-17.6448,"lng":-63.135399,"tz":"America/La_Paz"},{"iata":"VVO","icao":"UHWW","name":"Vladivostok International Airport","city":"Artyom","country":"RU","lat":43.396256,"lng":132.148155,"tz":"Asia/Vladivostok"},{"iata":"VVZ","icao":"DAAP","name":"Illizi Takhamalt Airport","city":"Illizi","country":"DZ","lat":26.723499,"lng":8.62265,"tz":"Africa/Algiers"},{"iata":"VXC","icao":"FQLC","name":"Lichinga Airport","city":"Lichinga","country":"MZ","lat":-13.274,"lng":35.2663,"tz":"Africa/Maputo"},{"iata":"VXE","icao":"GVSV","name":"Cesaria Evora International Airport","city":"São Pedro","country":"CV","lat":16.833363,"lng":-25.055308,"tz":"Atlantic/Cape_Verde"},{"iata":"VXO","icao":"ESMX","name":"Växjö Kronoberg Airport","city":"Växjö","country":"SE","lat":56.9291,"lng":14.728,"tz":"Europe/Stockholm"},{"iata":"VYI","icao":"UENW","name":"Vilyuisk Airport","city":"Vilyuisk","country":"RU","lat":63.756668,"lng":121.693336,"tz":"Asia/Yakutsk"},{"iata":"WAE","icao":"OEWD","name":"Wadi Al Dawasir Domestic Airport","city":"Wadi Al Dawasir","country":"SA","lat":20.504299,"lng":45.1996,"tz":"Asia/Riyadh"},{"iata":"WAG","icao":"NZWU","name":"Wanganui Airport","city":"Wanganui","country":"NZ","lat":-39.963467,"lng":175.02444,"tz":"Pacific/Auckland"},{"iata":"WAW","icao":"EPWA","name":"Warsaw Chopin Airport","city":"Warsaw","country":"PL","lat":52.165699,"lng":20.9671,"tz":"Europe/Warsaw"},{"iata":"WBM","icao":"AYWD","name":"Wapenamanda Airport","city":"Wapenamanda","country":"PG","lat":-5.635293,"lng":143.892231,"tz":"Pacific/Port_Moresby"},{"iata":"WDH","icao":"FYWH","name":"Hosea Kutako International Airport","city":"Windhoek","country":"NA","lat":-22.4799,"lng":17.4709,"tz":"Africa/Windhoek"},{"iata":"WDS","icao":"ZHSY","name":"Shiyan Wudangshan Airport","city":"Shiyan (Maojian)","country":"CN","lat":32.592889,"lng":110.906296,"tz":"Asia/Shanghai"},{"iata":"WEF","icao":"ZSWF","name":"Weifang Nanyuan Airport","city":"Weifang (Kuiwen)","country":"CN","lat":36.646702,"lng":119.119003,"tz":"Asia/Shanghai"},{"iata":"WEH","icao":"ZSWH","name":"Weihai Dashuibo Airport","city":"Weihai","country":"CN","lat":37.187099,"lng":122.228996,"tz":"Asia/Shanghai"},{"iata":"WEI","icao":"YBWP","name":"Weipa Airport","city":"Weipa","country":"AU","lat":-12.677493,"lng":141.922618,"tz":"Australia/Brisbane"},{"iata":"WGA","icao":"YSWG","name":"Wagga Wagga Airport","city":"Forest Hill","country":"AU","lat":-35.163484,"lng":147.46832,"tz":"Australia/Sydney"},{"iata":"WGE","icao":"YWLG","name":"Walgett Airport","city":"","country":"AU","lat":-30.032801,"lng":148.126007,"tz":"Australia/Sydney"},{"iata":"WGN","icao":"ZGSY","name":"Shaoyang Wugang Airport","city":"Shaoyang (Wugang)","country":"CN","lat":26.806123,"lng":110.641042,"tz":"Asia/Shanghai"},{"iata":"WHA","icao":"ZSWA","name":"Wuhu Xuanzhou Airport","city":"Wuhu","country":"CN","lat":31.1045,"lng":118.66687,"tz":"Asia/Shanghai"},{"iata":"WHK","icao":"NZWK","name":"Whakatāne Airport","city":"Whakatāne","country":"NZ","lat":-37.922224,"lng":176.91696,"tz":"Pacific/Auckland"},{"iata":"WIC","icao":"EGPC","name":"Wick John O'Groats Airport","city":"Wick","country":"GB","lat":58.4589,"lng":-3.09306,"tz":"Europe/London"},{"iata":"WIL","icao":"HKNW","name":"Nairobi Wilson Airport","city":"Nairobi","country":"KE","lat":-1.32172,"lng":36.8148,"tz":"Africa/Nairobi"},{"iata":"WIN","icao":"YWTN","name":"Winton Airport","city":"","country":"AU","lat":-22.3636,"lng":143.085999,"tz":"Australia/Brisbane"},{"iata":"WJR","icao":"HKWJ","name":"Wajir Airport","city":"Wajir","country":"KE","lat":1.73324,"lng":40.091599,"tz":"Africa/Nairobi"},{"iata":"WJU","icao":"RKNW","name":"Wonju Airport / Hoengseong Air Base (K-38/K-46)","city":"Wonju","country":"KR","lat":37.437113,"lng":127.960051,"tz":"Asia/Seoul"},{"iata":"WKA","icao":"NZWF","name":"Wanaka Airport","city":"Wanaka","country":"NZ","lat":-44.722091,"lng":169.246287,"tz":"Pacific/Auckland"},{"iata":"WKJ","icao":"RJCW","name":"Wakkanai Airport","city":"Wakkanai","country":"JP","lat":45.404202,"lng":141.800995,"tz":"Asia/Tokyo"},{"iata":"WKK","icao":null,"name":"Aleknagik / New Airport","city":"Aleknagik","country":"US","lat":59.2826,"lng":-158.617996,"tz":"America/Anchorage"},{"iata":"WLG","icao":"NZWN","name":"Wellington International Airport","city":"Wellington","country":"NZ","lat":-41.326839,"lng":174.806862,"tz":"Pacific/Auckland"},{"iata":"WLS","icao":"NLWW","name":"Hihifo Airport","city":"Wallis Island","country":"WF","lat":-13.239445,"lng":-176.19865,"tz":"Pacific/Wallis"},{"iata":"WMI","icao":"EPMO","name":"Warsaw Modlin Airport","city":"Nowy Dwór Mazowiecki","country":"PL","lat":52.451099,"lng":20.6518,"tz":"Europe/Warsaw"},{"iata":"WMN","icao":"FMNR","name":"Maroantsetra Airport","city":"Maroantsetra","country":"MG","lat":-15.437742,"lng":49.689081,"tz":"Indian/Antananarivo"},{"iata":"WMT","icao":"ZUMT","name":"Zunyi Maotai Airport","city":"Zunyi","country":"CN","lat":27.961837,"lng":106.435416,"tz":"Asia/Shanghai"},{"iata":"WMX","icao":"WAVV","name":"Wamena Airport","city":"Wamena","country":"ID","lat":-4.097324,"lng":138.952417,"tz":"Asia/Jayapura"},{"iata":"WNI","icao":"WAWD","name":"Matahora Airport","city":"Wangi-wangi Island","country":"ID","lat":-5.292123,"lng":123.636233,"tz":"Asia/Makassar"},{"iata":"WNP","icao":"RPUN","name":"Naga Airport","city":"Naga","country":"PH","lat":13.5849,"lng":123.269997,"tz":"Asia/Manila"},{"iata":"WNR","icao":"YWDH","name":"Windorah Airport","city":"Windorah","country":"AU","lat":-25.410641,"lng":142.668428,"tz":"Australia/Brisbane"},{"iata":"WNS","icao":"OPNH","name":"Shaheed Benazirabad Airport","city":"Nawabashah","country":"PK","lat":26.2194,"lng":68.390099,"tz":"Asia/Karachi"},{"iata":"WNZ","icao":"ZSWZ","name":"Wenzhou Longwan International Airport","city":"Wenzhou (Longwan)","country":"CN","lat":27.910572,"lng":120.853465,"tz":"Asia/Shanghai"},{"iata":"WOL","icao":null,"name":"Shellharbour Airport","city":"Albion Park Rail","country":"AU","lat":-34.5611,"lng":150.789001,"tz":"Australia/Sydney"},{"iata":"WOS","icao":"ZKWS","name":"Wonsan Kalma Airport","city":"Wonsan","country":"KP","lat":39.165219,"lng":127.487931,"tz":"Asia/Pyongyang"},{"iata":"WRE","icao":"NZWR","name":"Whangarei Airport","city":"Whangarei","country":"NZ","lat":-35.769253,"lng":174.363713,"tz":"Pacific/Auckland"},{"iata":"WRG","icao":"PAWG","name":"Wrangell Airport","city":"Wrangell","country":"US","lat":56.484299,"lng":-132.369995,"tz":"America/Vancouver"},{"iata":"WRO","icao":"EPWR","name":"Copernicus Wrocław Airport","city":"Wrocław","country":"PL","lat":51.103719,"lng":16.882096,"tz":"Europe/Warsaw"},{"iata":"WSI","icao":"YSWS","name":"(Duplicate)Western Sydney International Airport","city":"Sydney","country":"AU","lat":-33.88806,"lng":150.71472,"tz":"Australia/Sydney"},{"iata":"WST","icao":"KWST","name":"Westerly State Airport","city":"Westerly","country":"US","lat":41.349602,"lng":-71.803398,"tz":"America/New_York"},{"iata":"WSZ","icao":"NZWS","name":"Westport Airport","city":"Westport","country":"NZ","lat":-41.737111,"lng":171.579033,"tz":"Pacific/Auckland"},{"iata":"WTB","icao":"YBWW","name":"Toowoomba Wellcamp Airport","city":"Toowoomba","country":"AU","lat":-27.558332,"lng":151.793335,"tz":"Australia/Brisbane"},{"iata":"WUA","icao":"ZBUH","name":"Wuhai Airport","city":"Wuhai","country":"CN","lat":39.7934,"lng":106.7993,"tz":"Asia/Shanghai"},{"iata":"WUH","icao":"ZHHH","name":"Wuhan Tianhe International Airport","city":"Wuhan (Huangpi)","country":"CN","lat":30.774798,"lng":114.213723,"tz":"Asia/Shanghai"},{"iata":"WUN","icao":"YWLU","name":"Wiluna Airport","city":"","country":"AU","lat":-26.6292,"lng":120.221001,"tz":"Australia/Perth"},{"iata":"WUS","icao":"ZSWY","name":"Nanping Wuyishan Airport","city":"Wuyishan","country":"CN","lat":27.7019,"lng":118.000999,"tz":"Asia/Shanghai"},{"iata":"WUU","icao":null,"name":"Wau Airport","city":"Wau","country":"SS","lat":7.72583,"lng":27.975,"tz":"Africa/Juba"},{"iata":"WUX","icao":"ZSWX","name":"Sunan Shuofang International Airport","city":"Wuxi","country":"CN","lat":31.496952,"lng":120.43038,"tz":"Asia/Shanghai"},{"iata":"WUZ","icao":"ZGWZ","name":"Wuzhou Xijiang Airport","city":"Tangbu","country":"CN","lat":23.40316,"lng":111.09331,"tz":"Asia/Shanghai"},{"iata":"WVB","icao":"FYWB","name":"Walvis Bay International Airport","city":"Walvis Bay(Rooikop)","country":"NA","lat":-22.979332,"lng":14.647102,"tz":"Africa/Windhoek"},{"iata":"WWK","icao":"AYWK","name":"Wewak International Airport","city":"Wewak","country":"PG","lat":-3.58383,"lng":143.669006,"tz":"Pacific/Port_Moresby"},{"iata":"WYA","icao":"YWHA","name":"Whyalla Airport","city":"Whyalla","country":"AU","lat":-33.058899,"lng":137.514008,"tz":"Australia/Adelaide"},{"iata":"WYS","icao":"KWYS","name":"Yellowstone Airport","city":"West Yellowstone","country":"US","lat":44.6884,"lng":-111.117996,"tz":"America/Denver"},{"iata":"XAI","icao":"ZHXY","name":"Xinyang Minggang Airport","city":"Xinyang","country":"CN","lat":32.540819,"lng":114.079141,"tz":"Asia/Shanghai"},{"iata":"XAP","icao":"SBCH","name":"Serafin Enoss Bertaso Airport","city":"Chapecó","country":"BR","lat":-27.134199,"lng":-52.656601,"tz":"America/Sao_Paulo"},{"iata":"XBJ","icao":"OIMB","name":"Birjand International Airport","city":"Birjand","country":"IR","lat":32.896525,"lng":59.281258,"tz":"Asia/Tehran"},{"iata":"XCH","icao":"YPXM","name":"Christmas Island International Airport","city":"Flying Fish Cove","country":"CX","lat":-10.450387,"lng":105.6911,"tz":"Indian/Christmas"},{"iata":"XCR","icao":"LFOK","name":"Chalons Vatry airport","city":"Chalons en Champagne","country":"FR","lat":48.77333,"lng":4.20611,"tz":"Europe/Paris"},{"iata":"XFN","icao":"ZHXF","name":"Xiangyang Liuji Airport","city":"Xiangyang (Xiangzhou)","country":"CN","lat":32.152222,"lng":112.291666,"tz":"Asia/Shanghai"},{"iata":"XIC","icao":"ZUXC","name":"Xichang Qingshan Airport","city":"Liangshan (Xichang)","country":"CN","lat":27.9891,"lng":102.183998,"tz":"Asia/Shanghai"},{"iata":"XIL","icao":"ZBXH","name":"Xilinhot Airport","city":"Xilinhot","country":"CN","lat":43.9156,"lng":115.963997,"tz":"Asia/Shanghai"},{"iata":"XIY","icao":"ZLXY","name":"Xi'an Xianyang International Airport","city":"Xianyang (Weicheng)","country":"CN","lat":34.447102,"lng":108.751999,"tz":"Asia/Shanghai"},{"iata":"XKS","icao":"CYAQ","name":"Kasabonika Airport","city":"Kasabonika","country":"CA","lat":53.5247,"lng":-88.642799,"tz":"America/Toronto"},{"iata":"XMH","icao":"NTGI","name":"Manihi Airport","city":"","country":"PF","lat":-14.4368,"lng":-146.070007,"tz":"Pacific/Tahiti"},{"iata":"XMN","icao":"ZSAM","name":"Xiamen Gaoqi International Airport","city":"Xiamen","country":"CN","lat":24.543889,"lng":118.127454,"tz":"Asia/Shanghai"},{"iata":"XMS","icao":"SEMC","name":"Coronel E Carvajal Airport","city":"Macas","country":"EC","lat":-2.29917,"lng":-78.120796,"tz":"America/Guayaquil"},{"iata":"XNA","icao":"KXNA","name":"Northwest Arkansas National Airport","city":"Fayetteville/Springdale/Rogers","country":"US","lat":36.281898,"lng":-94.306801,"tz":"America/Chicago"},{"iata":"XNN","icao":"ZLXN","name":"Xining Caojiabao International Airport","city":"Haidong (Huzhu Tu Autonomous County)","country":"CN","lat":36.52775,"lng":102.040215,"tz":"Asia/Shanghai"},{"iata":"XPL","icao":"MHPR","name":"Palmerola International Airport","city":"Palmerola","country":"HN","lat":14.3824,"lng":-87.621201,"tz":"America/Tegucigalpa"},{"iata":"XQP","icao":"MRQP","name":"Quepos Managua Airport","city":"Quepos","country":"CR","lat":9.44316,"lng":-84.129799,"tz":"America/Costa_Rica"},{"iata":"XQU","icao":null,"name":"Qualicum Beach Airport","city":"Qualicum Beach","country":"CA","lat":49.337456,"lng":-124.393086,"tz":"America/Vancouver"},{"iata":"XRY","icao":"LEJR","name":"Jerez Airport","city":"Jerez de la Frontera","country":"ES","lat":36.744598,"lng":-6.06011,"tz":"Europe/Madrid"},{"iata":"XSC","icao":"MBSC","name":"South Caicos Airport","city":"South Caicos","country":"TC","lat":21.515699,"lng":-71.528503,"tz":"America/Grand_Turk"},{"iata":"XSP","icao":"WSSL","name":"Seletar Airport","city":"Seletar","country":"SG","lat":1.41555,"lng":103.86673,"tz":"Asia/Singapore"},{"iata":"XTG","icao":"YTGM","name":"Thargomindah Airport","city":"Thargomindah","country":"AU","lat":-27.986368,"lng":143.812065,"tz":"Australia/Brisbane"},{"iata":"XUZ","icao":"ZSXZ","name":"Xuzhou Guanyin International Airport","city":"Xuzhou","country":"CN","lat":34.059056,"lng":117.555278,"tz":"Asia/Shanghai"},{"iata":"XWA","icao":"KXWA","name":"Williston Basin International Airport","city":"Williston","country":"US","lat":48.260863,"lng":-103.75116,"tz":"America/Denver"},{"iata":"YAA","icao":null,"name":"Anahim Lake Airport","city":"Anahim Lake","country":"CA","lat":52.451501,"lng":-125.303776,"tz":"America/Vancouver"},{"iata":"YAG","icao":"CYAG","name":"Fort Frances Municipal Airport","city":"Fort Frances","country":"CA","lat":48.655749,"lng":-93.44349,"tz":"America/Winnipeg"},{"iata":"YAK","icao":"PAYA","name":"Yakutat Airport","city":"Yakutat","country":"US","lat":59.508717,"lng":-139.660435,"tz":"America/Yakutat"},{"iata":"YAM","icao":"CYAM","name":"Sault Ste Marie Airport","city":"Sault Ste Marie","country":"CA","lat":46.483216,"lng":-84.508467,"tz":"America/Detroit"},{"iata":"YAP","icao":"PTYA","name":"Yap International Airport","city":"Yap Island","country":"FM","lat":9.49891,"lng":138.082993,"tz":"Pacific/Chuuk"},{"iata":"YAY","icao":"CYAY","name":"St. Anthony Airport","city":"St. Anthony","country":"CA","lat":51.391909,"lng":-56.08321,"tz":"America/St_Johns"},{"iata":"YAZ","icao":"CYAZ","name":"Tofino / Long Beach Airport","city":"Tofino","country":"CA","lat":49.079833,"lng":-125.775583,"tz":"America/Vancouver"},{"iata":"YBC","icao":"CYBC","name":"Baie-Comeau Airport","city":"Baie-Comeau","country":"CA","lat":49.1325,"lng":-68.204399,"tz":"America/Toronto"},{"iata":"YBG","icao":"CYBG","name":"Saguenay-Bagotville Airport","city":"Saguenay","country":"CA","lat":48.330123,"lng":-70.992012,"tz":"America/Toronto"},{"iata":"YBK","icao":"CYBK","name":"Baker Lake Airport","city":"Baker Lake","country":"CA","lat":64.298897,"lng":-96.077797,"tz":"America/Rankin_Inlet"},{"iata":"YBL","icao":"CYBL","name":"Campbell River Airport","city":"Campbell River","country":"CA","lat":49.950802,"lng":-125.271004,"tz":"America/Vancouver"},{"iata":"YBP","icao":"ZUYB","name":"Yibin Wuliangye Airport","city":"Yibin (Cuiping)","country":"CN","lat":28.858431,"lng":104.526157,"tz":"Asia/Shanghai"},{"iata":"YBR","icao":"CYBR","name":"Brandon Municipal Airport","city":"Brandon","country":"CA","lat":49.91,"lng":-99.951897,"tz":"America/Winnipeg"},{"iata":"YBX","icao":"CYBX","name":"Lourdes-de-Blanc-Sablon Airport","city":"Blanc-Sablon","country":"CA","lat":51.4436,"lng":-57.185299,"tz":"America/St_Johns"},{"iata":"YBY","icao":"CYBF","name":"Bonnyville Airport","city":"Bonnyville","country":"CA","lat":54.304199,"lng":-110.744003,"tz":"America/Edmonton"},{"iata":"YCB","icao":"CYCB","name":"Cambridge Bay Airport","city":"Cambridge Bay","country":"CA","lat":69.108101,"lng":-105.138,"tz":"America/Cambridge_Bay"},{"iata":"YCD","icao":"CYCD","name":"Nanaimo Airport","city":"Nanaimo","country":"CA","lat":49.05497,"lng":-123.869863,"tz":"America/Vancouver"},{"iata":"YCG","icao":"CYCG","name":"Castlegar/West Kootenay Regional Airport","city":"Castlegar","country":"CA","lat":49.296398,"lng":-117.632004,"tz":"America/Vancouver"},{"iata":"YCL","icao":"CYCL","name":"Charlo Airport","city":"Charlo","country":"CA","lat":47.990799,"lng":-66.330299,"tz":"America/Toronto"},{"iata":"YCM","icao":"CYSN","name":"Niagara District Airport","city":"Niagara-on-the-Lake","country":"CA","lat":43.191598,"lng":-79.171686,"tz":"America/Toronto"},{"iata":"YCU","icao":"ZBYC","name":"Yuncheng Yanhu International Airport","city":"Yuncheng (Yanhu)","country":"CN","lat":35.117823,"lng":111.034023,"tz":"Asia/Shanghai"},{"iata":"YDA","icao":"CYDA","name":"Dawson City Airport","city":"Dawson City","country":"CA","lat":64.043098,"lng":-139.128006,"tz":"America/Whitehorse"},{"iata":"YDF","icao":"CYDF","name":"Deer Lake Airport","city":"Deer Lake","country":"CA","lat":49.208159,"lng":-57.396147,"tz":"America/St_Johns"},{"iata":"YDN","icao":"CYDN","name":"Dauphin Barker Airport","city":"Dauphin","country":"CA","lat":51.1008,"lng":-100.052002,"tz":"America/Winnipeg"},{"iata":"YEG","icao":"CYEG","name":"Edmonton International Airport","city":"Edmonton","country":"CA","lat":53.3097,"lng":-113.580002,"tz":"America/Edmonton"},{"iata":"YEI","icao":"LTBR","name":"Bursa Yenişehir Airport","city":"Yenişehir","country":"TR","lat":40.255199,"lng":29.562599,"tz":"Europe/Istanbul"},{"iata":"YEV","icao":"CYEV","name":"Inuvik Mike Zubko Airport","city":"Inuvik","country":"CA","lat":68.304199,"lng":-133.483002,"tz":"America/Yellowknife"},{"iata":"YFB","icao":"CYFB","name":"Iqaluit Airport","city":"Iqaluit","country":"CA","lat":63.756402,"lng":-68.555801,"tz":"America/Iqaluit"},{"iata":"YFC","icao":"CYFC","name":"Fredericton International Airport","city":"Fredericton","country":"CA","lat":45.868697,"lng":-66.529891,"tz":"America/Moncton"},{"iata":"YFS","icao":"CYFS","name":"Fort Simpson Airport","city":"Fort Simpson","country":"CA","lat":61.760201,"lng":-121.237,"tz":"America/Yellowknife"},{"iata":"YGJ","icao":"RJOH","name":"Yonago Kitaro Airport / JASDF Miho Air Base","city":"Yonago","country":"JP","lat":35.492199,"lng":133.235992,"tz":"Asia/Tokyo"},{"iata":"YGL","icao":"CYGL","name":"La Grande Rivière Airport","city":"La Grande Rivière","country":"CA","lat":53.625301,"lng":-77.704201,"tz":"America/Toronto"},{"iata":"YGP","icao":"CYGP","name":"Michel-Pouliot Gaspé Airport","city":"Gaspé","country":"CA","lat":48.774915,"lng":-64.481893,"tz":"America/Toronto"},{"iata":"YGR","icao":"CYGR","name":"Îles-de-la-Madeleine Airport","city":"Les Îles-de-la-Madeleine","country":"CA","lat":47.425242,"lng":-61.778612,"tz":"America/Halifax"},{"iata":"YGV","icao":"CYGV","name":"Havre-Saint-Pierre Airport","city":"Havre-Saint-Pierre","country":"CA","lat":50.281898,"lng":-63.611401,"tz":"America/Toronto"},{"iata":"YGW","icao":"CYGW","name":"Kuujjuarapik Airport","city":"Kuujjuarapik","country":"CA","lat":55.281898,"lng":-77.765297,"tz":"America/Toronto"},{"iata":"YHM","icao":"CYHM","name":"John C. Munro Hamilton International Airport","city":"Hamilton","country":"CA","lat":43.17348,"lng":-79.931185,"tz":"America/Toronto"},{"iata":"YHU","icao":"CYHU","name":"Montréal / Saint-Hubert Metropolitan Airport","city":"Montréal","country":"CA","lat":45.517502,"lng":-73.416901,"tz":"America/Toronto"},{"iata":"YHY","icao":"CYHY","name":"Hay River / Merlyn Carter Airport","city":"Hay River","country":"CA","lat":60.839699,"lng":-115.782997,"tz":"America/Yellowknife"},{"iata":"YHZ","icao":"CYHZ","name":"Halifax / Stanfield International Airport","city":"Halifax","country":"CA","lat":44.880798,"lng":-63.508598,"tz":"America/Halifax"},{"iata":"YIA","icao":"WAHI","name":"Yogyakarta International Airport","city":"Yogyakarta","country":"ID","lat":-7.905338,"lng":110.057264,"tz":"Asia/Jakarta"},{"iata":"YIC","icao":"ZSYC","name":"Yichun Mingyueshan Airport","city":"Yichun","country":"CN","lat":27.8025,"lng":114.3062,"tz":"Asia/Shanghai"},{"iata":"YIE","icao":"ZBES","name":"Arxan Yi'ershi Airport","city":"Arxan","country":"CN","lat":47.3106,"lng":119.9117,"tz":"Asia/Shanghai"},{"iata":"YIF","icao":"CYIF","name":"St Augustin Airport","city":"St-Augustin","country":"CA","lat":51.2117,"lng":-58.658298,"tz":"America/Blanc-Sablon"},{"iata":"YIH","icao":"ZHYC","name":"Yichang Sanxia Airport","city":"Yichang (Xiaoting)","country":"CN","lat":30.554132,"lng":111.482563,"tz":"Asia/Shanghai"},{"iata":"YIN","icao":"ZWYN","name":"Ili Yining International Airport","city":"Ili (Yining / Ghulja)","country":"CN","lat":43.955799,"lng":81.330299,"tz":"Asia/Urumqi"},{"iata":"YIV","icao":"CYIV","name":"Island Lake Airport","city":"Island Lake","country":"CA","lat":53.857201,"lng":-94.653603,"tz":"America/Winnipeg"},{"iata":"YIW","icao":"ZSYW","name":"Yiwu Airport","city":"Yiwu/Jinhua","country":"CN","lat":29.342095,"lng":120.03116,"tz":"Asia/Shanghai"},{"iata":"YJT","icao":"CYJT","name":"Stephenville Dymond International Airport","city":"Stephenville","country":"CA","lat":48.54339,"lng":-58.552892,"tz":"America/St_Johns"},{"iata":"YKA","icao":"CYKA","name":"Kamloops John Moose Fulton Field Regional Airport","city":"Kamloops","country":"CA","lat":50.703038,"lng":-120.448641,"tz":"America/Vancouver"},{"iata":"YKF","icao":"CYKF","name":"Region of Waterloo International Airport","city":"Breslau","country":"CA","lat":43.4608,"lng":-80.378601,"tz":"America/Toronto"},{"iata":"YKH","icao":"ZYYK","name":"Yingkou Lanqi Airport","city":"Yingkou (Laobian)","country":"CN","lat":40.542524,"lng":122.3586,"tz":"Asia/Shanghai"},{"iata":"YKL","icao":"CYKL","name":"Schefferville Airport","city":"Schefferville","country":"CA","lat":54.805302,"lng":-66.805298,"tz":"America/Toronto"},{"iata":"YKM","icao":"KYKM","name":"Yakima Air Terminal McAllister Field","city":"Yakima","country":"US","lat":46.568199,"lng":-120.543999,"tz":"America/Los_Angeles"},{"iata":"YKO","icao":"LTCW","name":"Hakkari Yüksekova Airport","city":"Hakkari","country":"TR","lat":37.5497,"lng":44.2381,"tz":"Europe/Istanbul"},{"iata":"YKS","icao":"UEEE","name":"Platon Oyunsky Yakutsk International Airport","city":"Yakutsk","country":"RU","lat":62.0933,"lng":129.770996,"tz":"Asia/Yakutsk"},{"iata":"YLK","icao":"CYLS","name":"Barrie-Lake Simcoe Regional Airport","city":"Barrie","country":"CA","lat":44.485056,"lng":-79.554663,"tz":"America/Toronto"},{"iata":"YLL","icao":"CYLL","name":"Lloydminster Airport","city":"Lloydminster","country":"CA","lat":53.3092,"lng":-110.072998,"tz":"America/Edmonton"},{"iata":"YLW","icao":"CYLW","name":"Kelowna International Airport","city":"Kelowna","country":"CA","lat":49.9561,"lng":-119.377998,"tz":"America/Vancouver"},{"iata":"YLX","icao":"ZGYL","name":"Yulin Fumian Airport","city":"Yulin","country":"CN","lat":22.433042,"lng":110.119996,"tz":"Asia/Shanghai"},{"iata":"YMM","icao":"CYMM","name":"Fort McMurray International Airport","city":"Fort McMurray","country":"CA","lat":56.653301,"lng":-111.222,"tz":"America/Edmonton"},{"iata":"YMO","icao":"CYMO","name":"Moosonee Airport","city":"Moosonee","country":"CA","lat":51.2911,"lng":-80.607803,"tz":"America/Iqaluit"},{"iata":"YMS","icao":"SPMS","name":"Moises Benzaquen Rengifo Airport","city":"Yurimaguas","country":"PE","lat":-5.89377,"lng":-76.118202,"tz":"America/Lima"},{"iata":"YMT","icao":"CYMT","name":"Chapais Airport","city":"Chibougamau","country":"CA","lat":49.7719,"lng":-74.528099,"tz":"America/Toronto"},{"iata":"YMX","icao":"CYMX","name":"Montreal Mirabel International Airport","city":"Montréal","country":"CA","lat":45.679501,"lng":-74.038696,"tz":"America/Toronto"},{"iata":"YNA","icao":"CYNA","name":"Natashquan Airport","city":"Natashquan","country":"CA","lat":50.190114,"lng":-61.78898,"tz":"America/Blanc-Sablon"},{"iata":"YNB","icao":"OEYN","name":"Prince Abdulmohsen Bin Abdulaziz International Airport","city":"Yanbu","country":"SA","lat":24.144199,"lng":38.0634,"tz":"Asia/Riyadh"},{"iata":"YND","icao":"CYND","name":"Ottawa / Gatineau Airport","city":"Gatineau","country":"CA","lat":45.521702,"lng":-75.563599,"tz":"America/Toronto"},{"iata":"YNJ","icao":"ZYYJ","name":"Yanji Chaoyangchuan Airport","city":"Yanji","country":"CN","lat":42.882801,"lng":129.451004,"tz":"Asia/Shanghai"},{"iata":"YNL","icao":"CYNL","name":"Points North Landing Airport","city":"Points North Landing","country":"CA","lat":58.276699,"lng":-104.082001,"tz":"America/Regina"},{"iata":"YNT","icao":"ZSYT","name":"Yantai Penglai International Airport","city":"Yantai","country":"CN","lat":37.659724,"lng":120.978124,"tz":"Asia/Shanghai"},{"iata":"YNY","icao":"RKNY","name":"Yangyang International Airport","city":"Gonghang-ro","country":"KR","lat":38.060481,"lng":128.669822,"tz":"Asia/Seoul"},{"iata":"YNZ","icao":"ZSYN","name":"Yancheng Nanyang International Airport","city":"Yancheng (Tinghu)","country":"CN","lat":33.428317,"lng":120.20545,"tz":"Asia/Shanghai"},{"iata":"YOJ","icao":"CYOJ","name":"High Level Airport","city":"High Level","country":"CA","lat":58.621399,"lng":-117.165001,"tz":"America/Edmonton"},{"iata":"YOL","icao":"DNYO","name":"Yola Airport","city":"Yola","country":"NG","lat":9.25755,"lng":12.4304,"tz":"Africa/Lagos"},{"iata":"YOW","icao":"CYOW","name":"Ottawa Macdonald-Cartier International Airport","city":"Ottawa","country":"CA","lat":45.322498,"lng":-75.669197,"tz":"America/Toronto"},{"iata":"YPA","icao":"CYPA","name":"Prince Albert Glass Field","city":"Prince Albert","country":"CA","lat":53.214199,"lng":-105.672997,"tz":"America/Regina"},{"iata":"YPE","icao":"CYPE","name":"Peace River Airport","city":"Peace River","country":"CA","lat":56.226898,"lng":-117.446999,"tz":"America/Edmonton"},{"iata":"YPL","icao":"CYPL","name":"Pickle Lake Airport","city":"Pickle Lake","country":"CA","lat":51.4464,"lng":-90.214203,"tz":"America/Winnipeg"},{"iata":"YPN","icao":"CYPN","name":"Port-Menier Airport","city":"Port-Menier","country":"CA","lat":49.836399,"lng":-64.288597,"tz":"America/Toronto"},{"iata":"YPQ","icao":"CYPQ","name":"Peterborough Regional Airport","city":"Peterborough","country":"CA","lat":44.232251,"lng":-78.362053,"tz":"America/Toronto"},{"iata":"YPR","icao":"CYPR","name":"Prince Rupert Airport","city":"Prince Rupert","country":"CA","lat":54.286098,"lng":-130.445007,"tz":"America/Vancouver"},{"iata":"YPW","icao":"CYPW","name":"Powell River Airport","city":"Powell River","country":"CA","lat":49.834202,"lng":-124.5,"tz":"America/Vancouver"},{"iata":"YPX","icao":"CYPX","name":"Puvirnituq Airport","city":"Puvirnituq","country":"CA","lat":60.050598,"lng":-77.286903,"tz":"America/Iqaluit"},{"iata":"YPY","icao":"CYPY","name":"Fort Chipewyan Airport","city":"Fort Chipewyan","country":"CA","lat":58.7672,"lng":-111.116997,"tz":"America/Edmonton"},{"iata":"YPZ","icao":"CYPZ","name":"Burns Lake Airport","city":"Burns Lake","country":"CA","lat":54.3764,"lng":-125.950996,"tz":"America/Vancouver"},{"iata":"YQA","icao":"CYQA","name":"Muskoka Airport","city":"Gravenhurst","country":"CA","lat":44.975376,"lng":-79.306546,"tz":"America/Toronto"},{"iata":"YQB","icao":"CYQB","name":"Quebec Jean Lesage International Airport","city":"Quebec","country":"CA","lat":46.7911,"lng":-71.393303,"tz":"America/Toronto"},{"iata":"YQD","icao":"CYQD","name":"The Pas Airport","city":"The Pas","country":"CA","lat":53.971401,"lng":-101.091003,"tz":"America/Winnipeg"},{"iata":"YQG","icao":"CYQG","name":"Windsor International Airport","city":"Windsor","country":"CA","lat":42.2756,"lng":-82.955597,"tz":"America/Toronto"},{"iata":"YQH","icao":"CYQH","name":"Watson Lake Airport","city":"Watson Lake","country":"CA","lat":60.116839,"lng":-128.821993,"tz":"America/Whitehorse"},{"iata":"YQK","icao":"CYQK","name":"Kenora Airport","city":"Kenora","country":"CA","lat":49.7883,"lng":-94.363098,"tz":"America/Winnipeg"},{"iata":"YQL","icao":"CYQL","name":"Lethbridge County Airport","city":"Lethbridge","country":"CA","lat":49.630299,"lng":-112.800003,"tz":"America/Edmonton"},{"iata":"YQM","icao":"CYQM","name":"Greater Moncton Roméo LeBlanc International Airport","city":"Moncton","country":"CA","lat":46.113189,"lng":-64.67719,"tz":"America/Halifax"},{"iata":"YQN","icao":"CYQN","name":"Nakina Airport","city":"Nakina","country":"CA","lat":50.1828,"lng":-86.696404,"tz":"America/Toronto"},{"iata":"YQQ","icao":"CYQQ","name":"Comox Valley International Airport / CFB Comox","city":"Comox","country":"CA","lat":49.7108,"lng":-124.887001,"tz":"America/Vancouver"},{"iata":"YQR","icao":"CYQR","name":"Regina International Airport","city":"Regina","country":"CA","lat":50.431938,"lng":-104.660906,"tz":"America/Regina"},{"iata":"YQT","icao":"CYQT","name":"Thunder Bay International Airport","city":"Thunder Bay","country":"CA","lat":48.371899,"lng":-89.323898,"tz":"America/Thunder_Bay"},{"iata":"YQU","icao":"CYQU","name":"Grande Prairie Airport","city":"Grande Prairie","country":"CA","lat":55.179699,"lng":-118.885002,"tz":"America/Edmonton"},{"iata":"YQX","icao":"CYQX","name":"Gander International Airport","city":"Gander","country":"CA","lat":48.936258,"lng":-54.567719,"tz":"America/St_Johns"},{"iata":"YQY","icao":"CYQY","name":"Sydney / J.A. Douglas McCurdy Airport","city":"Sydney","country":"CA","lat":46.161072,"lng":-60.049759,"tz":"America/Glace_Bay"},{"iata":"YQZ","icao":"CYQZ","name":"Quesnel Airport","city":"Quesnel","country":"CA","lat":53.0261,"lng":-122.510002,"tz":"America/Vancouver"},{"iata":"YRB","icao":"CYRB","name":"Resolute Bay Airport","city":"Resolute Bay","country":"CA","lat":74.716904,"lng":-94.969398,"tz":"America/Rankin_Inlet"},{"iata":"YRJ","icao":"CYRJ","name":"Roberval Airport","city":"Roberval","country":"CA","lat":48.519665,"lng":-72.265735,"tz":"America/Toronto"},{"iata":"YRL","icao":"CYRL","name":"Red Lake Airport","city":"Red Lake","country":"CA","lat":51.066898,"lng":-93.793098,"tz":"America/Winnipeg"},{"iata":"YRO","icao":"CYRO","name":"Ottawa / Rockcliffe Airport","city":"Ottawa","country":"CA","lat":45.460496,"lng":-75.644001,"tz":"America/Toronto"},{"iata":"YRT","icao":"CYRT","name":"Rankin Inlet Airport","city":"Rankin Inlet","country":"CA","lat":62.811401,"lng":-92.115799,"tz":"America/Rankin_Inlet"},{"iata":"YSB","icao":"CYSB","name":"Sudbury Airport","city":"Sudbury","country":"CA","lat":46.625,"lng":-80.798897,"tz":"America/Toronto"},{"iata":"YSF","icao":"CYSF","name":"Stony Rapids Airport","city":"Stony Rapids","country":"CA","lat":59.250301,"lng":-105.841003,"tz":"America/Regina"},{"iata":"YSJ","icao":"CYSJ","name":"Saint John Airport","city":"Saint John","country":"CA","lat":45.316101,"lng":-65.890297,"tz":"America/Moncton"},{"iata":"YSL","icao":"CYSL","name":"Saint-Léonard Airport","city":"Saint-Léonard","country":"CA","lat":47.157097,"lng":-67.836242,"tz":"America/Moncton"},{"iata":"YSM","icao":"CYSM","name":"Fort Smith Airport","city":"Fort Smith","country":"CA","lat":60.020302,"lng":-111.961998,"tz":"America/Yellowknife"},{"iata":"YSQ","icao":"ZYSQ","name":"Songyuan Chaganhu Airport","city":"Qian Gorlos Mongol Autonomous County","country":"CN","lat":44.931143,"lng":124.552121,"tz":"Asia/Shanghai"},{"iata":"YTH","icao":"CYTH","name":"Thompson Airport","city":"Thompson","country":"CA","lat":55.801102,"lng":-97.864197,"tz":"America/Winnipeg"},{"iata":"YTS","icao":"CYTS","name":"Timmins/Victor M. Power","city":"Timmins","country":"CA","lat":48.569698,"lng":-81.376701,"tz":"America/Toronto"},{"iata":"YTY","icao":"ZSYA","name":"Yangzhou Taizhou Airport","city":"Yangzhou","country":"CN","lat":32.5634,"lng":119.7198,"tz":"Asia/Shanghai"},{"iata":"YTZ","icao":"CYTZ","name":"Billy Bishop Toronto City Airport","city":"Toronto","country":"CA","lat":43.627852,"lng":-79.39553,"tz":"America/Toronto"},{"iata":"YUL","icao":"CYUL","name":"Montreal / Pierre Elliott Trudeau International Airport","city":"Montréal","country":"CA","lat":45.467837,"lng":-73.742294,"tz":"America/Toronto"},{"iata":"YUM","icao":"KNYL","name":"Yuma International Airport / Marine Corps Air Station Yuma","city":"Yuma","country":"US","lat":32.650938,"lng":-114.609375,"tz":"America/Phoenix"},{"iata":"YUS","icao":"ZLYS","name":"Yushu Batang Airport","city":"Yushu (Batang)","country":"CN","lat":32.836389,"lng":97.036389,"tz":"Asia/Shanghai"},{"iata":"YUX","icao":"CYUX","name":"Hall Beach Airport","city":"Sanirajak","country":"CA","lat":68.7761,"lng":-81.2425,"tz":"America/Iqaluit"},{"iata":"YUY","icao":"CYUY","name":"Rouyn Noranda Airport","city":"Rouyn-Noranda","country":"CA","lat":48.2061,"lng":-78.835602,"tz":"America/Toronto"},{"iata":"YVB","icao":"CYVB","name":"Bonaventure Airport","city":"Bonaventure","country":"CA","lat":48.071098,"lng":-65.460297,"tz":"America/Moncton"},{"iata":"YVC","icao":"CYVC","name":"La Ronge Airport","city":"La Ronge","country":"CA","lat":55.151402,"lng":-105.262001,"tz":"America/Regina"},{"iata":"YVO","icao":"CYVO","name":"Val-d'Or Airport","city":"Val-d'Or","country":"CA","lat":48.053299,"lng":-77.782799,"tz":"America/Toronto"},{"iata":"YVP","icao":"CYVP","name":"Kuujjuaq Airport","city":"Kuujjuaq","country":"CA","lat":58.0961,"lng":-68.426903,"tz":"America/Toronto"},{"iata":"YVQ","icao":"CYVQ","name":"Norman Wells Airport","city":"Norman Wells","country":"CA","lat":65.281601,"lng":-126.797997,"tz":"America/Yellowknife"},{"iata":"YVR","icao":"CYVR","name":"Vancouver International Airport","city":"Vancouver","country":"CA","lat":49.193901,"lng":-123.183998,"tz":"America/Vancouver"},{"iata":"YVV","icao":"CYVV","name":"Wiarton Airport","city":"Wiarton","country":"CA","lat":44.7458,"lng":-81.107201,"tz":"America/Toronto"},{"iata":"YWG","icao":"CYWG","name":"Winnipeg / James Armstrong Richardson International Airport","city":"Winnipeg","country":"CA","lat":49.91,"lng":-97.239899,"tz":"America/Winnipeg"},{"iata":"YWK","icao":"CYWK","name":"Wabush Airport","city":"Wabush","country":"CA","lat":52.921902,"lng":-66.864403,"tz":"America/Goose_Bay"},{"iata":"YWL","icao":"CYWL","name":"Williams Lake Airport","city":"Williams Lake","country":"CA","lat":52.183102,"lng":-122.054001,"tz":"America/Vancouver"},{"iata":"YXC","icao":"CYXC","name":"Cranbrook/Canadian Rockies International Airport","city":"Cranbrook","country":"CA","lat":49.610802,"lng":-115.781998,"tz":"America/Edmonton"},{"iata":"YXE","icao":"CYXE","name":"Saskatoon John G. Diefenbaker International Airport","city":"Saskatoon","country":"CA","lat":52.170723,"lng":-106.700793,"tz":"America/Regina"},{"iata":"YXH","icao":"CYXH","name":"Medicine Hat Regional Airport","city":"Medicine Hat","country":"CA","lat":50.018902,"lng":-110.721001,"tz":"America/Edmonton"},{"iata":"YXJ","icao":"CYXJ","name":"Fort St John / North Peace Regional Airport","city":"Fort Saint John","country":"CA","lat":56.238098,"lng":-120.739998,"tz":"America/Dawson_Creek"},{"iata":"YXK","icao":"CYXK","name":"Rimouski Airport","city":"Rimouski","country":"CA","lat":48.477644,"lng":-68.496323,"tz":"America/Toronto"},{"iata":"YXL","icao":"CYXL","name":"Sioux Lookout Airport","city":"Sioux Lookout","country":"CA","lat":50.113899,"lng":-91.905296,"tz":"America/Winnipeg"},{"iata":"YXS","icao":"CYXS","name":"Prince George (International) Airport","city":"Prince George","country":"CA","lat":53.884311,"lng":-122.666554,"tz":"America/Vancouver"},{"iata":"YXT","icao":"CYXT","name":"Northwest Regional Airport Terrace-Kitimat","city":"Terrace","country":"CA","lat":54.468498,"lng":-128.576009,"tz":"America/Vancouver"},{"iata":"YXU","icao":"CYXU","name":"London International Airport","city":"London","country":"CA","lat":43.032845,"lng":-81.149003,"tz":"America/Toronto"},{"iata":"YXX","icao":"CYXX","name":"Abbotsford International Airport","city":"Abbotsford","country":"CA","lat":49.025299,"lng":-122.361,"tz":"America/Vancouver"},{"iata":"YXY","icao":"CYXY","name":"Whitehorse / Erik Nielsen International Airport","city":"Whitehorse","country":"CA","lat":60.708533,"lng":-135.065705,"tz":"America/Whitehorse"},{"iata":"YYA","icao":"ZGYY","name":"Yueyang Sanhe Airport","city":"Yueyang (Yueyanglou)","country":"CN","lat":29.311699,"lng":113.281574,"tz":"Asia/Shanghai"},{"iata":"YYB","icao":"CYYB","name":"North Bay Jack Garland Airport","city":"North Bay","country":"CA","lat":46.363602,"lng":-79.422798,"tz":"America/Toronto"},{"iata":"YYC","icao":"CYYC","name":"Calgary International Airport","city":"Calgary","country":"CA","lat":51.118822,"lng":-114.009933,"tz":"America/Edmonton"},{"iata":"YYD","icao":"CYYD","name":"Smithers Airport","city":"Smithers","country":"CA","lat":54.824699,"lng":-127.182999,"tz":"America/Vancouver"},{"iata":"YYE","icao":"CYYE","name":"Fort Nelson Airport","city":"Fort Nelson","country":"CA","lat":58.836399,"lng":-122.597,"tz":"America/Fort_Nelson"},{"iata":"YYF","icao":"CYYF","name":"Penticton Airport","city":"Penticton","country":"CA","lat":49.4631,"lng":-119.601997,"tz":"America/Vancouver"},{"iata":"YYG","icao":"CYYG","name":"Charlottetown Airport","city":"Charlottetown","country":"CA","lat":46.288911,"lng":-63.125174,"tz":"America/Halifax"},{"iata":"YYJ","icao":"CYYJ","name":"Victoria International Airport","city":"Victoria","country":"CA","lat":48.647201,"lng":-123.427792,"tz":"America/Vancouver"},{"iata":"YYL","icao":"CYYL","name":"Lynn Lake Airport","city":"Lynn Lake","country":"CA","lat":56.863899,"lng":-101.075996,"tz":"America/Winnipeg"},{"iata":"YYQ","icao":"CYYQ","name":"Churchill Airport","city":"Churchill","country":"CA","lat":58.739201,"lng":-94.065002,"tz":"America/Winnipeg"},{"iata":"YYR","icao":"CYYR","name":"Goose Bay Airport","city":"Goose Bay","country":"CA","lat":53.319199,"lng":-60.4258,"tz":"America/Goose_Bay"},{"iata":"YYT","icao":"CYYT","name":"St. John's International Airport","city":"St. John's","country":"CA","lat":47.618599,"lng":-52.7519,"tz":"America/St_Johns"},{"iata":"YYY","icao":"CYYY","name":"Mont Joli Airport","city":"Mont-Joli","country":"CA","lat":48.608601,"lng":-68.208099,"tz":"America/Toronto"},{"iata":"YYZ","icao":"CYYZ","name":"Toronto Pearson International Airport","city":"Toronto","country":"CA","lat":43.675935,"lng":-79.629421,"tz":"America/Toronto"},{"iata":"YZF","icao":"CYZF","name":"Yellowknife International Airport","city":"Yellowknife","country":"CA","lat":62.462799,"lng":-114.440002,"tz":"America/Yellowknife"},{"iata":"YZP","icao":"CYZP","name":"Sandspit Airport","city":"Sandspit","country":"CA","lat":53.254299,"lng":-131.813995,"tz":"America/Vancouver"},{"iata":"YZS","icao":"CYZS","name":"Coral Harbour Airport","city":"Coral Harbour","country":"CA","lat":64.193298,"lng":-83.359398,"tz":"America/Atikokan"},{"iata":"YZT","icao":"CYZT","name":"Port Hardy Airport","city":"Port Hardy","country":"CA","lat":50.680599,"lng":-127.366997,"tz":"America/Vancouver"},{"iata":"YZU","icao":"CYZU","name":"Whitecourt Airport","city":"Whitecourt","country":"CA","lat":54.143902,"lng":-115.787003,"tz":"America/Edmonton"},{"iata":"YZV","icao":"CYZV","name":"Sept-Îles Airport","city":"Sept-Îles","country":"CA","lat":50.223301,"lng":-66.265602,"tz":"America/Toronto"},{"iata":"YZY","icao":"ZLZY","name":"Zhangye Ganzhou Airport","city":"Zhangye (Ganzhou)","country":"CN","lat":38.801899,"lng":100.675003,"tz":"Asia/Shanghai"},{"iata":"ZAD","icao":"LDZD","name":"Zadar Airport","city":"Zadar","country":"HR","lat":44.096986,"lng":15.353565,"tz":"Europe/Zagreb"},{"iata":"ZAG","icao":"LDZA","name":"Zagreb Franjo Tuđman International Airport","city":"Velika Gorica","country":"HR","lat":45.742901,"lng":16.0688,"tz":"Europe/Zagreb"},{"iata":"ZAH","icao":"OIZH","name":"Zahedan International Airport","city":"Zahedan","country":"IR","lat":29.4757,"lng":60.9062,"tz":"Asia/Tehran"},{"iata":"ZAL","icao":"SCVD","name":"Pichoy Airport","city":"Valdivia","country":"CL","lat":-39.650002,"lng":-73.086098,"tz":"America/Santiago"},{"iata":"ZAM","icao":"RPMZ","name":"Zamboanga International Airport","city":"Zamboanga","country":"PH","lat":6.92242,"lng":122.059998,"tz":"Asia/Manila"},{"iata":"ZAZ","icao":"LEZG","name":"Zaragoza Airport","city":"Zaragoza","country":"ES","lat":41.666199,"lng":-1.04155,"tz":"Europe/Madrid"},{"iata":"ZBF","icao":"CZBF","name":"Bathurst Airport","city":"South Tetagouche","country":"CA","lat":47.6297,"lng":-65.738899,"tz":"America/Moncton"},{"iata":"ZBR","icao":"OIZC","name":"Chabahar Konarak International Airport","city":"Konarak","country":"IR","lat":25.44319,"lng":60.382167,"tz":"Asia/Tehran"},{"iata":"ZCL","icao":"MMZC","name":"General Leobardo C. Ruiz International Airport","city":"Zacatecas","country":"MX","lat":22.894942,"lng":-102.687154,"tz":"America/Mexico_City"},{"iata":"ZCO","icao":"SCQP","name":"La Araucanía International Airport","city":"Temuco","country":"CL","lat":-38.9259,"lng":-72.6515,"tz":"America/Santiago"},{"iata":"ZEL","icao":"CBBC","name":"Bella Bella (Campbell Island) Airport","city":"Bella Bella","country":"CA","lat":52.185001,"lng":-128.156994,"tz":"America/Vancouver"},{"iata":"ZHA","icao":"ZGZJ","name":"Zhanjiang Wuchuan International Airport","city":"Zhanjiang","country":"CN","lat":21.481667,"lng":110.590278,"tz":"Asia/Shanghai"},{"iata":"ZHY","icao":"ZLZW","name":"Zhongwei Shapotou Airport","city":"Zhongwei (Shapotou)","country":"CN","lat":37.573125,"lng":105.154454,"tz":"Asia/Shanghai"},{"iata":"ZIA","icao":"UUBW","name":"Zhukovsky International Airport","city":"Moscow","country":"RU","lat":55.553299,"lng":38.150002,"tz":"Europe/Moscow"},{"iata":"ZIG","icao":"GOGG","name":"Ziguinchor Airport","city":"Ziguinchor","country":"SN","lat":12.55559,"lng":-16.283298,"tz":"Africa/Dakar"},{"iata":"ZIH","icao":"MMZH","name":"Ixtapa-Zihuatanejo International Airport","city":"Ixtapa","country":"MX","lat":17.601771,"lng":-101.460629,"tz":"America/Mexico_City"},{"iata":"ZIX","icao":"UEVV","name":"Zhigansk Airport","city":"Zhigansk","country":"RU","lat":66.796501,"lng":123.361,"tz":"Asia/Yakutsk"},{"iata":"ZKP","icao":"UESU","name":"Zyryanka Airport","city":"Zyryanka","country":"RU","lat":65.7485,"lng":150.8889,"tz":"Asia/Srednekolymsk"},{"iata":"ZLO","icao":"MMZO","name":"Playa de Oro International Airport","city":"Manzanillo","country":"MX","lat":19.1448,"lng":-104.558998,"tz":"America/Mexico_City"},{"iata":"ZMT","icao":"CZMT","name":"Masset Airport","city":"Masset","country":"CA","lat":54.0275,"lng":-132.125,"tz":"America/Vancouver"},{"iata":"ZND","icao":"DRZR","name":"Zinder Airport","city":"Zinder","country":"NE","lat":13.779,"lng":8.98376,"tz":"Africa/Niamey"},{"iata":"ZNE","icao":"YNWN","name":"Newman Airport","city":"Newman","country":"AU","lat":-23.417801,"lng":119.803001,"tz":"Australia/Perth"},{"iata":"ZNZ","icao":"HTZA","name":"Abeid Amani Karume International Airport","city":"Zanzibar","country":"TZ","lat":-6.22202,"lng":39.224899,"tz":"Africa/Dar_es_Salaam"},{"iata":"ZOS","icao":"SCJO","name":"Cañal Bajo Carlos Hott Siebert Airport","city":"Osorno","country":"CL","lat":-40.611198,"lng":-73.060997,"tz":"America/Santiago"},{"iata":"ZQN","icao":"NZQN","name":"Queenstown Airport","city":"Queenstown","country":"NZ","lat":-45.019205,"lng":168.746379,"tz":"Pacific/Auckland"},{"iata":"ZQZ","icao":"ZBZJ","name":"Zhangjiakou Ningyuan Airport","city":"Zhangjiakou","country":"CN","lat":40.738664,"lng":114.933395,"tz":"Asia/Shanghai"},{"iata":"ZRH","icao":"LSZH","name":"Zürich Airport","city":"Zurich","country":"CH","lat":47.458056,"lng":8.548056,"tz":"Europe/Zurich"},{"iata":"ZSA","icao":"MYSM","name":"San Salvador International Airport","city":"San Salvador","country":"BS","lat":24.063041,"lng":-74.523233,"tz":"America/Nassau"},{"iata":"ZSE","icao":"FMEP","name":"Saint-Pierre Pierrefonds Airport","city":"Saint-Pierre","country":"RE","lat":-21.319362,"lng":55.422506,"tz":"Indian/Reunion"},{"iata":"ZSJ","icao":"CZSJ","name":"Sandy Lake Airport","city":"Sandy Lake","country":"CA","lat":53.064201,"lng":-93.344398,"tz":"America/Winnipeg"},{"iata":"ZTH","icao":"LGZA","name":"Zakynthos International Airport Dionysios Solomos","city":"Zakynthos","country":"GR","lat":37.7509,"lng":20.8843,"tz":"Europe/Athens"},{"iata":"ZUH","icao":"ZGSD","name":"Zhuhai Jinwan Airport","city":"Zhuhai (Jinwan)","country":"CN","lat":22.006399,"lng":113.375999,"tz":"Asia/Shanghai"},{"iata":"ZYI","icao":"ZUZY","name":"Zunyi Xinzhou Airport","city":"Zunyi","country":"CN","lat":27.810723,"lng":107.247189,"tz":"Asia/Shanghai"},{"iata":"ZYL","icao":"VGSY","name":"Osmany International Airport","city":"Sylhet","country":"BD","lat":24.963071,"lng":91.866903,"tz":"Asia/Dhaka"}] \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index 10a291fc..82696908 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -54,6 +54,7 @@ "@vitest/coverage-v8": "^3.2.4", "nodemon": "^3.1.0", "supertest": "^7.2.2", + "tz-lookup": "^6.1.25", "vitest": "^3.2.4" } }, @@ -1189,9 +1190,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1206,9 +1204,6 @@ "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1223,9 +1218,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1240,9 +1232,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1257,9 +1246,6 @@ "loong64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1274,9 +1260,6 @@ "loong64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1291,9 +1274,6 @@ "ppc64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1308,9 +1288,6 @@ "ppc64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1325,9 +1302,6 @@ "riscv64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1342,9 +1316,6 @@ "riscv64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1359,9 +1330,6 @@ "s390x" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1376,9 +1344,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1393,9 +1358,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5867,6 +5829,13 @@ "node": ">=14.17" } }, + "node_modules/tz-lookup": { + "version": "6.1.25", + "resolved": "https://registry.npmjs.org/tz-lookup/-/tz-lookup-6.1.25.tgz", + "integrity": "sha512-fFewT9o1uDzsW1QnUU1ValqaihFnwiUiiHr1S79/fxOzKXYYvX+EHeRnpvQJ9B3Qg67wPXT6QF2Esc4pFOrvLg==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", diff --git a/server/package.json b/server/package.json index 1e873c8f..197aac87 100644 --- a/server/package.json +++ b/server/package.json @@ -63,6 +63,7 @@ "@vitest/coverage-v8": "^3.2.4", "nodemon": "^3.1.0", "supertest": "^7.2.2", + "tz-lookup": "^6.1.25", "vitest": "^3.2.4" } } diff --git a/server/scripts/build-airports.mjs b/server/scripts/build-airports.mjs new file mode 100644 index 00000000..d7c00465 --- /dev/null +++ b/server/scripts/build-airports.mjs @@ -0,0 +1,108 @@ +#!/usr/bin/env node +// Build server/data/airports.json from OurAirports (davidmegginson.github.io/ourairports-data). +// License: Public Domain. Keeps large/medium airports with an IATA code; timezone derived from coords via tz-lookup. + +import fs from 'node:fs' +import path from 'node:path' +import https from 'node:https' +import { fileURLToPath } from 'node:url' +import tzLookup from 'tz-lookup' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const OUT = path.join(__dirname, '..', 'data', 'airports.json') +const SRC = 'https://davidmegginson.github.io/ourairports-data/airports.csv' + +function fetchText(url) { + return new Promise((resolve, reject) => { + https.get(url, (res) => { + if (res.statusCode !== 200) return reject(new Error(`HTTP ${res.statusCode}`)) + let data = '' + res.setEncoding('utf8') + res.on('data', chunk => { data += chunk }) + res.on('end', () => resolve(data)) + }).on('error', reject) + }) +} + +function parseCsv(text) { + const rows = [] + let row = [] + let cur = '' + let inQuotes = false + for (let i = 0; i < text.length; i++) { + const ch = text[i] + if (inQuotes) { + if (ch === '"') { + if (text[i + 1] === '"') { cur += '"'; i++ } else { inQuotes = false } + } else { + cur += ch + } + } else { + if (ch === '"') inQuotes = true + else if (ch === ',') { row.push(cur); cur = '' } + else if (ch === '\n') { row.push(cur); rows.push(row); row = []; cur = '' } + else if (ch === '\r') { /* skip */ } + else cur += ch + } + } + if (cur.length > 0 || row.length > 0) { row.push(cur); rows.push(row) } + return rows +} + +const raw = await fetchText(SRC) +const rows = parseCsv(raw) +const header = rows[0] +const idx = (name) => header.indexOf(name) +const TYPE = idx('type') +const NAME = idx('name') +const LAT = idx('latitude_deg') +const LNG = idx('longitude_deg') +const COUNTRY = idx('iso_country') +const MUNICIPALITY = idx('municipality') +const SERVICE = idx('scheduled_service') +const ICAO = idx('icao_code') +const IATA = idx('iata_code') + +const KEEP = new Set(['large_airport', 'medium_airport']) +const airports = [] +let skippedNoTz = 0 + +for (let i = 1; i < rows.length; i++) { + const r = rows[i] + if (!r || r.length < header.length) continue + if (!KEEP.has(r[TYPE])) continue + const iata = r[IATA]?.trim().toUpperCase() + if (!iata || iata.length !== 3) continue + if (r[SERVICE] !== 'yes') continue + const lat = Number(r[LAT]) + const lng = Number(r[LNG]) + if (!Number.isFinite(lat) || !Number.isFinite(lng)) continue + + let tz = null + try { tz = tzLookup(lat, lng) } catch { skippedNoTz++; continue } + if (!tz) { skippedNoTz++; continue } + + airports.push({ + iata, + icao: r[ICAO]?.trim().toUpperCase() || null, + name: r[NAME], + city: r[MUNICIPALITY] || '', + country: r[COUNTRY] || '', + lat: Math.round(lat * 1e6) / 1e6, + lng: Math.round(lng * 1e6) / 1e6, + tz, + }) +} + +const seen = new Map() +for (const a of airports) { + const existing = seen.get(a.iata) + if (!existing) { seen.set(a.iata, a); continue } + if (existing.icao && !a.icao) continue + if (!existing.icao && a.icao) seen.set(a.iata, a) +} +const unique = Array.from(seen.values()).sort((a, b) => a.iata.localeCompare(b.iata)) + +fs.writeFileSync(OUT, JSON.stringify(unique)) +const size = fs.statSync(OUT).size +console.log(`Wrote ${unique.length} airports to ${OUT} (${(size / 1024).toFixed(1)} KB); skipped ${skippedNoTz} without timezone`) diff --git a/server/src/app.ts b/server/src/app.ts index 679e43f7..f9c190d3 100644 --- a/server/src/app.ts +++ b/server/src/app.ts @@ -23,6 +23,7 @@ import tagsRoutes from './routes/tags'; import categoriesRoutes from './routes/categories'; import adminRoutes from './routes/admin'; import mapsRoutes from './routes/maps'; +import airportsRoutes from './routes/airports'; import filesRoutes from './routes/files'; import reservationsRoutes from './routes/reservations'; import dayNotesRoutes from './routes/dayNotes'; @@ -278,6 +279,7 @@ export function createApp(): express.Application { app.use('/api/integrations/memories', memoriesRoutes); app.use('/api/photos', photoRoutes); app.use('/api/maps', mapsRoutes); + app.use('/api/airports', airportsRoutes); app.use('/api/weather', weatherRoutes); app.use('/api/settings', settingsRoutes); app.use('/api/system-notices', systemNoticesRoutes); diff --git a/server/src/db/database.ts b/server/src/db/database.ts index 0c6c0097..410b4801 100644 --- a/server/src/db/database.ts +++ b/server/src/db/database.ts @@ -128,4 +128,11 @@ function isOwner(tripId: number | string, userId: number): boolean { return !!db.prepare('SELECT id FROM trips WHERE id = ? AND user_id = ?').get(tripId, userId); } +try { + const { backfillFlightEndpoints } = require('../services/airportService'); + backfillFlightEndpoints(); +} catch (err) { + console.error('[DB] Flight endpoint backfill failed:', err); +} + export { db, closeDb, reinitialize, getPlaceWithTags, canAccessTrip, isOwner }; diff --git a/server/src/db/migrations.ts b/server/src/db/migrations.ts index e79decef..b836fad0 100644 --- a/server/src/db/migrations.ts +++ b/server/src/db/migrations.ts @@ -1634,6 +1634,27 @@ function runMigrations(db: Database.Database): void { try { db.exec('ALTER TABLE trip_album_links ADD COLUMN passphrase TEXT DEFAULT NULL'); } catch (err: any) { if (!err.message?.includes('duplicate column name')) throw err; } try { db.exec('ALTER TABLE trek_photos ADD COLUMN passphrase TEXT DEFAULT NULL'); } catch (err: any) { if (!err.message?.includes('duplicate column name')) throw err; } }, + // Migration 105: Reservation endpoints (from/to points for flights, trains, ferries, car rentals) — #384 + #587 + () => { + db.exec(` + CREATE TABLE IF NOT EXISTS reservation_endpoints ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + reservation_id INTEGER NOT NULL REFERENCES reservations(id) ON DELETE CASCADE, + role TEXT NOT NULL, + sequence INTEGER NOT NULL DEFAULT 0, + name TEXT NOT NULL, + code TEXT, + lat REAL NOT NULL, + lng REAL NOT NULL, + timezone TEXT, + local_time TEXT, + local_date TEXT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP + ) + `); + db.exec('CREATE INDEX IF NOT EXISTS idx_reservation_endpoints_reservation_id ON reservation_endpoints(reservation_id)'); + try { db.exec('ALTER TABLE reservations ADD COLUMN needs_review INTEGER NOT NULL DEFAULT 0'); } catch (err: any) { if (!err.message?.includes('duplicate column name')) throw err; } + }, ]; if (currentVersion < migrations.length) { diff --git a/server/src/routes/airports.ts b/server/src/routes/airports.ts new file mode 100644 index 00000000..781ca982 --- /dev/null +++ b/server/src/routes/airports.ts @@ -0,0 +1,19 @@ +import express, { Request, Response } from 'express'; +import { authenticate } from '../middleware/auth'; +import { searchAirports, findByIata } from '../services/airportService'; + +const router = express.Router(); + +router.get('/search', authenticate, (req: Request, res: Response) => { + const q = typeof req.query.q === 'string' ? req.query.q : ''; + if (!q) return res.json([]); + res.json(searchAirports(q)); +}); + +router.get('/:iata', authenticate, (req: Request, res: Response) => { + const airport = findByIata(req.params.iata); + if (!airport) return res.status(404).json({ error: 'Airport not found' }); + res.json(airport); +}); + +export default router; diff --git a/server/src/routes/reservations.ts b/server/src/routes/reservations.ts index 034aab8a..0f1b454c 100644 --- a/server/src/routes/reservations.ts +++ b/server/src/routes/reservations.ts @@ -31,7 +31,7 @@ router.get('/', authenticate, (req: Request, res: Response) => { router.post('/', authenticate, (req: Request, res: Response) => { const authReq = req as AuthRequest; const { tripId } = req.params; - const { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, status, type, accommodation_id, metadata, create_accommodation, create_budget_entry } = req.body; + const { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, status, type, accommodation_id, metadata, create_accommodation, create_budget_entry, endpoints, needs_review } = req.body; const trip = verifyTripAccess(tripId, authReq.user.id); if (!trip) return res.status(404).json({ error: 'Trip not found' }); @@ -44,7 +44,8 @@ router.post('/', authenticate, (req: Request, res: Response) => { const { reservation, accommodationCreated } = createReservation(tripId, { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, - status, type, accommodation_id, metadata, create_accommodation + status, type, accommodation_id, metadata, create_accommodation, + endpoints, needs_review }); if (accommodationCreated) { @@ -101,7 +102,7 @@ router.put('/positions', authenticate, (req: Request, res: Response) => { router.put('/:id', authenticate, (req: Request, res: Response) => { const authReq = req as AuthRequest; const { tripId, id } = req.params; - const { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, status, type, accommodation_id, metadata, create_accommodation, create_budget_entry } = req.body; + const { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, status, type, accommodation_id, metadata, create_accommodation, create_budget_entry, endpoints, needs_review } = req.body; const trip = verifyTripAccess(tripId, authReq.user.id); if (!trip) return res.status(404).json({ error: 'Trip not found' }); @@ -115,7 +116,8 @@ router.put('/:id', authenticate, (req: Request, res: Response) => { const { reservation, accommodationChanged } = updateReservation(id, tripId, { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, - status, type, accommodation_id, metadata, create_accommodation + status, type, accommodation_id, metadata, create_accommodation, + endpoints, needs_review }, current); if (accommodationChanged) { diff --git a/server/src/services/airportService.ts b/server/src/services/airportService.ts new file mode 100644 index 00000000..c3250b11 --- /dev/null +++ b/server/src/services/airportService.ts @@ -0,0 +1,109 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { db } from '../db/database'; + +export interface Airport { + iata: string; + icao: string | null; + name: string; + city: string; + country: string; + lat: number; + lng: number; + tz: string; +} + +let cache: Airport[] | null = null; +let byIata: Map | null = null; + +function load(): Airport[] { + if (cache) return cache; + const file = path.join(__dirname, '..', '..', 'data', 'airports.json'); + if (!fs.existsSync(file)) { + console.warn('[airports] airports.json missing — run `node scripts/build-airports.mjs`'); + cache = []; + byIata = new Map(); + return cache; + } + const raw = fs.readFileSync(file, 'utf8'); + cache = JSON.parse(raw) as Airport[]; + byIata = new Map(cache.map(a => [a.iata, a])); + return cache; +} + +export function findByIata(code: string): Airport | null { + load(); + return byIata!.get(code.toUpperCase()) ?? null; +} + +export function searchAirports(query: string, limit = 12): Airport[] { + const all = load(); + const q = query.trim().toLowerCase(); + if (!q) return []; + + const upper = q.toUpperCase(); + if (q.length === 3) { + const exact = byIata!.get(upper); + if (exact) return [exact]; + } + + const matches: Array<{ a: Airport; score: number }> = []; + for (const a of all) { + let score = 0; + if (a.iata === upper) score = 100; + else if (a.icao === upper) score = 90; + else if (a.iata.startsWith(upper)) score = 70; + else if (a.city.toLowerCase().startsWith(q)) score = 60; + else if (a.name.toLowerCase().startsWith(q)) score = 50; + else if (a.city.toLowerCase().includes(q)) score = 30; + else if (a.name.toLowerCase().includes(q)) score = 20; + if (score > 0) matches.push({ a, score }); + } + matches.sort((x, y) => y.score - x.score || x.a.iata.localeCompare(y.a.iata)); + return matches.slice(0, limit).map(m => m.a); +} + +export function backfillFlightEndpoints(): void { + const pending = db.prepare(` + SELECT r.id, r.metadata, r.reservation_time, r.reservation_end_time + FROM reservations r + WHERE r.type = 'flight' + AND NOT EXISTS (SELECT 1 FROM reservation_endpoints e WHERE e.reservation_id = r.id) + `).all() as { id: number; metadata: string | null; reservation_time: string | null; reservation_end_time: string | null }[]; + + if (pending.length === 0) return; + + load(); + const insert = db.prepare(` + INSERT INTO reservation_endpoints (reservation_id, role, sequence, name, code, lat, lng, timezone, local_time, local_date) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `); + const markReview = db.prepare('UPDATE reservations SET needs_review = 1 WHERE id = ?'); + + let filled = 0; + let flagged = 0; + for (const r of pending) { + if (!r.metadata) { markReview.run(r.id); flagged++; continue; } + let meta: any; + try { meta = JSON.parse(r.metadata); } catch { markReview.run(r.id); flagged++; continue; } + + const dep = meta.departure_airport ? findByIata(String(meta.departure_airport).slice(0, 3)) : null; + const arr = meta.arrival_airport ? findByIata(String(meta.arrival_airport).slice(0, 3)) : null; + + if (!dep || !arr) { markReview.run(r.id); flagged++; continue; } + + const split = (iso: string | null) => { + if (!iso) return { date: null as string | null, time: null as string | null }; + const [date, time] = iso.split('T'); + return { date: date || null, time: time ? time.slice(0, 5) : null }; + }; + const depParts = split(r.reservation_time); + const arrParts = split(r.reservation_end_time); + + insert.run(r.id, 'from', 0, dep.city ? `${dep.city} (${dep.iata})` : dep.name, dep.iata, dep.lat, dep.lng, dep.tz, depParts.time, depParts.date); + insert.run(r.id, 'to', 1, arr.city ? `${arr.city} (${arr.iata})` : arr.name, arr.iata, arr.lat, arr.lng, arr.tz, arrParts.time, arrParts.date); + filled++; + } + + console.log(`[airports] Backfill: ${filled} filled, ${flagged} flagged for review`); +} diff --git a/server/src/services/reservationService.ts b/server/src/services/reservationService.ts index 17628270..aea03dc6 100644 --- a/server/src/services/reservationService.ts +++ b/server/src/services/reservationService.ts @@ -1,10 +1,59 @@ import { db, canAccessTrip } from '../db/database'; import { Reservation } from '../types'; +export interface ReservationEndpoint { + id?: number; + reservation_id?: number; + role: 'from' | 'to' | 'stop'; + sequence: number; + name: string; + code: string | null; + lat: number; + lng: number; + timezone: string | null; + local_time: string | null; + local_date: string | null; +} + +type EndpointInput = Omit & { sequence?: number }; + export function verifyTripAccess(tripId: string | number, userId: number) { return canAccessTrip(tripId, userId); } +function loadEndpointsByTrip(tripId: string | number): Map { + const rows = db.prepare(` + SELECT e.* FROM reservation_endpoints e + JOIN reservations r ON e.reservation_id = r.id + WHERE r.trip_id = ? + ORDER BY e.reservation_id, e.sequence + `).all(tripId) as ReservationEndpoint[]; + const map = new Map(); + for (const r of rows) { + const list = map.get(r.reservation_id!) ?? []; + list.push(r); + map.set(r.reservation_id!, list); + } + return map; +} + +function loadEndpoints(reservationId: number): ReservationEndpoint[] { + return db.prepare( + 'SELECT * FROM reservation_endpoints WHERE reservation_id = ? ORDER BY sequence' + ).all(reservationId) as ReservationEndpoint[]; +} + +const saveEndpoints = db.transaction((reservationId: number, endpoints: EndpointInput[]) => { + db.prepare('DELETE FROM reservation_endpoints WHERE reservation_id = ?').run(reservationId); + const insert = db.prepare(` + INSERT INTO reservation_endpoints (reservation_id, role, sequence, name, code, lat, lng, timezone, local_time, local_date) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `); + endpoints.forEach((e, i) => { + insert.run(reservationId, e.role, e.sequence ?? i, e.name, e.code ?? null, e.lat, e.lng, e.timezone ?? null, e.local_time ?? null, e.local_date ?? null); + }); +}); + export function listReservations(tripId: string | number) { const reservations = db.prepare(` SELECT r.*, d.day_number, p.name as place_name, r.assignment_id, @@ -18,7 +67,6 @@ export function listReservations(tripId: string | number) { ORDER BY r.reservation_time ASC, r.created_at ASC `).all(tripId) as any[]; - // Attach per-day positions for multi-day reservations const dayPositions = db.prepare(` SELECT rdp.reservation_id, rdp.day_id, rdp.position FROM reservation_day_positions rdp @@ -32,15 +80,18 @@ export function listReservations(tripId: string | number) { posMap.get(dp.reservation_id)![dp.day_id] = dp.position; } + const endpointsMap = loadEndpointsByTrip(tripId); + for (const r of reservations) { r.day_positions = posMap.get(r.id) || null; + r.endpoints = endpointsMap.get(r.id) || []; } return reservations; } export function getReservationWithJoins(id: string | number) { - return db.prepare(` + const row = db.prepare(` SELECT r.*, d.day_number, p.name as place_name, r.assignment_id, ap.place_id as accommodation_place_id, acc_p.name as accommodation_name FROM reservations r @@ -49,7 +100,10 @@ export function getReservationWithJoins(id: string | number) { LEFT JOIN day_accommodations ap ON r.accommodation_id = ap.id LEFT JOIN places acc_p ON ap.place_id = acc_p.id WHERE r.id = ? - `).get(id); + `).get(id) as any; + if (!row) return undefined; + row.endpoints = loadEndpoints(row.id); + return row; } interface CreateAccommodation { @@ -76,13 +130,16 @@ interface CreateReservationData { accommodation_id?: number; metadata?: any; create_accommodation?: CreateAccommodation; + endpoints?: EndpointInput[]; + needs_review?: boolean; } export function createReservation(tripId: string | number, data: CreateReservationData): { reservation: any; accommodationCreated: boolean } { const { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, - status, type, accommodation_id, metadata, create_accommodation + status, type, accommodation_id, metadata, create_accommodation, + endpoints, needs_review } = data; let accommodationCreated = false; @@ -101,8 +158,8 @@ export function createReservation(tripId: string | number, data: CreateReservati } const result = db.prepare(` - INSERT INTO reservations (trip_id, day_id, place_id, assignment_id, title, reservation_time, reservation_end_time, location, confirmation_number, notes, status, type, accommodation_id, metadata) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + INSERT INTO reservations (trip_id, day_id, place_id, assignment_id, title, reservation_time, reservation_end_time, location, confirmation_number, notes, status, type, accommodation_id, metadata, needs_review) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `).run( tripId, day_id || null, @@ -117,9 +174,14 @@ export function createReservation(tripId: string | number, data: CreateReservati status || 'pending', type || 'other', resolvedAccommodationId, - metadata ? JSON.stringify(metadata) : null + metadata ? JSON.stringify(metadata) : null, + needs_review ? 1 : 0 ); + if (endpoints && endpoints.length > 0) { + saveEndpoints(Number(result.lastInsertRowid), endpoints); + } + // Sync check-in/out to accommodation if linked if (accommodation_id && metadata) { const meta = typeof metadata === 'string' ? JSON.parse(metadata) : metadata; @@ -187,13 +249,16 @@ interface UpdateReservationData { accommodation_id?: number; metadata?: any; create_accommodation?: CreateAccommodation; + endpoints?: EndpointInput[]; + needs_review?: boolean; } export function updateReservation(id: string | number, tripId: string | number, data: UpdateReservationData, current: Reservation): { reservation: any; accommodationChanged: boolean } { const { title, reservation_time, reservation_end_time, location, confirmation_number, notes, day_id, place_id, assignment_id, - status, type, accommodation_id, metadata, create_accommodation + status, type, accommodation_id, metadata, create_accommodation, + endpoints, needs_review } = data; let accommodationChanged = false; @@ -234,7 +299,8 @@ export function updateReservation(id: string | number, tripId: string | number, status = COALESCE(?, status), type = COALESCE(?, type), accommodation_id = ?, - metadata = ? + metadata = ?, + needs_review = COALESCE(?, needs_review) WHERE id = ? `).run( title || null, @@ -250,9 +316,14 @@ export function updateReservation(id: string | number, tripId: string | number, type || null, resolvedAccId, metadata !== undefined ? (metadata ? JSON.stringify(metadata) : null) : current.metadata, + needs_review === undefined ? null : (needs_review ? 1 : 0), id ); + if (endpoints !== undefined) { + saveEndpoints(Number(id), endpoints); + } + // Sync check-in/out to accommodation if linked const resolvedMeta = metadata !== undefined ? metadata : (current.metadata ? JSON.parse(current.metadata as string) : null); if (resolvedAccId && resolvedMeta) { diff --git a/server/src/types.ts b/server/src/types.ts index 0f9faa74..a5578291 100644 --- a/server/src/types.ts +++ b/server/src/types.ts @@ -139,6 +139,20 @@ export interface BudgetItemMember { budget_item_id?: number; } +export interface ReservationEndpoint { + id: number; + reservation_id: number; + role: 'from' | 'to' | 'stop'; + sequence: number; + name: string; + code: string | null; + lat: number; + lng: number; + timezone: string | null; + local_time: string | null; + local_date: string | null; +} + export interface Reservation { id: number; trip_id: number; @@ -155,6 +169,8 @@ export interface Reservation { type: string; accommodation_id?: number | null; metadata?: string | null; + needs_review?: number; + endpoints?: ReservationEndpoint[]; created_at?: string; day_number?: number; place_name?: string; From 5e9c8d2c4309c447f0f69865fa1ef24431ff7255 Mon Sep 17 00:00:00 2001 From: Maurice Date: Fri, 17 Apr 2026 19:03:21 +0200 Subject: [PATCH 2/7] fix(bookings): client test failures after map overlay refactor - Make useEndpointPane tolerant when map mock lacks getPane/createPane - Add useMapEvents to react-leaflet mock in MapView.test - Rewrite RESMODAL-042 to use the new AirportSelect flow (airline and flight number only; airport codes are now saved as endpoints, not metadata) --- client/src/components/Map/MapView.test.tsx | 1 + client/src/components/Map/ReservationOverlay.tsx | 1 + client/src/components/Planner/ReservationModal.test.tsx | 8 ++------ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/client/src/components/Map/MapView.test.tsx b/client/src/components/Map/MapView.test.tsx index 36ee4869..af0b5449 100644 --- a/client/src/components/Map/MapView.test.tsx +++ b/client/src/components/Map/MapView.test.tsx @@ -32,6 +32,7 @@ vi.mock('react-leaflet', () => ({ off: vi.fn(), panBy: vi.fn(), }), + useMapEvents: () => ({}), })) vi.mock('react-leaflet-cluster', () => ({ diff --git a/client/src/components/Map/ReservationOverlay.tsx b/client/src/components/Map/ReservationOverlay.tsx index 74b41714..09e27703 100644 --- a/client/src/components/Map/ReservationOverlay.tsx +++ b/client/src/components/Map/ReservationOverlay.tsx @@ -25,6 +25,7 @@ const TYPE_META: Record { + if (typeof map?.getPane !== 'function' || typeof map?.createPane !== 'function') return if (!map.getPane(ENDPOINT_PANE)) { const pane = map.createPane(ENDPOINT_PANE) pane.style.zIndex = '650' diff --git a/client/src/components/Planner/ReservationModal.test.tsx b/client/src/components/Planner/ReservationModal.test.tsx index 0ec10cdf..c5bcfbaa 100644 --- a/client/src/components/Planner/ReservationModal.test.tsx +++ b/client/src/components/Planner/ReservationModal.test.tsx @@ -575,16 +575,14 @@ describe('ReservationModal', () => { expect(screen.queryByPlaceholderText('0.00')).not.toBeInTheDocument(); }); - it('FE-PLANNER-RESMODAL-042: flight type metadata saved with airline and airports', async () => { + it('FE-PLANNER-RESMODAL-042: flight type metadata saved with airline and flight number', async () => { const onSave = vi.fn().mockResolvedValue(undefined); render(); await userEvent.click(screen.getByRole('button', { name: /Flight/i })); - await userEvent.type(screen.getByPlaceholderText(/e\.g\. Lufthansa/i), 'AF 447'); + await userEvent.type(screen.getByPlaceholderText(/e\.g\. Lufthansa/i), 'AF 447 CDG → JFK'); await userEvent.type(screen.getByPlaceholderText('Lufthansa'), 'Air France'); await userEvent.type(screen.getByPlaceholderText('LH 123'), 'AF 447'); - await userEvent.type(screen.getByPlaceholderText('FRA'), 'CDG'); - await userEvent.type(screen.getByPlaceholderText('NRT'), 'JFK'); await userEvent.click(screen.getByRole('button', { name: /^Add$/i })); @@ -595,8 +593,6 @@ describe('ReservationModal', () => { metadata: expect.objectContaining({ airline: 'Air France', flight_number: 'AF 447', - departure_airport: 'CDG', - arrival_airport: 'JFK', }), }) ); From 530550455db0df21ea23280bd1a07340561813a6 Mon Sep 17 00:00:00 2001 From: Maurice Date: Fri, 17 Apr 2026 23:25:38 +0200 Subject: [PATCH 3/7] feat(ui): unified toolbar design + redesigned budget widgets + polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trip planner now has a consistent rounded toolbar across bookings, lists, budget and files. Each panel shows title, inline filter pills (with counts where useful) and an accent action button on the right. Moved per-tab controls into the toolbar — lists import, todo add, budget currency/add-category, files trash/filters — and dropped the redundant in-panel headers. Budget sidebar redesigned: total-budget card with indigo-ringed avatars and coloured split bar; settlement flows as paired avatar cards; by-category donut rebuilt in SVG with per-category gradients. Both cards now follow dark/light mode via a widgetTheme helper. Todo: add-new-task is a portalled modal on desktop, the add-task input bar is gone; new SORT BY section in the sidebar; inline category creation in the task editor. Reservations: pending / confirmed sections remember their collapsed state per trip (localStorage). Misc: per-trip connections toggle moved into the day-plan sidebar, booking endpoints fixed to show on map for trains/cruises/cars as well, label localStorage persistence, RESMODAL test updated to the new airport-select flow. i18n: the new booking / map / todo / budget strings are translated into all 15 supported languages. --- client/src/components/Budget/BudgetPanel.tsx | 514 +++++++++++++----- client/src/components/Files/FileManager.tsx | 98 +++- .../components/Packing/PackingListPanel.tsx | 37 +- .../components/Planner/ReservationModal.tsx | 50 +- .../components/Planner/ReservationsPanel.tsx | 20 +- client/src/components/Todo/TodoListPanel.tsx | 144 +++-- client/src/i18n/translations/ar.ts | 17 +- client/src/i18n/translations/br.ts | 17 +- client/src/i18n/translations/cs.ts | 17 +- client/src/i18n/translations/de.ts | 8 +- client/src/i18n/translations/en.ts | 8 +- client/src/i18n/translations/es.ts | 17 +- client/src/i18n/translations/fr.ts | 17 +- client/src/i18n/translations/hu.ts | 17 +- client/src/i18n/translations/id.ts | 17 +- client/src/i18n/translations/it.ts | 17 +- client/src/i18n/translations/nl.ts | 17 +- client/src/i18n/translations/pl.ts | 15 +- client/src/i18n/translations/ru.ts | 17 +- client/src/i18n/translations/zh.ts | 17 +- client/src/i18n/translations/zhTw.ts | 17 +- client/src/pages/TripPlannerPage.tsx | 112 +++- 22 files changed, 894 insertions(+), 316 deletions(-) diff --git a/client/src/components/Budget/BudgetPanel.tsx b/client/src/components/Budget/BudgetPanel.tsx index a41cfb6a..0caa0570 100644 --- a/client/src/components/Budget/BudgetPanel.tsx +++ b/client/src/components/Budget/BudgetPanel.tsx @@ -4,7 +4,69 @@ import DOM from 'react-dom' import { useTripStore } from '../../store/tripStore' import { useCanDo } from '../../store/permissionsStore' import { useTranslation } from '../../i18n' -import { Plus, Trash2, Calculator, Wallet, Pencil, Users, Check, Info, ChevronDown, ChevronRight, Download, GripVertical } from 'lucide-react' +import { Plus, Trash2, Calculator, Wallet, Pencil, Users, Check, Info, ChevronDown, ChevronRight, Download, GripVertical, TrendingUp, TrendingDown, PieChart as PieChartIcon } from 'lucide-react' + +function useIsDark(): boolean { + const [dark, setDark] = useState(() => typeof document !== 'undefined' && document.documentElement.classList.contains('dark')) + useEffect(() => { + if (typeof document === 'undefined') return + const mo = new MutationObserver(() => setDark(document.documentElement.classList.contains('dark'))) + mo.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] }) + return () => mo.disconnect() + }, []) + return dark +} + +function widgetTheme(dark: boolean) { + if (dark) return { + bg: 'linear-gradient(180deg, #17171d 0%, #0d0d12 100%)', + border: 'rgba(255,255,255,0.07)', + text: '#ffffff', + sub: 'rgba(255,255,255,0.6)', + faint: 'rgba(255,255,255,0.4)', + track: 'rgba(255,255,255,0.04)', + divider: 'rgba(255,255,255,0.07)', + iconBg: 'rgba(255,255,255,0.08)', + iconBorder: 'rgba(255,255,255,0.12)', + iconColor: 'rgba(255,255,255,0.9)', + centerBg: '#17171d', + flowBg: 'rgba(255,255,255,0.05)', + flowBorder: 'rgba(255,255,255,0.07)', + flowHoverBg: 'rgba(255,255,255,0.08)', + flowHoverBorder: 'rgba(255,255,255,0.12)', + rowHover: 'rgba(255,255,255,0.03)', + shadow: '0 20px 50px rgba(0,0,0,0.35), inset 0 1px 0 rgba(255,255,255,0.04)', + donutShadow: 'drop-shadow(0 0 20px rgba(0,0,0,0.3))', + } + return { + bg: 'linear-gradient(180deg, #ffffff 0%, #f9fafb 100%)', + border: 'rgba(15,23,42,0.08)', + text: '#111827', + sub: 'rgba(17,24,39,0.6)', + faint: 'rgba(17,24,39,0.4)', + track: 'rgba(15,23,42,0.05)', + divider: 'rgba(15,23,42,0.08)', + iconBg: 'rgba(15,23,42,0.05)', + iconBorder: 'rgba(15,23,42,0.1)', + iconColor: 'rgba(17,24,39,0.75)', + centerBg: '#ffffff', + flowBg: 'rgba(15,23,42,0.03)', + flowBorder: 'rgba(15,23,42,0.08)', + flowHoverBg: 'rgba(15,23,42,0.06)', + flowHoverBorder: 'rgba(15,23,42,0.14)', + rowHover: 'rgba(15,23,42,0.04)', + shadow: '0 12px 32px rgba(15,23,42,0.08), 0 2px 6px rgba(0,0,0,0.04)', + donutShadow: 'drop-shadow(0 4px 18px rgba(15,23,42,0.12))', + } +} + +function hexLighten(hex: string, amount: number): string { + const m = hex.replace('#', '').match(/.{2}/g) + if (!m || m.length !== 3) return hex + const mix = (c: number) => Math.min(255, Math.round(c + (255 - c) * amount)) + const [r, g, b] = m.map(x => parseInt(x, 16)) + return `#${[mix(r), mix(g), mix(b)].map(v => v.toString(16).padStart(2, '0')).join('')}` +} import CustomSelect from '../shared/CustomSelect' import { budgetApi } from '../../api/client' import { CustomDatePicker } from '../shared/CustomDateTimePicker' @@ -361,9 +423,47 @@ interface PerPersonInlineProps { locale: string } -function PerPersonInline({ tripId, budgetItems, currency, locale }: PerPersonInlineProps) { - const [data, setData] = useState(null) - const fmt = (v) => fmtNum(v, locale, currency) +const SPLIT_COLORS = [ + { solid: '#6366f1', gradient: 'linear-gradient(135deg, #6366f1, #8b5cf6)' }, + { solid: '#ec4899', gradient: 'linear-gradient(135deg, #ec4899, #f43f5e)' }, + { solid: '#10b981', gradient: 'linear-gradient(135deg, #10b981, #22c55e)' }, + { solid: '#f59e0b', gradient: 'linear-gradient(135deg, #f59e0b, #f97316)' }, + { solid: '#06b6d4', gradient: 'linear-gradient(135deg, #06b6d4, #3b82f6)' }, + { solid: '#a855f7', gradient: 'linear-gradient(135deg, #a855f7, #d946ef)' }, +] + +export function splitColorFor(userId: number, order: number) { + return SPLIT_COLORS[order % SPLIT_COLORS.length] +} + +function colorForUserId(userId: number) { + return SPLIT_COLORS[((userId | 0) - 1 + SPLIT_COLORS.length * 1000) % SPLIT_COLORS.length] +} + +function RingAvatar({ userId, username, avatarUrl, size = 34, innerBg = '#17171d', textColor = '#fff' }: { userId: number; username?: string; avatarUrl?: string | null; size?: number; innerBg?: string; textColor?: string }) { + const color = colorForUserId(userId) + return ( +
+
+ {avatarUrl ? : username?.[0]?.toUpperCase()} +
+
+ ) +} + +function PerPersonInline({ tripId, budgetItems, currency, locale, grandTotal, theme }: PerPersonInlineProps & { grandTotal: number; theme: ReturnType }) { + const [data, setData] = useState(null) + const fmt = (v: number) => fmtNum(v, locale, currency) useEffect(() => { budgetApi.perPersonSummary(tripId).then(d => setData(d.summary)).catch(() => {}) @@ -371,25 +471,38 @@ function PerPersonInline({ tripId, budgetItems, currency, locale }: PerPersonInl if (!data || data.length === 0) return null + const people = data.map((p: any) => ({ ...p, color: colorForUserId(p.user_id) })) + return ( -
- {data.map(person => ( -
-
- {person.avatar_url - ? - : person.username?.[0]?.toUpperCase() - } -
- {person.username} - {fmt(person.total_assigned)} + <> + {grandTotal > 0 && ( +
+ {people.map(p => ( +
+ ))}
- ))} -
+ )} + +
+ {people.map(p => { + const percent = grandTotal > 0 ? Math.round((p.total_assigned / grandTotal) * 100) : 0 + return ( +
+ +
+
{p.username}
+
{percent}%
+
+
{fmt(p.total_assigned)}
+
+ ) + })} +
+ ) } @@ -446,6 +559,8 @@ export default function BudgetPanel({ tripId, tripMembers = [] }: BudgetPanelPro const { trip, budgetItems, addBudgetItem, updateBudgetItem, deleteBudgetItem, loadBudgetItems, updateTrip, setBudgetItemMembers, toggleBudgetMemberPaid, reorderBudgetItems, reorderBudgetCategories } = useTripStore() const can = useCanDo() const { t, locale } = useTranslation() + const isDark = useIsDark() + const theme = useMemo(() => widgetTheme(isDark), [isDark]) const [newCategoryName, setNewCategoryName] = useState('') const [editingCat, setEditingCat] = useState(null) // { name, value } const [settlement, setSettlement] = useState<{ balances: any[]; flows: any[] } | null>(null) @@ -589,20 +704,69 @@ export default function BudgetPanel({ tripId, tripMembers = [] }: BudgetPanelPro } // ── Main Layout ────────────────────────────────────────────────────────── + const totalBudget = budgetItems.reduce((s, x) => s + (x.total_price || 0), 0) return ( -
-
-
- -

{t('budget.title')}

+
+
+
+

+ {t('budget.title')} +

+
+
+ ({ value: c, label: `${c} (${SYMBOLS[c] || c})` }))} + searchable + /> +
+ {canEdit && ( +
+ setNewCategoryName(e.target.value)} + onKeyDown={e => { if (e.key === 'Enter') handleAddCategory() }} + placeholder={t('budget.categoryName')} + style={{ flex: 1, minWidth: 0, border: '1px solid var(--border-primary)', borderRadius: 10, padding: '9px 14px', fontSize: 13, outline: 'none', fontFamily: 'inherit', background: 'var(--bg-card)', color: 'var(--text-primary)' }} + /> + +
+ )} + +
-
-
+
{categoryNames.map((cat, ci) => { const items = grouped.get(cat) || [] @@ -811,61 +975,57 @@ export default function BudgetPanel({ tripId, tripMembers = [] }: BudgetPanelPro })}
-
-
- ({ value: c, label: `${c} (${SYMBOLS[c] || c})` }))} - searchable - /> -
- - {canEdit && ( -
- setNewCategoryName(e.target.value)} - onKeyDown={e => { if (e.key === 'Enter') handleAddCategory() }} - placeholder={t('budget.categoryName')} - style={{ flex: 1, border: '1px solid var(--border-primary)', borderRadius: 10, padding: '9px 14px', fontSize: 13, outline: 'none', fontFamily: 'inherit', background: 'var(--bg-input)', color: 'var(--text-primary)' }} - /> - -
- )} +
-
-
- +
+
+
-
-
{t('budget.totalBudget')}
+
+
{t('budget.totalBudget')}
-
- {Number(grandTotal).toLocaleString(locale, { minimumFractionDigits: currencyDecimals(currency), maximumFractionDigits: currencyDecimals(currency) })} + + {(() => { + const decimals = currencyDecimals(currency) + const full = Number(grandTotal).toLocaleString(locale, { minimumFractionDigits: decimals, maximumFractionDigits: decimals }) + const sep = (0.1).toLocaleString(locale).replace(/\d/g, '') + const [integerPart, decimalPart] = decimals > 0 ? full.split(sep) : [full, ''] + return ( +
+ {integerPart} + {decimalPart && {sep}{decimalPart}} + {SYMBOLS[currency] || currency} +
+ ) + })()} +
+ {currency}
-
{SYMBOLS[currency] || currency} {currency}
+ {hasMultipleMembers && (budgetItems || []).some(i => i.members?.length > 0) && ( - + )} {/* Settlement dropdown inside the total card */} {hasMultipleMembers && settlement && settlement.flows.length > 0 && ( -
+
{settlementOpen && ( -
+
{settlement.flows.map((flow, i) => (
- -
- - + display: 'flex', alignItems: 'center', gap: 14, + padding: '12px 14px', borderRadius: 14, + background: theme.flowBg, + border: `1px solid ${theme.flowBorder}`, + transition: 'all 0.2s', + }} + onMouseEnter={e => { e.currentTarget.style.background = theme.flowHoverBg; e.currentTarget.style.borderColor = theme.flowHoverBorder }} + onMouseLeave={e => { e.currentTarget.style.background = theme.flowBg; e.currentTarget.style.borderColor = theme.flowBorder }} + > + +
+ {fmt(flow.amount, currency)} - +
+
+
- +
))} {settlement.balances.filter(b => Math.abs(b.balance) > 0.01).length > 0 && ( -
-
+
+
{t('budget.netBalances')}
- {settlement.balances.filter(b => Math.abs(b.balance) > 0.01).map(b => ( -
-
- {b.avatar_url - ? - : b.username?.[0]?.toUpperCase() - } -
- - {b.username} - - 0 ? '#4ade80' : '#f87171', - }}> - {b.balance > 0 ? '+' : ''}{fmt(b.balance, currency)} - -
- ))} +
+ {settlement.balances.filter(b => Math.abs(b.balance) > 0.01).map(b => { + const positive = b.balance > 0 + const Trend = positive ? TrendingUp : TrendingDown + return ( +
+ + + {b.username} + + + + {positive ? '+' : ''}{fmt(b.balance, currency)} + +
+ ) + })} +
)}
@@ -945,36 +1112,115 @@ export default function BudgetPanel({ tripId, tripMembers = [] }: BudgetPanelPro )}
- {pieSegments.length > 0 && ( -
-
{t('budget.byCategory')}
+ {pieSegments.length > 0 && (() => { + const decimals = currencyDecimals(currency) + const total = pieSegments.reduce((s, x) => s + x.value, 0) + const totalFmt = Number(total).toLocaleString(locale, { minimumFractionDigits: decimals, maximumFractionDigits: decimals }) + const decimalSep = (0.1).toLocaleString(locale).replace(/\d/g, '') + const [totalInt, totalDec] = decimals > 0 ? totalFmt.split(decimalSep) : [totalFmt, ''] + const R = 80 + const CIRC = 2 * Math.PI * R + let dashOffset = 0 + return ( +
+
+
+ +
+
+
{t('budget.byCategory')}
+
+
- - -
- {pieSegments.map((seg, i) => { - const pct = grandTotal > 0 ? ((seg.value / grandTotal) * 100).toFixed(1) : '0.0' - return ( -
0 ? '1px solid var(--border-secondary)' : 'none' }}> -
-
- {seg.name} -
-
- {fmt(seg.value, currency)} - {pct}% -
+
+ + + {pieSegments.map((seg, i) => { + const c2 = hexLighten(seg.color, 0.2) + return ( + + + + + ) + })} + + + {pieSegments.map((seg, i) => { + const segLen = total > 0 ? (seg.value / total) * CIRC : 0 + const circle = ( + + ) + dashOffset += segLen + return circle + })} + +
+
{t('budget.total')}
+
+ {totalInt} + {totalDec && {decimalSep}{totalDec}}
- ) - })} +
{currency}
+
+
+ +
+ {pieSegments.map((seg, i) => { + const pct = total > 0 ? (seg.value / total) * 100 : 0 + const pctLabel = pct.toFixed(1).replace('.', decimalSep) + '%' + const c2 = hexLighten(seg.color, 0.2) + const chipColor = isDark ? hexLighten(seg.color, 0.35) : seg.color + return ( +
e.currentTarget.style.background = theme.rowHover} + onMouseLeave={e => e.currentTarget.style.background = 'transparent'} + > +
+
+
{seg.name}
+
{fmt(seg.value, currency)}
+
+ {pctLabel} +
+ ) + })} +
-
- )} + ) + })()}
diff --git a/client/src/components/Files/FileManager.tsx b/client/src/components/Files/FileManager.tsx index 6092806a..a5c5b262 100644 --- a/client/src/components/Files/FileManager.tsx +++ b/client/src/components/Files/FileManager.tsx @@ -779,25 +779,81 @@ export default function FileManager({ files = [], onUpload, onDelete, onUpdate, document.body )} - {/* Header */} -
-
-

{showTrash ? (t('files.trash') || 'Trash') : t('files.title')}

-

- {showTrash - ? `${trashFiles.length} ${trashFiles.length === 1 ? 'file' : 'files'}` - : (files.length === 1 ? t('files.countSingular') : t('files.count', { count: files.length }))} -

-
- +

+ {showTrash ? (t('files.trash') || 'Trash') : t('files.title')} +

+ + {!showTrash && ( + <> +
+
+ {[ + { id: 'all', label: t('files.filterAll') }, + ...(files.some(f => f.starred) ? [{ id: 'starred', icon: Star } as const] : []), + { id: 'pdf', label: t('files.filterPdf') }, + { id: 'image', label: t('files.filterImages') }, + { id: 'doc', label: t('files.filterDocs') }, + ...(files.some(f => f.note_id) ? [{ id: 'collab', label: t('files.filterCollab') || 'Collab' }] : []), + ].map(tab => { + const active = filterType === tab.id + const TabIcon = 'icon' in tab ? tab.icon : null + const count = tab.id === 'all' ? files.length + : tab.id === 'starred' ? files.filter(f => f.starred).length + : tab.id === 'pdf' ? files.filter(f => (f.mime_type || '').includes('pdf') || /\.pdf$/i.test(f.original_name)).length + : tab.id === 'image' ? files.filter(f => (f.mime_type || '').startsWith('image/')).length + : tab.id === 'doc' ? files.filter(f => /\.(docx?|xlsx?|txt|csv)$/i.test(f.original_name)).length + : tab.id === 'collab' ? files.filter(f => f.note_id).length + : 0 + return ( + + ) + })} +
+ + )} + + +
{showTrash ? ( @@ -835,7 +891,7 @@ export default function FileManager({ files = [], onUpload, onDelete, onUpdate, {can('file_upload', trip) &&
} {/* Filter tabs */} -
+
{[ { id: 'all', label: t('files.filterAll') }, ...(files.some(f => f.starred) ? [{ id: 'starred', icon: Star }] : []), @@ -883,7 +939,7 @@ export default function FileManager({ files = [], onUpload, onDelete, onUpdate,
{/* File list */} -
+
{filteredFiles.length === 0 ? (
diff --git a/client/src/components/Packing/PackingListPanel.tsx b/client/src/components/Packing/PackingListPanel.tsx index d5745476..75889262 100644 --- a/client/src/components/Packing/PackingListPanel.tsx +++ b/client/src/components/Packing/PackingListPanel.tsx @@ -729,9 +729,10 @@ function MenuItem({ icon, label, onClick, danger }: MenuItemProps) { interface PackingListPanelProps { tripId: number items: PackingItem[] + openImportSignal?: number } -export default function PackingListPanel({ tripId, items }: PackingListPanelProps) { +export default function PackingListPanel({ tripId, items, openImportSignal = 0 }: PackingListPanelProps) { const [filter, setFilter] = useState('alle') // 'alle' | 'offen' | 'erledigt' const [addingCategory, setAddingCategory] = useState(false) const [newCatName, setNewCatName] = useState('') @@ -896,6 +897,14 @@ export default function PackingListPanel({ tripId, items }: PackingListPanelProp const [saveTemplateName, setSaveTemplateName] = useState('') const [showImportModal, setShowImportModal] = useState(false) const [importText, setImportText] = useState('') + const lastHandledImportSignal = useRef(openImportSignal) + + useEffect(() => { + if (openImportSignal !== lastHandledImportSignal.current && openImportSignal > 0) { + setShowImportModal(true) + } + lastHandledImportSignal.current = openImportSignal + }, [openImportSignal]) const csvInputRef = useRef(null) const templateDropdownRef = useRef(null) @@ -999,14 +1008,13 @@ export default function PackingListPanel({ tripId, items }: PackingListPanelProp
{/* ── Header ── */} -
-
-
-

{t('packing.title')}

-

- {items.length === 0 ? t('packing.empty') : t('packing.progress', { packed: abgehakt, total: items.length, percent: fortschritt })} +

+
+ {items.length > 0 ? ( +

+ {t('packing.progress', { packed: abgehakt, total: items.length, percent: fortschritt })}

-
+ ) : }
{canEdit && abgehakt > 0 && ( )} - {canEdit && ( - - )} {canEdit && availableTemplates.length > 0 && (
{/* Categories */} @@ -251,27 +264,6 @@ export default function TodoListPanel({ tripId, items }: { tripId: number; items
- {/* Add task */} - {canEdit && ( -
- -
- )} - {/* Task list */}
{filtered.length === 0 ? null : ( @@ -407,19 +399,28 @@ export default function TodoListPanel({ tripId, items }: { tripId: number; items
)} - {isAddingNew && !selectedItem && !isMobile && ( - { setIsAddingNew(false); setSelectedId(id) }} - onClose={() => setIsAddingNew(false)} - /> - )} - {isAddingNew && !selectedItem && isMobile && ( + {isAddingNew && !selectedItem && !isMobile && ReactDOM.createPortal(
{ if (e.target === e.currentTarget) setIsAddingNew(false) }} - style={{ position: 'fixed', inset: 0, zIndex: 1000, background: 'rgba(0,0,0,0.4)', display: 'flex', justifyContent: 'center', alignItems: 'flex-end' }}> + className="modal-backdrop" + style={{ position: 'fixed', inset: 0, zIndex: 300, background: 'rgba(15,23,42,0.5)', display: 'flex', justifyContent: 'center', alignItems: 'flex-start', paddingTop: 'calc(var(--nav-h) + 60px)', paddingBottom: 40 }}> +
{ if (el) { const child = el.firstElementChild as HTMLElement; if (child) { child.style.width = '100%'; child.style.borderLeft = 'none'; child.style.borderRadius = '16px' } } }}> + { setIsAddingNew(false); setSelectedId(id) }} + onClose={() => setIsAddingNew(false)} + /> +
+
, + document.body + )} + {isAddingNew && !selectedItem && isMobile && ReactDOM.createPortal( +
{ if (e.target === e.currentTarget) setIsAddingNew(false) }} + className="modal-backdrop" + style={{ position: 'fixed', inset: 0, zIndex: 300, background: 'rgba(0,0,0,0.4)', display: 'flex', justifyContent: 'center', alignItems: 'flex-end' }}>
{ if (el) { const child = el.firstElementChild as HTMLElement; if (child) { child.style.width = '100%'; child.style.borderLeft = 'none'; child.style.borderRadius = '16px 16px 0 0' } } }}> setIsAddingNew(false)} />
-
+
, + document.body )}
) @@ -647,6 +649,7 @@ function NewTaskPane({ tripId, categories, members, defaultCategory, onCreated, const [desc, setDesc] = useState('') const [dueDate, setDueDate] = useState('') const [category, setCategory] = useState(defaultCategory || '') + const [addingCategory, setAddingCategoryInline] = useState(false) const [assignedUserId, setAssignedUserId] = useState(null) const [priority, setPriority] = useState(0) const [saving, setSaving] = useState(false) @@ -657,9 +660,10 @@ function NewTaskPane({ tripId, categories, members, defaultCategory, onCreated, if (!name.trim()) return setSaving(true) try { + const trimmedCategory = category.trim() const item = await addTodoItem(tripId, { name: name.trim(), description: desc || null, priority, - due_date: dueDate || null, category: category || null, + due_date: dueDate || null, category: trimmedCategory || null, assigned_user_id: assignedUserId, } as any) if (item?.id) onCreated(item.id) @@ -696,19 +700,49 @@ function NewTaskPane({ tripId, categories, members, defaultCategory, onCreated,
- setCategory(v)} - options={[ - { value: '', label: t('todo.noCategory') }, - ...categories.map(c => ({ - value: c, label: c, - icon: , - })), - ]} - placeholder={t('todo.noCategory')} - size="sm" - /> + {addingCategory ? ( +
+ setCategory(e.target.value)} + onKeyDown={e => { if (e.key === 'Enter') setAddingCategoryInline(false); if (e.key === 'Escape') { setCategory(''); setAddingCategoryInline(false) } }} + placeholder={t('todo.newCategory')} + style={{ flex: 1, fontSize: 13, padding: '8px 10px', border: '1px solid var(--border-primary)', borderRadius: 8, background: 'var(--bg-primary)', color: 'var(--text-primary)', fontFamily: 'inherit', outline: 'none' }} + /> + +
+ ) : ( +
+
+ setCategory(v)} + options={[ + { value: '', label: t('todo.noCategory') }, + ...categories.map(c => ({ + value: c, label: c, + icon: , + })), + ...(category && !categories.includes(category) ? [{ + value: category, label: `${category} (${t('todo.newCategoryLabel') || 'new'})`, + icon: , + }] : []), + ]} + placeholder={t('todo.noCategory')} + size="sm" + /> +
+ +
+ )}
diff --git a/client/src/i18n/translations/ar.ts b/client/src/i18n/translations/ar.ts index 78a252d4..4fee95ba 100644 --- a/client/src/i18n/translations/ar.ts +++ b/client/src/i18n/translations/ar.ts @@ -1017,6 +1017,15 @@ const ar: Record = { 'reservations.meta.flightNumber': 'رقم الرحلة', 'reservations.meta.from': 'من', 'reservations.meta.to': 'إلى', + 'reservations.needsReview': 'مراجعة', + 'reservations.needsReviewHint': 'تعذّر مطابقة المطار تلقائياً — يرجى تأكيد الموقع.', + 'reservations.searchLocation': 'ابحث عن محطة، ميناء، عنوان...', + 'airport.searchPlaceholder': 'رمز المطار أو المدينة (مثل FRA)', + 'map.connections': 'الاتصالات', + 'map.showConnections': 'عرض مسارات الحجوزات', + 'map.hideConnections': 'إخفاء مسارات الحجوزات', + 'settings.bookingLabels': 'تسميات مسارات الحجوزات', + 'settings.bookingLabelsHint': 'عرض أسماء المحطات/المطارات على الخريطة. عند الإيقاف، يتم عرض الرمز فقط.', 'reservations.meta.trainNumber': 'رقم القطار', 'reservations.meta.platform': 'المنصة', 'reservations.meta.seat': 'المقعد', @@ -1035,7 +1044,7 @@ const ar: Record = { 'reservations.type.hotel': 'إقامة', 'reservations.type.restaurant': 'مطعم', 'reservations.type.train': 'قطار', - 'reservations.type.car': 'سيارة مستأجرة', + 'reservations.type.car': 'سيارة', 'reservations.type.cruise': 'رحلة بحرية', 'reservations.type.event': 'فعالية', 'reservations.type.tour': 'جولة', @@ -1799,7 +1808,11 @@ const ar: Record = { 'todo.unassigned': 'غير مُسنَد', 'todo.noCategory': 'بدون فئة', 'todo.hasDescription': 'له وصف', - 'todo.addItem': 'إضافة مهمة جديدة...', + 'todo.addItem': 'إضافة مهمة جديدة', + 'todo.sidebar.sortBy': 'ترتيب حسب', + 'todo.priority': 'الأولوية', + 'todo.newCategoryLabel': 'جديد', + 'budget.categoriesLabel': 'فئات', 'todo.newCategory': 'اسم الفئة', 'todo.addCategory': 'إضافة فئة', 'todo.newItem': 'مهمة جديدة', diff --git a/client/src/i18n/translations/br.ts b/client/src/i18n/translations/br.ts index c332301e..bb79b211 100644 --- a/client/src/i18n/translations/br.ts +++ b/client/src/i18n/translations/br.ts @@ -986,6 +986,15 @@ const br: Record = { 'reservations.meta.flightNumber': 'Nº do voo', 'reservations.meta.from': 'De', 'reservations.meta.to': 'Para', + 'reservations.needsReview': 'Verificar', + 'reservations.needsReviewHint': 'Aeroporto não pôde ser identificado automaticamente — confirme o local.', + 'reservations.searchLocation': 'Buscar estação, porto, endereço...', + 'airport.searchPlaceholder': 'Código ou cidade do aeroporto (ex. FRA)', + 'map.connections': 'Conexões', + 'map.showConnections': 'Mostrar rotas de reservas', + 'map.hideConnections': 'Ocultar rotas de reservas', + 'settings.bookingLabels': 'Rótulos das rotas de reservas', + 'settings.bookingLabelsHint': 'Mostra nomes de estações / aeroportos no mapa. Desativado, apenas o ícone aparece.', 'reservations.meta.trainNumber': 'Nº do trem', 'reservations.meta.platform': 'Plataforma', 'reservations.meta.seat': 'Assento', @@ -1004,7 +1013,7 @@ const br: Record = { 'reservations.type.hotel': 'Hospedagem', 'reservations.type.restaurant': 'Restaurante', 'reservations.type.train': 'Trem', - 'reservations.type.car': 'Carro alugado', + 'reservations.type.car': 'Carro', 'reservations.type.cruise': 'Cruzeiro', 'reservations.type.event': 'Evento', 'reservations.type.tour': 'Passeio', @@ -1748,7 +1757,11 @@ const br: Record = { 'todo.unassigned': 'Não atribuído', 'todo.noCategory': 'Sem categoria', 'todo.hasDescription': 'Com descrição', - 'todo.addItem': 'Adicionar nova tarefa...', + 'todo.addItem': 'Nova tarefa', + 'todo.sidebar.sortBy': 'Ordenar por', + 'todo.priority': 'Prioridade', + 'todo.newCategoryLabel': 'nova', + 'budget.categoriesLabel': 'categorias', 'todo.newCategory': 'Nome da categoria', 'todo.addCategory': 'Adicionar categoria', 'todo.newItem': 'Nova tarefa', diff --git a/client/src/i18n/translations/cs.ts b/client/src/i18n/translations/cs.ts index 9bda2153..101d1ae7 100644 --- a/client/src/i18n/translations/cs.ts +++ b/client/src/i18n/translations/cs.ts @@ -1015,6 +1015,15 @@ const cs: Record = { 'reservations.meta.flightNumber': 'Číslo letu', 'reservations.meta.from': 'Z', 'reservations.meta.to': 'Do', + 'reservations.needsReview': 'Zkontrolovat', + 'reservations.needsReviewHint': 'Letiště nebylo možné automaticky rozpoznat — potvrďte prosím místo.', + 'reservations.searchLocation': 'Hledat stanici, přístav, adresu...', + 'airport.searchPlaceholder': 'Kód letiště nebo město (např. FRA)', + 'map.connections': 'Spojení', + 'map.showConnections': 'Zobrazit trasy rezervací', + 'map.hideConnections': 'Skrýt trasy rezervací', + 'settings.bookingLabels': 'Popisky tras rezervací', + 'settings.bookingLabelsHint': 'Zobrazuje názvy stanic / letišť na mapě. Pokud je vypnuto, zobrazí se pouze ikona.', 'reservations.meta.trainNumber': 'Číslo vlaku', 'reservations.meta.platform': 'Nástupiště', 'reservations.meta.seat': 'Sedadlo', @@ -1033,7 +1042,7 @@ const cs: Record = { 'reservations.type.hotel': 'Ubytování', 'reservations.type.restaurant': 'Restaurace', 'reservations.type.train': 'Vlak', - 'reservations.type.car': 'Pronájem auta', + 'reservations.type.car': 'Auto', 'reservations.type.cruise': 'Plavba', 'reservations.type.event': 'Událost', 'reservations.type.tour': 'Prohlídka', @@ -1753,7 +1762,11 @@ const cs: Record = { 'todo.unassigned': 'Nepřiřazeno', 'todo.noCategory': 'Bez kategorie', 'todo.hasDescription': 'Má popis', - 'todo.addItem': 'Přidat nový úkol...', + 'todo.addItem': 'Přidat nový úkol', + 'todo.sidebar.sortBy': 'Řadit podle', + 'todo.priority': 'Priorita', + 'todo.newCategoryLabel': 'nová', + 'budget.categoriesLabel': 'kategorie', 'todo.newCategory': 'Název kategorie', 'todo.addCategory': 'Přidat kategorii', 'todo.newItem': 'Nový úkol', diff --git a/client/src/i18n/translations/de.ts b/client/src/i18n/translations/de.ts index 17848b88..8746358e 100644 --- a/client/src/i18n/translations/de.ts +++ b/client/src/i18n/translations/de.ts @@ -1044,7 +1044,7 @@ const de: Record = { 'reservations.type.hotel': 'Unterkunft', 'reservations.type.restaurant': 'Restaurant', 'reservations.type.train': 'Zug', - 'reservations.type.car': 'Mietwagen', + 'reservations.type.car': 'Auto', 'reservations.type.cruise': 'Kreuzfahrt', 'reservations.type.event': 'Veranstaltung', 'reservations.type.tour': 'Tour', @@ -1765,7 +1765,11 @@ const de: Record = { 'todo.unassigned': 'Nicht zugewiesen', 'todo.noCategory': 'Keine Kategorie', 'todo.hasDescription': 'Hat Beschreibung', - 'todo.addItem': 'Neue Aufgabe hinzufügen...', + 'todo.addItem': 'Neue Aufgabe hinzufügen', + 'todo.sidebar.sortBy': 'Sortieren nach', + 'todo.priority': 'Priorität', + 'todo.newCategoryLabel': 'neu', + 'budget.categoriesLabel': 'Kategorien', 'todo.newCategory': 'Kategoriename', 'todo.addCategory': 'Kategorie hinzufügen', 'todo.newItem': 'Neue Aufgabe', diff --git a/client/src/i18n/translations/en.ts b/client/src/i18n/translations/en.ts index 2ca59d37..e0fe0459 100644 --- a/client/src/i18n/translations/en.ts +++ b/client/src/i18n/translations/en.ts @@ -1097,7 +1097,7 @@ const en: Record = { 'reservations.type.hotel': 'Accommodation', 'reservations.type.restaurant': 'Restaurant', 'reservations.type.train': 'Train', - 'reservations.type.car': 'Rental Car', + 'reservations.type.car': 'Car', 'reservations.type.cruise': 'Cruise', 'reservations.type.event': 'Event', 'reservations.type.tour': 'Tour', @@ -1827,7 +1827,11 @@ const en: Record = { 'todo.unassigned': 'Unassigned', 'todo.noCategory': 'No category', 'todo.hasDescription': 'Has description', - 'todo.addItem': 'Add new task...', + 'todo.addItem': 'Add new task', + 'todo.sidebar.sortBy': 'Sort by', + 'todo.priority': 'Priority', + 'todo.newCategoryLabel': 'new', + 'budget.categoriesLabel': 'categories', 'todo.newCategory': 'Category name', 'todo.addCategory': 'Add category', 'todo.newItem': 'New task', diff --git a/client/src/i18n/translations/es.ts b/client/src/i18n/translations/es.ts index 2de8f1c7..f776a1ed 100644 --- a/client/src/i18n/translations/es.ts +++ b/client/src/i18n/translations/es.ts @@ -990,7 +990,7 @@ const es: Record = { 'reservations.type.hotel': 'Alojamiento', 'reservations.type.restaurant': 'Restaurante', 'reservations.type.train': 'Tren', - 'reservations.type.car': 'Coche de alquiler', + 'reservations.type.car': 'Coche', 'reservations.type.cruise': 'Crucero', 'reservations.type.event': 'Evento', 'reservations.type.tour': 'Excursión', @@ -1618,6 +1618,15 @@ const es: Record = { 'reservations.meta.flightNumber': 'N° de vuelo', 'reservations.meta.from': 'Desde', 'reservations.meta.to': 'Hasta', + 'reservations.needsReview': 'Revisar', + 'reservations.needsReviewHint': 'No se pudo identificar el aeropuerto automáticamente — por favor confirma la ubicación.', + 'reservations.searchLocation': 'Buscar estación, puerto, dirección...', + 'airport.searchPlaceholder': 'Código o ciudad del aeropuerto (ej. FRA)', + 'map.connections': 'Conexiones', + 'map.showConnections': 'Mostrar rutas de reservas', + 'map.hideConnections': 'Ocultar rutas de reservas', + 'settings.bookingLabels': 'Etiquetas de rutas de reservas', + 'settings.bookingLabelsHint': 'Muestra nombres de estaciones / aeropuertos en el mapa. Desactivado, solo se muestra el icono.', 'reservations.meta.trainNumber': 'N° de tren', 'reservations.meta.platform': 'Andén', 'reservations.meta.seat': 'Asiento', @@ -1758,7 +1767,11 @@ const es: Record = { 'todo.unassigned': 'Sin asignar', 'todo.noCategory': 'Sin categoría', 'todo.hasDescription': 'Con descripción', - 'todo.addItem': 'Añadir nueva tarea...', + 'todo.addItem': 'Nueva tarea', + 'todo.sidebar.sortBy': 'Ordenar por', + 'todo.priority': 'Prioridad', + 'todo.newCategoryLabel': 'nueva', + 'budget.categoriesLabel': 'categorías', 'todo.newCategory': 'Nombre de la categoría', 'todo.addCategory': 'Añadir categoría', 'todo.newItem': 'Nueva tarea', diff --git a/client/src/i18n/translations/fr.ts b/client/src/i18n/translations/fr.ts index e9de6556..e7b43bc3 100644 --- a/client/src/i18n/translations/fr.ts +++ b/client/src/i18n/translations/fr.ts @@ -1013,6 +1013,15 @@ const fr: Record = { 'reservations.meta.flightNumber': 'N° de vol', 'reservations.meta.from': 'De', 'reservations.meta.to': 'À', + 'reservations.needsReview': 'Vérifier', + 'reservations.needsReviewHint': 'L\'aéroport n\'a pas pu être identifié automatiquement — veuillez confirmer l\'emplacement.', + 'reservations.searchLocation': 'Rechercher une gare, un port, une adresse…', + 'airport.searchPlaceholder': 'Code ou ville de l\'aéroport (ex. FRA)', + 'map.connections': 'Connexions', + 'map.showConnections': 'Afficher les itinéraires', + 'map.hideConnections': 'Masquer les itinéraires', + 'settings.bookingLabels': 'Étiquettes des itinéraires', + 'settings.bookingLabelsHint': 'Affiche les noms des gares / aéroports sur la carte. Si désactivé, seule l\'icône est affichée.', 'reservations.meta.trainNumber': 'N° de train', 'reservations.meta.platform': 'Quai', 'reservations.meta.seat': 'Place', @@ -1031,7 +1040,7 @@ const fr: Record = { 'reservations.type.hotel': 'Hébergement', 'reservations.type.restaurant': 'Restaurant', 'reservations.type.train': 'Train', - 'reservations.type.car': 'Voiture de location', + 'reservations.type.car': 'Voiture', 'reservations.type.cruise': 'Croisière', 'reservations.type.event': 'Événement', 'reservations.type.tour': 'Visite', @@ -1752,7 +1761,11 @@ const fr: Record = { 'todo.unassigned': 'Non assigné', 'todo.noCategory': 'Aucune catégorie', 'todo.hasDescription': 'Avec description', - 'todo.addItem': 'Ajouter une tâche...', + 'todo.addItem': 'Nouvelle tâche', + 'todo.sidebar.sortBy': 'Trier par', + 'todo.priority': 'Priorité', + 'todo.newCategoryLabel': 'nouvelle', + 'budget.categoriesLabel': 'catégories', 'todo.newCategory': 'Nom de la catégorie', 'todo.addCategory': 'Ajouter une catégorie', 'todo.newItem': 'Nouvelle tâche', diff --git a/client/src/i18n/translations/hu.ts b/client/src/i18n/translations/hu.ts index f02ed627..a69b39ca 100644 --- a/client/src/i18n/translations/hu.ts +++ b/client/src/i18n/translations/hu.ts @@ -1015,6 +1015,15 @@ const hu: Record = { 'reservations.meta.flightNumber': 'Járatszám', 'reservations.meta.from': 'Honnan', 'reservations.meta.to': 'Hová', + 'reservations.needsReview': 'Ellenőrzés', + 'reservations.needsReviewHint': 'A repülőteret nem sikerült automatikusan azonosítani — erősítsd meg a helyet.', + 'reservations.searchLocation': 'Állomás, kikötő, cím keresése...', + 'airport.searchPlaceholder': 'Repülőtér kódja vagy város (pl. FRA)', + 'map.connections': 'Kapcsolatok', + 'map.showConnections': 'Foglalási útvonalak megjelenítése', + 'map.hideConnections': 'Foglalási útvonalak elrejtése', + 'settings.bookingLabels': 'Útvonal-címkék a foglalásokhoz', + 'settings.bookingLabelsHint': 'Állomás- / repülőtér-nevek megjelenítése a térképen. Ha ki van kapcsolva, csak az ikon látszik.', 'reservations.meta.trainNumber': 'Vonatszám', 'reservations.meta.platform': 'Vágány', 'reservations.meta.seat': 'Ülés', @@ -1033,7 +1042,7 @@ const hu: Record = { 'reservations.type.hotel': 'Szálloda', 'reservations.type.restaurant': 'Étterem', 'reservations.type.train': 'Vonat', - 'reservations.type.car': 'Autóbérlés', + 'reservations.type.car': 'Autó', 'reservations.type.cruise': 'Hajóút', 'reservations.type.event': 'Esemény', 'reservations.type.tour': 'Túra', @@ -1750,7 +1759,11 @@ const hu: Record = { 'todo.unassigned': 'Nem hozzárendelt', 'todo.noCategory': 'Nincs kategória', 'todo.hasDescription': 'Van leírás', - 'todo.addItem': 'Új feladat hozzáadása...', + 'todo.addItem': 'Új feladat', + 'todo.sidebar.sortBy': 'Rendezés', + 'todo.priority': 'Prioritás', + 'todo.newCategoryLabel': 'új', + 'budget.categoriesLabel': 'kategóriák', 'todo.newCategory': 'Kategória neve', 'todo.addCategory': 'Kategória hozzáadása', 'todo.newItem': 'Új feladat', diff --git a/client/src/i18n/translations/id.ts b/client/src/i18n/translations/id.ts index d00b12d5..34d2a2ca 100644 --- a/client/src/i18n/translations/id.ts +++ b/client/src/i18n/translations/id.ts @@ -1070,6 +1070,15 @@ const id: Record = { 'reservations.meta.flightNumber': 'No. Penerbangan', 'reservations.meta.from': 'Dari', 'reservations.meta.to': 'Ke', + 'reservations.needsReview': 'Tinjau', + 'reservations.needsReviewHint': 'Bandara tidak dapat dicocokkan otomatis — konfirmasi lokasi.', + 'reservations.searchLocation': 'Cari stasiun, pelabuhan, alamat...', + 'airport.searchPlaceholder': 'Kode bandara atau kota (mis. FRA)', + 'map.connections': 'Koneksi', + 'map.showConnections': 'Tampilkan rute pemesanan', + 'map.hideConnections': 'Sembunyikan rute pemesanan', + 'settings.bookingLabels': 'Label rute pemesanan', + 'settings.bookingLabelsHint': 'Menampilkan nama stasiun / bandara di peta. Jika mati, hanya ikon ditampilkan.', 'reservations.meta.trainNumber': 'No. Kereta', 'reservations.meta.platform': 'Peron', 'reservations.meta.seat': 'Kursi', @@ -1088,7 +1097,7 @@ const id: Record = { 'reservations.type.hotel': 'Akomodasi', 'reservations.type.restaurant': 'Restoran', 'reservations.type.train': 'Kereta', - 'reservations.type.car': 'Mobil Sewa', + 'reservations.type.car': 'Mobil', 'reservations.type.cruise': 'Kapal Pesiar', 'reservations.type.event': 'Acara', 'reservations.type.tour': 'Tur', @@ -1818,7 +1827,11 @@ const id: Record = { 'todo.unassigned': 'Belum ditugaskan', 'todo.noCategory': 'Tanpa kategori', 'todo.hasDescription': 'Ada deskripsi', - 'todo.addItem': 'Tambah tugas baru...', + 'todo.addItem': 'Tugas baru', + 'todo.sidebar.sortBy': 'Urutkan', + 'todo.priority': 'Prioritas', + 'todo.newCategoryLabel': 'baru', + 'budget.categoriesLabel': 'kategori', 'todo.newCategory': 'Nama kategori', 'todo.addCategory': 'Tambah kategori', 'todo.newItem': 'Tugas baru', diff --git a/client/src/i18n/translations/it.ts b/client/src/i18n/translations/it.ts index 5c882695..8ae966fa 100644 --- a/client/src/i18n/translations/it.ts +++ b/client/src/i18n/translations/it.ts @@ -1014,6 +1014,15 @@ const it: Record = { 'reservations.meta.flightNumber': 'N. volo', 'reservations.meta.from': 'Da', 'reservations.meta.to': 'A', + 'reservations.needsReview': 'Verifica', + 'reservations.needsReviewHint': 'L\'aeroporto non è stato riconosciuto automaticamente — conferma la posizione.', + 'reservations.searchLocation': 'Cerca stazione, porto, indirizzo...', + 'airport.searchPlaceholder': 'Codice o città dell\'aeroporto (es. FRA)', + 'map.connections': 'Connessioni', + 'map.showConnections': 'Mostra percorsi prenotati', + 'map.hideConnections': 'Nascondi percorsi prenotati', + 'settings.bookingLabels': 'Etichette percorsi prenotati', + 'settings.bookingLabelsHint': 'Mostra i nomi di stazioni / aeroporti sulla mappa. Se disattivato, viene mostrata solo l\'icona.', 'reservations.meta.trainNumber': 'N. treno', 'reservations.meta.platform': 'Binario', 'reservations.meta.seat': 'Posto', @@ -1032,7 +1041,7 @@ const it: Record = { 'reservations.type.hotel': 'Alloggio', 'reservations.type.restaurant': 'Ristorante', 'reservations.type.train': 'Treno', - 'reservations.type.car': 'Auto a noleggio', + 'reservations.type.car': 'Auto', 'reservations.type.cruise': 'Crociera', 'reservations.type.event': 'Evento', 'reservations.type.tour': 'Tour', @@ -1753,7 +1762,11 @@ const it: Record = { 'todo.unassigned': 'Non assegnato', 'todo.noCategory': 'Nessuna categoria', 'todo.hasDescription': 'Ha descrizione', - 'todo.addItem': 'Aggiungi nuova attività...', + 'todo.addItem': 'Nuova attività', + 'todo.sidebar.sortBy': 'Ordina per', + 'todo.priority': 'Priorità', + 'todo.newCategoryLabel': 'nuova', + 'budget.categoriesLabel': 'categorie', 'todo.newCategory': 'Nome categoria', 'todo.addCategory': 'Aggiungi categoria', 'todo.newItem': 'Nuova attività', diff --git a/client/src/i18n/translations/nl.ts b/client/src/i18n/translations/nl.ts index 82620e2d..61c63d9e 100644 --- a/client/src/i18n/translations/nl.ts +++ b/client/src/i18n/translations/nl.ts @@ -1013,6 +1013,15 @@ const nl: Record = { 'reservations.meta.flightNumber': 'Vluchtnr.', 'reservations.meta.from': 'Van', 'reservations.meta.to': 'Naar', + 'reservations.needsReview': 'Controleren', + 'reservations.needsReviewHint': 'Luchthaven kon niet automatisch worden herkend — bevestig de locatie.', + 'reservations.searchLocation': 'Station, haven, adres zoeken...', + 'airport.searchPlaceholder': 'Luchthavencode of stad (bijv. FRA)', + 'map.connections': 'Verbindingen', + 'map.showConnections': 'Boekingsroutes tonen', + 'map.hideConnections': 'Boekingsroutes verbergen', + 'settings.bookingLabels': 'Routelabels voor boekingen', + 'settings.bookingLabelsHint': 'Toon station- / luchthavennamen op de kaart. Indien uit, alleen het icoon.', 'reservations.meta.trainNumber': 'Treinnr.', 'reservations.meta.platform': 'Perron', 'reservations.meta.seat': 'Stoel', @@ -1031,7 +1040,7 @@ const nl: Record = { 'reservations.type.hotel': 'Accommodatie', 'reservations.type.restaurant': 'Restaurant', 'reservations.type.train': 'Trein', - 'reservations.type.car': 'Huurauto', + 'reservations.type.car': 'Auto', 'reservations.type.cruise': 'Cruise', 'reservations.type.event': 'Evenement', 'reservations.type.tour': 'Rondleiding', @@ -1752,7 +1761,11 @@ const nl: Record = { 'todo.unassigned': 'Niet toegewezen', 'todo.noCategory': 'Geen categorie', 'todo.hasDescription': 'Heeft beschrijving', - 'todo.addItem': 'Nieuwe taak toevoegen...', + 'todo.addItem': 'Nieuwe taak', + 'todo.sidebar.sortBy': 'Sorteren op', + 'todo.priority': 'Prioriteit', + 'todo.newCategoryLabel': 'nieuw', + 'budget.categoriesLabel': 'categorieën', 'todo.newCategory': 'Categorienaam', 'todo.addCategory': 'Categorie toevoegen', 'todo.newItem': 'Nieuwe taak', diff --git a/client/src/i18n/translations/pl.ts b/client/src/i18n/translations/pl.ts index ce254be0..0d6838b9 100644 --- a/client/src/i18n/translations/pl.ts +++ b/client/src/i18n/translations/pl.ts @@ -989,6 +989,15 @@ const pl: Record = { 'reservations.type.restaurant': 'Restauracja', 'reservations.type.train': 'Pociąg', 'reservations.type.car': 'Samochód', + 'reservations.needsReview': 'Sprawdź', + 'reservations.needsReviewHint': 'Nie udało się automatycznie dopasować lotniska — potwierdź lokalizację.', + 'reservations.searchLocation': 'Szukaj stacji, portu, adresu...', + 'airport.searchPlaceholder': 'Kod lotniska lub miasto (np. FRA)', + 'map.connections': 'Połączenia', + 'map.showConnections': 'Pokaż trasy rezerwacji', + 'map.hideConnections': 'Ukryj trasy rezerwacji', + 'settings.bookingLabels': 'Etykiety tras rezerwacji', + 'settings.bookingLabelsHint': 'Pokazuje nazwy stacji / lotnisk na mapie. Gdy wyłączone, wyświetlana jest tylko ikona.', 'reservations.type.cruise': 'Rejs', 'reservations.type.event': 'Wydarzenie', 'reservations.type.tour': 'Wycieczka', @@ -1801,7 +1810,11 @@ const pl: Record = { 'todo.unassigned': 'Nieprzypisane', 'todo.noCategory': 'Brak kategorii', 'todo.hasDescription': 'Ma opis', - 'todo.addItem': 'Dodaj nowe zadanie...', + 'todo.addItem': 'Nowe zadanie', + 'todo.sidebar.sortBy': 'Sortuj wg', + 'todo.priority': 'Priorytet', + 'todo.newCategoryLabel': 'nowa', + 'budget.categoriesLabel': 'kategorie', 'todo.newCategory': 'Nazwa kategorii', 'todo.addCategory': 'Dodaj kategorię', 'todo.newItem': 'Nowe zadanie', diff --git a/client/src/i18n/translations/ru.ts b/client/src/i18n/translations/ru.ts index 88668155..def9742b 100644 --- a/client/src/i18n/translations/ru.ts +++ b/client/src/i18n/translations/ru.ts @@ -1013,6 +1013,15 @@ const ru: Record = { 'reservations.meta.flightNumber': 'Номер рейса', 'reservations.meta.from': 'Откуда', 'reservations.meta.to': 'Куда', + 'reservations.needsReview': 'Проверить', + 'reservations.needsReviewHint': 'Аэропорт не удалось определить автоматически — подтвердите местоположение.', + 'reservations.searchLocation': 'Искать станцию, порт, адрес...', + 'airport.searchPlaceholder': 'Код аэропорта или город (напр. FRA)', + 'map.connections': 'Соединения', + 'map.showConnections': 'Показать маршруты бронирований', + 'map.hideConnections': 'Скрыть маршруты бронирований', + 'settings.bookingLabels': 'Подписи маршрутов бронирований', + 'settings.bookingLabelsHint': 'Отображает названия станций / аэропортов на карте. Если выключено, показывается только значок.', 'reservations.meta.trainNumber': 'Номер поезда', 'reservations.meta.platform': 'Платформа', 'reservations.meta.seat': 'Место', @@ -1031,7 +1040,7 @@ const ru: Record = { 'reservations.type.hotel': 'Жильё', 'reservations.type.restaurant': 'Ресторан', 'reservations.type.train': 'Поезд', - 'reservations.type.car': 'Аренда авто', + 'reservations.type.car': 'Автомобиль', 'reservations.type.cruise': 'Круиз', 'reservations.type.event': 'Мероприятие', 'reservations.type.tour': 'Экскурсия', @@ -1749,7 +1758,11 @@ const ru: Record = { 'todo.unassigned': 'Не назначено', 'todo.noCategory': 'Без категории', 'todo.hasDescription': 'Есть описание', - 'todo.addItem': 'Добавить новую задачу...', + 'todo.addItem': 'Новая задача', + 'todo.sidebar.sortBy': 'Сортировать по', + 'todo.priority': 'Приоритет', + 'todo.newCategoryLabel': 'новая', + 'budget.categoriesLabel': 'категорий', 'todo.newCategory': 'Название категории', 'todo.addCategory': 'Добавить категорию', 'todo.newItem': 'Новая задача', diff --git a/client/src/i18n/translations/zh.ts b/client/src/i18n/translations/zh.ts index d2dae779..d7d293c7 100644 --- a/client/src/i18n/translations/zh.ts +++ b/client/src/i18n/translations/zh.ts @@ -1013,6 +1013,15 @@ const zh: Record = { 'reservations.meta.flightNumber': '航班号', 'reservations.meta.from': '出发', 'reservations.meta.to': '到达', + 'reservations.needsReview': '待确认', + 'reservations.needsReviewHint': '无法自动匹配机场 — 请确认位置。', + 'reservations.searchLocation': '搜索车站、港口、地址...', + 'airport.searchPlaceholder': '机场代码或城市(如 FRA)', + 'map.connections': '连接', + 'map.showConnections': '显示预订路线', + 'map.hideConnections': '隐藏预订路线', + 'settings.bookingLabels': '预订路线标签', + 'settings.bookingLabelsHint': '在地图上显示车站 / 机场名称。关闭时仅显示图标。', 'reservations.meta.trainNumber': '车次', 'reservations.meta.platform': '站台', 'reservations.meta.seat': '座位', @@ -1031,7 +1040,7 @@ const zh: Record = { 'reservations.type.hotel': '住宿', 'reservations.type.restaurant': '餐厅', 'reservations.type.train': '火车', - 'reservations.type.car': '租车', + 'reservations.type.car': '汽车', 'reservations.type.cruise': '邮轮', 'reservations.type.event': '活动', 'reservations.type.tour': '旅游团', @@ -1749,7 +1758,11 @@ const zh: Record = { 'todo.unassigned': '未分配', 'todo.noCategory': '无分类', 'todo.hasDescription': '有描述', - 'todo.addItem': '添加新任务...', + 'todo.addItem': '新建任务', + 'todo.sidebar.sortBy': '排序方式', + 'todo.priority': '优先级', + 'todo.newCategoryLabel': '新建', + 'budget.categoriesLabel': '类别', 'todo.newCategory': '分类名称', 'todo.addCategory': '添加分类', 'todo.newItem': '新任务', diff --git a/client/src/i18n/translations/zhTw.ts b/client/src/i18n/translations/zhTw.ts index e656e804..dbbc7d3c 100644 --- a/client/src/i18n/translations/zhTw.ts +++ b/client/src/i18n/translations/zhTw.ts @@ -1069,6 +1069,15 @@ const zhTw: Record = { 'reservations.meta.flightNumber': '航班號', 'reservations.meta.from': '出發', 'reservations.meta.to': '到達', + 'reservations.needsReview': '待確認', + 'reservations.needsReviewHint': '無法自動匹配機場 — 請確認位置。', + 'reservations.searchLocation': '搜尋車站、港口、地址...', + 'airport.searchPlaceholder': '機場代碼或城市(例如 FRA)', + 'map.connections': '連接', + 'map.showConnections': '顯示預訂路線', + 'map.hideConnections': '隱藏預訂路線', + 'settings.bookingLabels': '預訂路線標籤', + 'settings.bookingLabelsHint': '在地圖上顯示車站 / 機場名稱。關閉時僅顯示圖示。', 'reservations.meta.trainNumber': '車次', 'reservations.meta.platform': '站臺', 'reservations.meta.seat': '座位', @@ -1087,7 +1096,7 @@ const zhTw: Record = { 'reservations.type.hotel': '住宿', 'reservations.type.restaurant': '餐廳', 'reservations.type.train': '火車', - 'reservations.type.car': '租車', + 'reservations.type.car': '汽車', 'reservations.type.cruise': '郵輪', 'reservations.type.event': '活動', 'reservations.type.tour': '旅遊團', @@ -1766,7 +1775,11 @@ const zhTw: Record = { 'todo.unassigned': '未指派', 'todo.noCategory': '無分類', 'todo.hasDescription': '有說明', - 'todo.addItem': '新增任務...', + 'todo.addItem': '新增任務', + 'todo.sidebar.sortBy': '排序方式', + 'todo.priority': '優先順序', + 'todo.newCategoryLabel': '新增', + 'budget.categoriesLabel': '類別', 'todo.newCategory': '分類名稱', 'todo.addCategory': '新增分類', 'todo.newItem': '新任務', diff --git a/client/src/pages/TripPlannerPage.tsx b/client/src/pages/TripPlannerPage.tsx index 3ab627e6..098c3863 100644 --- a/client/src/pages/TripPlannerPage.tsx +++ b/client/src/pages/TripPlannerPage.tsx @@ -35,36 +35,102 @@ import { useRouteCalculation } from '../hooks/useRouteCalculation' import { usePlaceSelection } from '../hooks/usePlaceSelection' import { usePlannerHistory } from '../hooks/usePlannerHistory' import type { Accommodation, TripMember, Day, Place, Reservation, PackingItem, TodoItem } from '../types' -import { ListTodo } from 'lucide-react' +import { ListTodo, Upload, Plus } from 'lucide-react' function ListsContainer({ tripId, packingItems, todoItems }: { tripId: number; packingItems: PackingItem[]; todoItems: TodoItem[] }) { const [subTab, setSubTab] = useState<'packing' | 'todo'>(() => { return (sessionStorage.getItem(`trip-lists-subtab-${tripId}`) as 'packing' | 'todo') || 'packing' }) const setSubTabPersist = (tab: 'packing' | 'todo') => { setSubTab(tab); sessionStorage.setItem(`trip-lists-subtab-${tripId}`, tab) } + const [importPackingSignal, setImportPackingSignal] = useState(0) + const [addTodoSignal, setAddTodoSignal] = useState(0) const { t } = useTranslation() + + const tabs = [ + { id: 'packing' as const, label: t('todo.subtab.packing'), icon: PackageCheck, count: packingItems.length }, + { id: 'todo' as const, label: t('todo.subtab.todo'), icon: ListTodo, count: todoItems.length }, + ] + return (
-
- {([ - { id: 'packing' as const, label: t('todo.subtab.packing'), icon: PackageCheck }, - { id: 'todo' as const, label: t('todo.subtab.todo'), icon: ListTodo }, - ]).map(tab => ( - - ))} +
+
+

+ {t('trip.tabs.lists')} +

+
+
+ {tabs.map(tab => { + const active = subTab === tab.id + const Icon = tab.icon + return ( + + ) + })} +
+ + {subTab === 'packing' && ( + + )} + {subTab === 'todo' && ( + + )} +
+
+
+ {subTab === 'packing' && } + {subTab === 'todo' && }
- {subTab === 'packing' && } - {subTab === 'todo' && }
) } @@ -940,7 +1006,7 @@ export default function TripPlannerPage(): React.ReactElement | null { )} {activeTab === 'buchungen' && ( -
+
+
)} {activeTab === 'finanzplan' && ( -
+
)} From 71637a8483f79e3e4718b1b85fc227e8aab1119a Mon Sep 17 00:00:00 2001 From: Maurice Date: Fri, 17 Apr 2026 23:56:42 +0200 Subject: [PATCH 5/7] fix(tests): restore packing panel inline header + update tests for ui changes - PackingListPanel accepts inlineHeader prop (default true) to keep its legacy title and inline import button; ListsContainer passes inlineHeader={false} since the toolbar now owns those controls - ReservationModal tests look for the renamed 'Car' button (was 'Rental Car') - Budget total-budget test asserts against the split integer/decimal spans that replaced the single text node --- .../components/Budget/BudgetPanel.test.tsx | 4 +- .../components/Packing/PackingListPanel.tsx | 37 +++++++++++++++---- .../Planner/ReservationModal.test.tsx | 4 +- client/src/pages/TripPlannerPage.tsx | 2 +- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/client/src/components/Budget/BudgetPanel.test.tsx b/client/src/components/Budget/BudgetPanel.test.tsx index c912d651..244cbc96 100644 --- a/client/src/components/Budget/BudgetPanel.test.tsx +++ b/client/src/components/Budget/BudgetPanel.test.tsx @@ -416,8 +416,8 @@ describe('BudgetPanel', () => { render(); await screen.findByText('Flight'); await screen.findByText('Hotel'); - // Grand total card shows 300.00 - expect(screen.getByText('300.00')).toBeInTheDocument(); + // Grand total card shows 300.00 (integer and decimal are rendered in separate spans) + expect(document.body.textContent?.replace(/\s+/g, '')).toMatch(/300[,.]00/); }); it('FE-COMP-BUDGET-033: read-only mode hides add/delete/edit controls', async () => { diff --git a/client/src/components/Packing/PackingListPanel.tsx b/client/src/components/Packing/PackingListPanel.tsx index 10803f68..887d36c2 100644 --- a/client/src/components/Packing/PackingListPanel.tsx +++ b/client/src/components/Packing/PackingListPanel.tsx @@ -730,9 +730,10 @@ interface PackingListPanelProps { tripId: number items: PackingItem[] openImportSignal?: number + inlineHeader?: boolean } -export default function PackingListPanel({ tripId, items, openImportSignal = 0 }: PackingListPanelProps) { +export default function PackingListPanel({ tripId, items, openImportSignal = 0, inlineHeader = true }: PackingListPanelProps) { const [filter, setFilter] = useState('alle') // 'alle' | 'offen' | 'erledigt' const [addingCategory, setAddingCategory] = useState(false) const [newCatName, setNewCatName] = useState('') @@ -1008,14 +1009,34 @@ export default function PackingListPanel({ tripId, items, openImportSignal = 0 }
{/* ── Header ── */} -
-
- {items.length > 0 ? ( -

- {t('packing.progress', { packed: abgehakt, total: items.length, percent: fortschritt })} -

- ) : } +
+
+ {inlineHeader ? ( +
+

{t('packing.title')}

+ {items.length > 0 && ( +

+ {t('packing.progress', { packed: abgehakt, total: items.length, percent: fortschritt })} +

+ )} +
+ ) : ( + items.length > 0 ? ( +

+ {t('packing.progress', { packed: abgehakt, total: items.length, percent: fortschritt })} +

+ ) : + )}
+ {inlineHeader && canEdit && ( + + )} {canEdit && abgehakt > 0 && (
- {subTab === 'packing' && } + {subTab === 'packing' && } {subTab === 'todo' && }
From 0c00f8e0b3aa8e4b957d00aad669a98025529307 Mon Sep 17 00:00:00 2001 From: Maurice Date: Sat, 18 Apr 2026 00:22:00 +0200 Subject: [PATCH 6/7] feat(about): add monthly supporters section with 5 tiers - Tier cards (Hostel Bunkmate through No Return Ticket) with gradient icons and placeholder state for empty tiers - Animated shimmer badge and subtle radial glow behind the card - Mobile-responsive layout, name chips show just the month on small screens to avoid overflow - Copy + translations for all 15 supported languages --- client/src/components/Settings/AboutTab.tsx | 227 +++++++++++++++++++- client/src/i18n/translations/ar.ts | 10 + client/src/i18n/translations/br.ts | 10 + client/src/i18n/translations/cs.ts | 10 + client/src/i18n/translations/de.ts | 10 + client/src/i18n/translations/en.ts | 10 + client/src/i18n/translations/es.ts | 10 + client/src/i18n/translations/fr.ts | 10 + client/src/i18n/translations/hu.ts | 10 + client/src/i18n/translations/id.ts | 10 + client/src/i18n/translations/it.ts | 10 + client/src/i18n/translations/nl.ts | 10 + client/src/i18n/translations/pl.ts | 10 + client/src/i18n/translations/ru.ts | 10 + client/src/i18n/translations/zh.ts | 10 + client/src/i18n/translations/zhTw.ts | 10 + 16 files changed, 375 insertions(+), 2 deletions(-) diff --git a/client/src/components/Settings/AboutTab.tsx b/client/src/components/Settings/AboutTab.tsx index d1fd0ce0..0087d4b9 100644 --- a/client/src/components/Settings/AboutTab.tsx +++ b/client/src/components/Settings/AboutTab.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Info, Coffee, Heart, ExternalLink, Bug, Lightbulb, BookOpen } from 'lucide-react' +import { Info, Coffee, Heart, ExternalLink, Bug, Lightbulb, BookOpen, Tent, Compass, Plane, Crown, Infinity as InfinityIcon } from 'lucide-react' import { useTranslation } from '../../i18n' import Section from './Section' @@ -7,8 +7,229 @@ interface Props { appVersion: string } +type SupporterTierId = 'no_return_ticket' | 'lost_luggage_vip' | 'business_class_dreamer' | 'budget_traveller' | 'hostel_bunkmate' + +interface SupporterTier { + id: SupporterTierId + labelKey: string + price: string + gradient: string + glow: string + icon: typeof Tent +} + +const SUPPORTER_TIERS: SupporterTier[] = [ + { id: 'no_return_ticket', labelKey: 'settings.about.supporter.tier.noReturnTicket', price: '∞', gradient: 'linear-gradient(135deg, #fbbf24, #ec4899 55%, #6366f1)', glow: 'rgba(236,72,153,0.45)', icon: InfinityIcon }, + { id: 'lost_luggage_vip', labelKey: 'settings.about.supporter.tier.lostLuggageVip', price: '$30', gradient: 'linear-gradient(135deg, #a855f7, #ec4899)', glow: 'rgba(168,85,247,0.35)', icon: Crown }, + { id: 'business_class_dreamer', labelKey: 'settings.about.supporter.tier.businessClassDreamer', price: '$15', gradient: 'linear-gradient(135deg, #6366f1, #0ea5e9)', glow: 'rgba(99,102,241,0.35)', icon: Plane }, + { id: 'budget_traveller', labelKey: 'settings.about.supporter.tier.budgetTraveller', price: '$10', gradient: 'linear-gradient(135deg, #14b8a6, #06b6d4)', glow: 'rgba(20,184,166,0.3)', icon: Compass }, + { id: 'hostel_bunkmate', labelKey: 'settings.about.supporter.tier.hostelBunkmate', price: '$5', gradient: 'linear-gradient(135deg, #64748b, #94a3b8)', glow: 'rgba(100,116,139,0.25)', icon: Tent }, +] + +interface Supporter { + username: string + tier: SupporterTierId + since: string + link?: string +} + +const SUPPORTERS: Supporter[] = [ + { username: 'Someone', tier: 'hostel_bunkmate', since: '2026-04' }, +] + +function SupporterSection({ t, locale }: { t: (key: string, vars?: Record) => string; locale: string }) { + if (SUPPORTERS.length === 0) return null + + const formatSince = (yearMonth: string): string => { + const [y, m] = yearMonth.split('-').map(Number) + if (!y || !m) return yearMonth + try { + return new Date(y, m - 1, 1).toLocaleDateString(locale, { year: 'numeric', month: 'long' }) + } catch { return yearMonth } + } + + return ( +
+ +
+
+ +
+ {t('settings.about.supporters.badge')} +

{t('settings.about.supporters.title')}

+
+

{t('settings.about.supporters.subtitle')}

+ +
+ {SUPPORTER_TIERS.map(tier => { + const members = SUPPORTERS.filter(s => s.tier === tier.id) + const empty = members.length === 0 + const TierIcon = tier.icon + return ( +
+
+ +
+
+
+ {t(tier.labelKey)} + {tier.price} +
+
+ {empty && ( + + {t('settings.about.supporters.tierEmpty')} + + )} + {members.map(m => { + const chipContent = ( + <> + {m.username} + + · {t('settings.about.supporters.since', { date: formatSince(m.since) })} + + + · {formatSince(m.since)} + + + ) + return m.link ? ( + { e.currentTarget.style.borderColor = 'var(--text-faint)'; e.currentTarget.style.boxShadow = `0 2px 8px ${tier.glow}` }} + onMouseLeave={e => { e.currentTarget.style.borderColor = 'var(--border-primary)'; e.currentTarget.style.boxShadow = 'none' }} + > + {chipContent} + + ) : ( +
{chipContent}
+ ) + })} +
+
+
+ ) + })} +
+
+
+ ) +} + export default function AboutTab({ appVersion }: Props): React.ReactElement { - const { t } = useTranslation() + const { t, locale } = useTranslation() return (
@@ -141,6 +362,8 @@ export default function AboutTab({ appVersion }: Props): React.ReactElement {
+ + ) } diff --git a/client/src/i18n/translations/ar.ts b/client/src/i18n/translations/ar.ts index 70886bf7..1a2e3f36 100644 --- a/client/src/i18n/translations/ar.ts +++ b/client/src/i18n/translations/ar.ts @@ -313,6 +313,16 @@ const ar: Record = { 'settings.about.featureRequest': 'اقتراح ميزة', 'settings.about.featureRequestHint': 'اقترح ميزة جديدة', 'settings.about.wikiHint': 'التوثيق والأدلة', + 'settings.about.supporters.badge': 'الداعمون الشهريون', + 'settings.about.supporters.title': 'رفاق رحلة TREK', + 'settings.about.supporters.subtitle': 'بينما تخطّط لمسارك التالي، يساعد هؤلاء الأشخاص في التخطيط لمستقبل TREK. تذهب مساهمتهم الشهرية مباشرةً إلى التطوير والساعات الفعلية المبذولة — حتى يظلّ TREK مفتوح المصدر.', + 'settings.about.supporters.since': 'داعم منذ {date}', + 'settings.about.supporters.tierEmpty': 'كن الأول', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK هو مخطط سفر مستضاف ذاتيًا يساعدك على تنظيم رحلاتك من أول فكرة حتى آخر ذكرى. تخطيط يومي، ميزانية، قوائم تعبئة، صور والمزيد — كل شيء في مكان واحد، على خادمك الخاص.', 'settings.about.madeWith': 'صُنع بـ', 'settings.about.madeBy': 'بواسطة موريس ومجتمع مفتوح المصدر متنامٍ.', diff --git a/client/src/i18n/translations/br.ts b/client/src/i18n/translations/br.ts index 0b0c010f..fa084f9d 100644 --- a/client/src/i18n/translations/br.ts +++ b/client/src/i18n/translations/br.ts @@ -240,6 +240,16 @@ const br: Record = { 'settings.about.featureRequest': 'Solicitar recurso', 'settings.about.featureRequestHint': 'Sugira um novo recurso', 'settings.about.wikiHint': 'Documentação e guias', + 'settings.about.supporters.badge': 'Apoiadores Mensais', + 'settings.about.supporters.title': 'Companheiros de viagem do TREK', + 'settings.about.supporters.subtitle': 'Enquanto você planeja sua próxima rota, essas pessoas planejam junto o futuro do TREK. A contribuição mensal delas vai direto para o desenvolvimento e horas reais investidas — para o TREK continuar Open Source.', + 'settings.about.supporters.since': 'apoiador desde {date}', + 'settings.about.supporters.tierEmpty': 'Seja o primeiro', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK é um planejador de viagens auto-hospedado que ajuda você a organizar suas viagens da primeira ideia à última lembrança. Planejamento diário, orçamento, listas de bagagem, fotos e muito mais — tudo em um só lugar, no seu próprio servidor.', 'settings.about.madeWith': 'Feito com', 'settings.about.madeBy': 'por Maurice e uma crescente comunidade open-source.', diff --git a/client/src/i18n/translations/cs.ts b/client/src/i18n/translations/cs.ts index 11df01b6..237b3864 100644 --- a/client/src/i18n/translations/cs.ts +++ b/client/src/i18n/translations/cs.ts @@ -264,6 +264,16 @@ const cs: Record = { 'settings.about.featureRequest': 'Navrhnout funkci', 'settings.about.featureRequestHint': 'Navrhněte novou funkci', 'settings.about.wikiHint': 'Dokumentace a návody', + 'settings.about.supporters.badge': 'Měsíční podporovatelé', + 'settings.about.supporters.title': 'Společníci na cestě s TREK', + 'settings.about.supporters.subtitle': 'Zatímco plánuješ další trasu, tihle lidé plánují společně se mnou budoucnost TREK. Jejich měsíční příspěvek jde přímo na vývoj a reálně strávené hodiny — aby TREK zůstal Open Source.', + 'settings.about.supporters.since': 'podporovatel od {date}', + 'settings.about.supporters.tierEmpty': 'Buď první', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK je samohostovaný plánovač cest, který vám pomůže organizovat výlety od prvního nápadu po poslední vzpomínku. Denní plánování, rozpočet, balicí seznamy, fotky a mnoho dalšího — vše na jednom místě, na vašem vlastním serveru.', 'settings.about.madeWith': 'Vytvořeno s', 'settings.about.madeBy': 'Mauricem a rostoucí open-source komunitou.', diff --git a/client/src/i18n/translations/de.ts b/client/src/i18n/translations/de.ts index 5f83d05e..4ba28523 100644 --- a/client/src/i18n/translations/de.ts +++ b/client/src/i18n/translations/de.ts @@ -313,6 +313,16 @@ const de: Record = { 'settings.about.featureRequest': 'Feature vorschlagen', 'settings.about.featureRequestHint': 'Schlage ein neues Feature vor', 'settings.about.wikiHint': 'Dokumentation & Anleitungen', + 'settings.about.supporters.badge': 'Monatliche Unterstützer', + 'settings.about.supporters.title': 'Reisebegleitung für TREK', + 'settings.about.supporters.subtitle': 'Während du deine nächste Route planst, planen diese Leute mit, wie TREK weitergeht. Ihr monatlicher Beitrag fließt direkt in Entwicklung und echten Zeitaufwand — damit TREK Open Source bleibt.', + 'settings.about.supporters.since': 'Unterstützer seit {date}', + 'settings.about.supporters.tierEmpty': 'Sei die/der Erste', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK ist ein selbst gehosteter Reiseplaner, der dir hilft, deine Trips von der ersten Idee bis zur letzten Erinnerung zu organisieren. Tagesplanung, Budget, Packlisten, Fotos und vieles mehr — alles an einem Ort, auf deinem eigenen Server.', 'settings.about.madeWith': 'Entwickelt mit', 'settings.about.madeBy': 'von Maurice und einer wachsenden Open-Source-Community.', diff --git a/client/src/i18n/translations/en.ts b/client/src/i18n/translations/en.ts index afa18607..e530e29f 100644 --- a/client/src/i18n/translations/en.ts +++ b/client/src/i18n/translations/en.ts @@ -372,6 +372,16 @@ const en: Record = { 'settings.about.featureRequest': 'Feature Request', 'settings.about.featureRequestHint': 'Suggest a new feature', 'settings.about.wikiHint': 'Documentation & guides', + 'settings.about.supporters.badge': 'Monthly Supporters', + 'settings.about.supporters.title': 'Travel companions for TREK', + 'settings.about.supporters.subtitle': "While you're planning your next route, these folks are helping plan TREK's future. Their monthly contribution goes straight into development and real hours spent — so TREK stays Open Source.", + 'settings.about.supporters.since': 'supporter since {date}', + 'settings.about.supporters.tierEmpty': 'Be the first', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK is a self-hosted travel planner that helps you organize your trips from the first idea to the last memory. Day planning, budget, packing lists, photos and much more — all in one place, on your own server.', 'settings.about.madeWith': 'Made with', 'settings.about.madeBy': 'by Maurice and a growing open-source community.', diff --git a/client/src/i18n/translations/es.ts b/client/src/i18n/translations/es.ts index 3f519274..f612ec43 100644 --- a/client/src/i18n/translations/es.ts +++ b/client/src/i18n/translations/es.ts @@ -309,6 +309,16 @@ const es: Record = { 'settings.about.featureRequest': 'Solicitar función', 'settings.about.featureRequestHint': 'Sugiere una nueva función', 'settings.about.wikiHint': 'Documentación y guías', + 'settings.about.supporters.badge': 'Patrocinadores Mensuales', + 'settings.about.supporters.title': 'Compañía de viaje para TREK', + 'settings.about.supporters.subtitle': 'Mientras planeas tu próxima ruta, estas personas ayudan a planear el futuro de TREK. Su aporte mensual va directo al desarrollo y a las horas reales invertidas — para que TREK siga siendo Open Source.', + 'settings.about.supporters.since': 'patrocinador desde {date}', + 'settings.about.supporters.tierEmpty': 'Sé el primero', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK es un planificador de viajes autoalojado que te ayuda a organizar tus viajes desde la primera idea hasta el último recuerdo. Planificación diaria, presupuesto, listas de equipaje, fotos y mucho más — todo en un solo lugar, en tu propio servidor.', 'settings.about.madeWith': 'Hecho con', 'settings.about.madeBy': 'por Maurice y una creciente comunidad de código abierto.', diff --git a/client/src/i18n/translations/fr.ts b/client/src/i18n/translations/fr.ts index 1a86abf8..f2521575 100644 --- a/client/src/i18n/translations/fr.ts +++ b/client/src/i18n/translations/fr.ts @@ -308,6 +308,16 @@ const fr: Record = { 'settings.about.featureRequest': 'Proposer une fonctionnalité', 'settings.about.featureRequestHint': 'Suggérez une nouvelle fonctionnalité', 'settings.about.wikiHint': 'Documentation et guides', + 'settings.about.supporters.badge': 'Soutiens Mensuels', + 'settings.about.supporters.title': 'Compagnons de voyage pour TREK', + 'settings.about.supporters.subtitle': 'Pendant que tu planifies ton prochain itinéraire, ces personnes aident à planifier l\'avenir de TREK. Leur contribution mensuelle va directement au développement et aux heures réellement passées — pour que TREK reste Open Source.', + 'settings.about.supporters.since': 'soutien depuis {date}', + 'settings.about.supporters.tierEmpty': 'Sois le premier', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK est un planificateur de voyage auto-hébergé qui vous aide à organiser vos voyages de la première idée au dernier souvenir. Planification journalière, budget, listes de bagages, photos et bien plus — le tout au même endroit, sur votre propre serveur.', 'settings.about.madeWith': 'Fait avec', 'settings.about.madeBy': 'par Maurice et une communauté open-source grandissante.', diff --git a/client/src/i18n/translations/hu.ts b/client/src/i18n/translations/hu.ts index 6aeb5645..8f6b20f3 100644 --- a/client/src/i18n/translations/hu.ts +++ b/client/src/i18n/translations/hu.ts @@ -263,6 +263,16 @@ const hu: Record = { 'settings.about.featureRequest': 'Funkció javaslat', 'settings.about.featureRequestHint': 'Javasolj egy új funkciót', 'settings.about.wikiHint': 'Dokumentáció és útmutatók', + 'settings.about.supporters.badge': 'Havi támogatók', + 'settings.about.supporters.title': 'Útitársak a TREK mellett', + 'settings.about.supporters.subtitle': 'Miközben te a következő útvonaladat tervezed, ők a TREK jövőjét tervezik velem együtt. Havi hozzájárulásuk közvetlenül fejlesztésre és valódi órákra fordítódik — hogy a TREK Open Source maradhasson.', + 'settings.about.supporters.since': 'támogató {date} óta', + 'settings.about.supporters.tierEmpty': 'Légy az első', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'A TREK egy saját szerveren üzemeltetett útitervező, amely segít az utazásaid megszervezésében az első ötlettől az utolsó emlékig. Napi tervezés, költségvetés, csomagolási listák, fotók és még sok más — minden egy helyen, a saját szervereden.', 'settings.about.madeWith': 'Készítve', 'settings.about.madeBy': 'Maurice és egy növekvő nyílt forráskódú közösség által.', diff --git a/client/src/i18n/translations/id.ts b/client/src/i18n/translations/id.ts index 4bfd3cf0..0c23c5f1 100644 --- a/client/src/i18n/translations/id.ts +++ b/client/src/i18n/translations/id.ts @@ -370,6 +370,16 @@ const id: Record = { 'settings.about.featureRequest': 'Permintaan Fitur', 'settings.about.featureRequestHint': 'Sarankan fitur baru', 'settings.about.wikiHint': 'Dokumentasi & panduan', + 'settings.about.supporters.badge': 'Pendukung Bulanan', + 'settings.about.supporters.title': 'Rekan perjalanan untuk TREK', + 'settings.about.supporters.subtitle': 'Saat kamu merencanakan rute berikutnya, orang-orang ini ikut merencanakan masa depan TREK. Kontribusi bulanan mereka langsung masuk ke pengembangan dan jam kerja nyata — supaya TREK tetap Open Source.', + 'settings.about.supporters.since': 'pendukung sejak {date}', + 'settings.about.supporters.tierEmpty': 'Jadilah yang pertama', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK adalah perencana perjalanan self-hosted yang membantu kamu mengatur perjalanan dari ide pertama hingga kenangan terakhir. Perencanaan harian, anggaran, daftar bawaan, foto dan masih banyak lagi — semua di satu tempat, di servermu sendiri.', 'settings.about.madeWith': 'Dibuat dengan', 'settings.about.madeBy': 'oleh Maurice dan komunitas open-source yang terus berkembang.', diff --git a/client/src/i18n/translations/it.ts b/client/src/i18n/translations/it.ts index f3d1cbd3..e973990b 100644 --- a/client/src/i18n/translations/it.ts +++ b/client/src/i18n/translations/it.ts @@ -263,6 +263,16 @@ const it: Record = { 'settings.about.featureRequest': 'Richiedi funzionalità', 'settings.about.featureRequestHint': 'Suggerisci una nuova funzionalità', 'settings.about.wikiHint': 'Documentazione e guide', + 'settings.about.supporters.badge': 'Sostenitori Mensili', + 'settings.about.supporters.title': 'Compagni di viaggio per TREK', + 'settings.about.supporters.subtitle': 'Mentre pianifichi il tuo prossimo itinerario, queste persone aiutano a pianificare il futuro di TREK. Il loro contributo mensile va direttamente allo sviluppo e alle ore realmente investite — per mantenere TREK Open Source.', + 'settings.about.supporters.since': 'sostenitore da {date}', + 'settings.about.supporters.tierEmpty': 'Sii il primo', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK è un pianificatore di viaggi self-hosted che ti aiuta a organizzare i tuoi viaggi dalla prima idea all\'ultimo ricordo. Pianificazione giornaliera, budget, liste bagagli, foto e molto altro — tutto in un unico posto, sul tuo server.', 'settings.about.madeWith': 'Fatto con', 'settings.about.madeBy': 'da Maurice e una crescente comunità open-source.', diff --git a/client/src/i18n/translations/nl.ts b/client/src/i18n/translations/nl.ts index 247efd4a..85c38055 100644 --- a/client/src/i18n/translations/nl.ts +++ b/client/src/i18n/translations/nl.ts @@ -308,6 +308,16 @@ const nl: Record = { 'settings.about.featureRequest': 'Feature aanvragen', 'settings.about.featureRequestHint': 'Stel een nieuwe functie voor', 'settings.about.wikiHint': 'Documentatie en handleidingen', + 'settings.about.supporters.badge': 'Maandelijkse Steuners', + 'settings.about.supporters.title': 'Reisgezelschap voor TREK', + 'settings.about.supporters.subtitle': 'Terwijl jij je volgende route plant, plannen deze mensen mee aan de toekomst van TREK. Hun maandelijkse bijdrage gaat rechtstreeks naar ontwikkeling en echte uren — zodat TREK Open Source blijft.', + 'settings.about.supporters.since': 'steuner sinds {date}', + 'settings.about.supporters.tierEmpty': 'Wees de eerste', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK is een zelf-gehoste reisplanner die je helpt je reizen te organiseren van het eerste idee tot de laatste herinnering. Dagplanning, budget, paklijsten, foto\'s en nog veel meer — alles op één plek, op je eigen server.', 'settings.about.madeWith': 'Gemaakt met', 'settings.about.madeBy': 'door Maurice en een groeiende open-source community.', diff --git a/client/src/i18n/translations/pl.ts b/client/src/i18n/translations/pl.ts index d5cf973b..35d080af 100644 --- a/client/src/i18n/translations/pl.ts +++ b/client/src/i18n/translations/pl.ts @@ -281,6 +281,16 @@ const pl: Record = { 'settings.about.featureRequest': 'Zaproponuj funkcję', 'settings.about.featureRequestHint': 'Zaproponuj nową funkcję', 'settings.about.wikiHint': 'Dokumentacja i poradniki', + 'settings.about.supporters.badge': 'Miesięczni Patroni', + 'settings.about.supporters.title': 'Towarzystwo podróży dla TREK', + 'settings.about.supporters.subtitle': 'Gdy planujesz kolejną trasę, te osoby planują razem ze mną przyszłość TREK. Ich comiesięczny wkład idzie bezpośrednio na rozwój i realnie przepracowane godziny — aby TREK pozostał Open Source.', + 'settings.about.supporters.since': 'patron od {date}', + 'settings.about.supporters.tierEmpty': 'Bądź pierwszy', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK to samodzielnie hostowany planer podróży, który pomaga organizować wyprawy od pierwszego pomysłu po ostatnie wspomnienie. Planowanie dzienne, budżet, listy pakowania, zdjęcia i wiele więcej — wszystko w jednym miejscu, na własnym serwerze.', 'settings.about.madeWith': 'Stworzone z', 'settings.about.madeBy': 'przez Maurice\'a i rosnącą społeczność open-source.', diff --git a/client/src/i18n/translations/ru.ts b/client/src/i18n/translations/ru.ts index 5f96abc4..74efc8a1 100644 --- a/client/src/i18n/translations/ru.ts +++ b/client/src/i18n/translations/ru.ts @@ -308,6 +308,16 @@ const ru: Record = { 'settings.about.featureRequest': 'Предложить функцию', 'settings.about.featureRequestHint': 'Предложите новую функцию', 'settings.about.wikiHint': 'Документация и руководства', + 'settings.about.supporters.badge': 'Ежемесячные спонсоры', + 'settings.about.supporters.title': 'Спутники TREK', + 'settings.about.supporters.subtitle': 'Пока ты планируешь следующий маршрут, эти люди планируют вместе со мной будущее TREK. Их ежемесячный взнос идёт напрямую в разработку и реально потраченные часы — чтобы TREK оставался Open Source.', + 'settings.about.supporters.since': 'спонсор с {date}', + 'settings.about.supporters.tierEmpty': 'Стань первым', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK — это самостоятельно размещаемый планировщик путешествий, который помогает организовать поездки от первой идеи до последнего воспоминания. Планирование по дням, бюджет, списки вещей, фото и многое другое — всё в одном месте, на вашем собственном сервере.', 'settings.about.madeWith': 'Сделано с', 'settings.about.madeBy': 'Морисом и растущим open-source сообществом.', diff --git a/client/src/i18n/translations/zh.ts b/client/src/i18n/translations/zh.ts index 3ce7aa96..b06a0065 100644 --- a/client/src/i18n/translations/zh.ts +++ b/client/src/i18n/translations/zh.ts @@ -308,6 +308,16 @@ const zh: Record = { 'settings.about.featureRequest': '功能建议', 'settings.about.featureRequestHint': '建议一个新功能', 'settings.about.wikiHint': '文档和指南', + 'settings.about.supporters.badge': '月度支持者', + 'settings.about.supporters.title': '与 TREK 同行的伙伴', + 'settings.about.supporters.subtitle': '当你在规划下一段路线时,这些人也在一起规划 TREK 的未来。他们每月的支持直接用于开发与真实投入的时间——让 TREK 保持开源。', + 'settings.about.supporters.since': '{date} 起的支持者', + 'settings.about.supporters.tierEmpty': '成为第一个', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK 是一个自托管的旅行规划工具,帮助你从最初的想法到最后的回忆,全程组织你的旅行。日程规划、预算、行李清单、照片等——一切尽在一处,在你自己的服务器上。', 'settings.about.madeWith': '用', 'settings.about.madeBy': '由 Maurice 和不断壮大的开源社区打造。', diff --git a/client/src/i18n/translations/zhTw.ts b/client/src/i18n/translations/zhTw.ts index d0ed9ac2..9c4c46a5 100644 --- a/client/src/i18n/translations/zhTw.ts +++ b/client/src/i18n/translations/zhTw.ts @@ -367,6 +367,16 @@ const zhTw: Record = { 'settings.about.featureRequest': '功能建議', 'settings.about.featureRequestHint': '建議新功能', 'settings.about.wikiHint': '文件與指南', + 'settings.about.supporters.badge': '月度支持者', + 'settings.about.supporters.title': '與 TREK 同行的夥伴', + 'settings.about.supporters.subtitle': '當你規劃下一段路線時,這些人也在一起規劃 TREK 的未來。他們每月的支持直接用於開發與實際投入的時間——讓 TREK 保持開源。', + 'settings.about.supporters.since': '自 {date} 起的支持者', + 'settings.about.supporters.tierEmpty': '成為第一個', + 'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket', + 'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP', + 'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer', + 'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller', + 'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate', 'settings.about.description': 'TREK 是一款自架旅遊規劃器,幫助您從最初構想到最後回憶,整理每次旅行。日程規劃、預算、行李清單、照片及更多功能——全部集中在您自己的伺服器上。', 'settings.about.madeWith': '以', 'settings.about.madeBy': '由 Maurice 及不斷成長的開源社群製作。', From 10d1f8d42888442f93ab8e166af3de6fd2ad61d1 Mon Sep 17 00:00:00 2001 From: Maurice Date: Sat, 18 Apr 2026 00:25:06 +0200 Subject: [PATCH 7/7] test(todo): update add-task tests for toolbar button migration The "Add new task..." button moved from the panel into the shared toolbar and is triggered via addItemSignal. Rewrite the three affected tests to drive that signal through a rerender instead of clicking the removed in-panel button. --- .../components/Todo/TodoListPanel.test.tsx | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/client/src/components/Todo/TodoListPanel.test.tsx b/client/src/components/Todo/TodoListPanel.test.tsx index 7538a663..d5b83d69 100644 --- a/client/src/components/Todo/TodoListPanel.test.tsx +++ b/client/src/components/Todo/TodoListPanel.test.tsx @@ -37,9 +37,10 @@ describe('TodoListPanel', () => { expect(screen.getByText('Buy tickets')).toBeInTheDocument(); }); - it('FE-COMP-TODO-002: shows Add new task button', () => { - render(); - expect(screen.getByText('Add new task...')).toBeInTheDocument(); + it('FE-COMP-TODO-002: raising addItemSignal opens the new task form', async () => { + const { rerender } = render(); + rerender(); + await screen.findByText('Create task'); }); it('FE-COMP-TODO-003: sidebar filter buttons are rendered', () => { @@ -119,11 +120,9 @@ describe('TodoListPanel', () => { expect(screen.getByText(/1 \/ 2 completed/i)).toBeInTheDocument(); }); - it('FE-COMP-TODO-011: clicking Add new task opens detail form', async () => { - const user = userEvent.setup(); - render(); - await user.click(screen.getByText('Add new task...')); - // The detail pane shows "Create task" button + it('FE-COMP-TODO-011: raising addItemSignal opens detail form with Create task button', async () => { + const { rerender } = render(); + rerender(); await screen.findByText('Create task'); }); @@ -398,15 +397,12 @@ describe('TodoListPanel', () => { return HttpResponse.json({ item: buildTodoItem({ id: 99, name: 'Brand New Task' }) }); }), ); - render(); - // Open the new task pane - await user.click(screen.getByText('Add new task...')); - // Wait for "Create task" button to appear + const { rerender } = render(); + // Raising the signal opens the new task pane (simulates the toolbar button click) + rerender(); await screen.findByText('Create task'); - // Type a task name in the autoFocus input (Task name placeholder) const nameInput = screen.getByPlaceholderText('Task name'); await user.type(nameInput, 'Brand New Task'); - // Click the Create task button await user.click(screen.getByText('Create task')); await waitFor(() => expect(postCalled).toBe(true)); });