¿Existe una fuente oficial de la FAA para la zona horaria de un aeropuerto?

Mirando esta respuesta , de TypeIA, a la pregunta Cómo obtener la zona horaria del código del aeropuerto (IATA/FAA) .

Esta persona recomienda la base de datos NASR, lo cual es bueno porque es material oficial de la FAA, pero al igual que otros usuarios, no puedo encontrar ninguna información sobre la zona horaria de un aeropuerto en NASR.

¿Esta información está disponible a través de NASR o de alguna otra fuente oficial de la FAA?

Sé que puedo derivar la información de latitud/longitud, etc., pero lo que estoy buscando es la designación de zona horaria oficial de la FAA para cada aeropuerto, si tal cosa existe.

EDITAR: Lo siento, para ser claro, estoy buscando una versión digital de estos datos adecuada para usar en una base de datos o aplicación.

¿Quiere una base de datos o mirar uno a la vez está bien para usted?
Para búsquedas únicas, el Suplemento de gráficos de la FAA tiene el desplazamiento UTC en la primera línea de la entrada del aeropuerto. Debería ser sencillo descargar toda la base de datos y usar algo como AWK o sed para obtener los datos. faa.gov/air_traffic/flight_info/aeronava/digital_products/dafd
Es una posibilidad remota, pero tal vez pueda intentar enviar una pregunta al sitio web de consulta de datos aeronáuticos de la FAA preguntando si tienen una fuente digital autorizada para la información de la zona horaria: faa.gov/air_traffic/flight_info/aeronav/Aero_Data/…
@RyanBurnette gracias por su respuesta, lo siento, pero soy bastante novato en StackExchange, ¿cómo le envío un mensaje? :-)

Respuestas (7)

La zona horaria de cada aeropuerto figura en el Directorio de aeropuertos/instalaciones. Sin embargo, creo que la FAA está comenzando a llamarlos "Suplementos de gráficos". Puede buscar aeropuertos específicos aquí , pero parece que los resultados están en formato .pdf. El valor que desea está marcado con un círculo rojo aquí:

ingrese la descripción de la imagen aquí

EDITAR: En cuanto a las fuentes digitales, parece que falta información explícita sobre la zona horaria en los datos del aeropuerto NASR (APT) aquí . Lo siguiente mejor es Latitud/Longitud que parece.

Tengo al menos una solución parcial para ti. Como mencioné en un comentario anterior, he trabajado un poco para lograr este objetivo en el pasado. Lo que hice en base a su solicitud fue extraer parte de ese código para crear una API de aeropuertos que incluye valores de latitud, longitud, UTC offset y zona horaria.

Aquí hay ejemplos en los puntos finales.

Para todos los datos en toda la API, puede enviar una solicitud HTTP GET a https://airports-api.s3-us-west-2.amazonaws.com/. Obtendrá una respuesta JSON que contiene todos los aeropuertos como una matriz de objetos. Es una gran respuesta.

Para obtener información más precisa, se pueden utilizar los siguientes dos patrones RESTful para los códigos de aeropuerto ICAO o IATA, respectivamente.

https://airports-api.s3-us-west-2.amazonaws.com/icao/katl.json
https://airports-api.s3-us-west-2.amazonaws.com/iata/atl.json

En cualquier caso, obtendrá una respuesta JSON solo para ese aeropuerto. Debe tener un aspecto como este.

{  
   "id":3682,
   "city":"Hartsfield Jackson Atlanta Intl",
   "state":"Atlanta",
   "country":"United States",
   "iata":"ATL",
   "icao":"KATL",
   "latitude":33.636719,
   "longitude":-84.428067,
   "elevation":1026,
   "utc_offset":-5,
   "_class":"A",
   "timezone":"America/New_York"
}

Ahora sé que está trabajando en PHP, pero seguramente hay bibliotecas en PHP que le permitirán realizar solicitudes a la API y analizar el JSON en una matriz de PHP.

Además, un descargo de responsabilidad y una solicitud. Mis datos están incompletos. Actualmente, este proyecto está en Github en forma de un sitio de intermediario que lee el CSV de origen y crea una API estática. Me encantaría que los colaboradores me ayuden a ampliar y mejorar los datos de origen. También tengo un código que puedo extraer de otros proyectos que determina el desplazamiento UTC y los valores de la zona horaria si al menos conocemos la latitud y la longitud. Requiere realizar solicitudes a la API de zona horaria de Google Maps , lo que sería costoso si se hiciera a pedido, por lo que preferiría seguir procesando los datos y reconstruyendo la API como un sitio estático. Involúcrate en Github si quieres ayudar.

Actualizar

Encontré otra fuente de datos que, una vez integrada en mi API, mejorará drásticamente la cantidad de aeropuertos disponibles. Trabajando en eso pronto.

Puede evitar la API de Google utilizando los datos de zona horaria gratuitos de efele.net/maps/tz/world . Consultar eso no sería difícil con alguna base de datos espacial : solo he usado SpatiaLite, pero la API es básicamente la misma en todo (PostGIS está disponible para PostgreSQL y debería estar completo; MySQL tiene algo de soporte incorporado, pero no No sé si ya es lo suficientemente bueno, antes no lo era).
Estoy usando un par de dependencias que ya están integradas con las API de Google. Hasta ahora es la forma más eficiente de hacerlo. Sin embargo, definitivamente estoy revisando la sugerencia, gracias.
@Krishna corrigió las URL

Tenía curiosidad por lo difícil que sería hacer esto, así que comencé a experimentar. Estoy usando macOS Sierra, pero los pasos básicos serían los mismos en otras plataformas.

Lo primero sería descargar los archivos .pdf. Hay 9 de ellos, por lo que debe realizar estos pasos 9 veces. Automator facilita la conversión de archivos PDF a texto. Gran parte del texto está destrozado, pero la línea que te interesa está intacta. Abra Automator y seleccione Flujo de trabajo en la ventana desplegable. Coloque uno de los archivos en la ventana de Automator. Elegí CS_SW_20170105.pdf. En la pestaña de acciones, elija PDF y seleccione Extraer texto PDF. Utilice el icono para ejecutar la acción. Es sorprendentemente rápido.

Ahora tiene un archivo de texto que puede manipular con sus herramientas de manipulación de texto favoritas. Yo uso BBEdit. Primero, eliminé todos los saltos de línea, luego usé el comando Procesar líneas que contienen para copiar todas las líneas que contienen UTC en un nuevo archivo. Luego me deshice de todas las cosas después de la zona horaria haciendo una búsqueda (usando GREP para reemplazar 'N[0-9].*' con nada. Luego eliminé los números de línea y el espacio al principio del archivo.

Esta es una muestra del resultado:

CALIFORNIA AVALON CATALINA (AVX)(KAVX) 6 NW UTC–8(–7DT)
BAKERSFIELD BAKERSFIELD MUNI (L45) 378 B TPA—1178(800) RWY 16–34: H4000X75 (ASPH) RWY 16: REIL. Road. Rgt tfc. CALIFORNIA 3 S UTC–8(–7DT)
BANNING MUNI (BNG)(KBNG) 2222 B TPA—3222(1000) RWY 08–26: H4955X100 (ASPH) 1 SE UTC–8(–7DT)
CALIFORNIA CONTINUED FROM PRECEDING PAGE AIRSPACE: CLASS C svc ctc APP CON svc 1400Z‡ Mon–0600Z‡ Fri and/or by NOTAM other times CLASS G. RADIO AIDS TO NAVIGATION: NOTAM FILE BAB. (L) TACAN Chan 23 BAB (108.6)
CALIFORNIA BIG BEAR CITY (L35) 0 W UTC–8(–7DT)
BISHOP CALIFORNIA (BIH)(KBIH) 2 E UTC–8(–7DT)
CALIFORNIA 91 BLYTHE (BLH)(KBLH) 6 W 400 B TPA—1200(800) RWY 08–26: H6543X150 (ASPH) MIRL UTC–8(–7DT)
BORREGO SPRINGS BORREGO VALLEY (L08) 3 E 520 B TPA—1520(1000) RWY 08–26: H5011X75 (ASPH) CALIFORNIA S–30, D–54, 2D–90 MIRL RWY 08: PAPI(P2L)—GA 3.0o TCH 63 ́. Road. Rgt tfc. UTC–8(–7DT)
CALIFORNIA 93 BRIDGEPORT BRYANT FLD (O57) 0 NE UTC–8(–7DT)
BURBANK BOB HOPE CALIFORNIA (BUR)(KBUR) 3 NW UTC–8(–7DT)
CALIFORNIA 95 BUTTONWILLOW ELK HILLS–BUTTONWILLOW (L62) 3 S UTC–8(–7DT)

Se tarda unos dos minutos en procesar los archivos. No está perfectamente limpio, pero puedes hacer más GREPing para deshacerte de las cosas.

Desafortunadamente, todavía hay mucha basura en los archivos que requerirán una edición manual para solucionarse. Probablemente no más de un par de horas.

La mejor solución que pude encontrar es usar datos de openflights.org . Tiene información de zona horaria pero sus datos sobre el horario de verano no son muy buenos.

Escribo en .NET y para solucionar este problema utilicé las bibliotecas NodeTime y TimeZoneConverter .

Importé datos de openflights.org a mi base de datos. A partir de estos datos, utilicé los campos "País", "Ciudad" y "Zona horaria". Datos del campo "TimeZone" que utilicé como datos de respaldo, en caso de que no pueda encontrar TimeZoneInfo para un aeropuerto en particular.

El siguiente código recupera el desplazamiento de la zona horaria actual para una ubicación en particular.

public static class TimeZoneHelper
{
    private const float Tolerance = 0.01f;

    public static float GetTimeZoneOffsetWithRegardsToDst(string countryName, string cityName, float timeZoneOffsetWithoutDst, DateTime currenTime)
    {
        try
        {
            var possibleLocations = TzdbDateTimeZoneSource
                .Default
                .ZoneLocations
                .Where(l => string.Equals(l.CountryName, countryName, StringComparison.InvariantCultureIgnoreCase))
                .ToList();

            if (!possibleLocations.Any())
            {
                return timeZoneOffsetWithoutDst;
            }

            if (possibleLocations.Count == 1)
            {
                var zone = DateTimeZoneProviders.Tzdb[possibleLocations[0].ZoneId];
                return GetTimeZoneOffsetWithDst(currenTime, zone);
            }

            var locationsWithSameTimeZoneOffsetWhenThereIsNoDst = possibleLocations
                .Where(l =>
                {
                    string windowsTimeZoneName = TZConvert.IanaToWindows(l.ZoneId);
                    var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(windowsTimeZoneName);
                    var baseUtcOffset = timeZoneInfo.BaseUtcOffset.TotalSeconds / NodaConstants.SecondsPerHour;

                    if (Math.Abs(baseUtcOffset - timeZoneOffsetWithoutDst) < Tolerance)
                    {
                        return true;
                    }

                    return false;
                })
                .ToList();

            if (locationsWithSameTimeZoneOffsetWhenThereIsNoDst.Any())
            {
                DateTimeZone zone;

                var locationsThatContainsNameOfCity = locationsWithSameTimeZoneOffsetWhenThereIsNoDst
                    .Where(l => l.ZoneId.ToUpperInvariant().Contains(cityName.ToUpperInvariant()))
                    .ToList();
                if (locationsThatContainsNameOfCity.Any())
                {
                    zone = DateTimeZoneProviders.Tzdb[locationsThatContainsNameOfCity[0].ZoneId];
                }
                else
                {
                    zone = DateTimeZoneProviders.Tzdb[locationsWithSameTimeZoneOffsetWhenThereIsNoDst[0].ZoneId];
                }

                return GetTimeZoneOffsetWithDst(currenTime, zone);
            }

            return timeZoneOffsetWithoutDst;
        }
        catch (Exception)
        {
            return timeZoneOffsetWithoutDst;
        }
    }

    private static float GetTimeZoneOffsetWithDst(DateTime currentTime, DateTimeZone zone)
    {
        var instant = Instant.FromDateTimeUtc(currentTime);
        var offset = zone.GetUtcOffset(instant);
        var offsetInSeconds = offset.Seconds;
        var timeZoneOffsetWithDst = offsetInSeconds / NodaConstants.SecondsPerHour;
        return timeZoneOffsetWithDst;
    }
}

El objeto TzdbZoneLocations de NodeTime contiene datos sobre la latitud y la longitud de un objeto en particular, por lo que también es posible usar la latitud y la longitud de los datos de openflights.org para hacer coincidir el aeropuerto con su zona horaria.

Aquí hay una fuente oficial de la FAA. He encontrado la información invaluable al investigar las características del aeropuerto.

https://www.faa.gov/airports/airport_safety/airportdata_5010/

Una vez que seleccione los aeropuertos que desea investigar. Haga clic en enviar. La página siguiente le mostrará cuatro archivos para descargar. Seleccione Datos de las instalaciones del aeropuerto para descargar el archivo CSV (está etiquetado como un archivo XLS, pero en realidad es un archivo CSV).

pagina de descarga de datos


Pensé que estábamos recibiendo variación magnética por un momento. El archivo no contiene la información que solicitó, pero pensé en mantener la respuesta aquí para que otros puedan obtener información sobre la página de datos del aeropuerto.

Sí, estas descargas parecen coincidir con lo que está disponible en NASR. Lamentablemente no hay información de zona horaria...
Entonces, ese archivo CSV no parece tener una columna de zona horaria...

No es oficial de la FAA, pero hay un proyecto llamado "Open Travel Data", que mantiene una tabla de información del aeropuerto, que incluye una timezonecolumna y una gmt_offsetcolumna:

Notas:

  • El archivo de tabla es casi un CSV, excepto que el separador es un signo de intercalación ( ^).
  • ¡Recuerda que también está el tema del horario de verano! Eso siempre te hace la vida más difícil.

La zona horaria es siempre la misma para cada estado, ¿correcto? Parece que todo lo que necesita es el estado. Probablemente por eso no hay datos oficiales con una zona horaria para cada aeropuerto. Desde eNASR acabo de ingresar "*" para "ID de aeropuerto" y (después de un tiempo) obtuve más de 19,000 aeropuertos. Al menos tienen un código de estado. Supongo que sería relativamente fácil guardar y analizar esos datos.

También echa un vistazo a OurAirports . Haga clic en "Información del sitio" en la parte superior y luego en "Descargas de datos abiertos". Puedes descargar un CSV con más de 50.000 aeropuertos en el mundo con un código de estado para cada uno de los EE. UU.

Este es un enfoque prometedor, pero desafortunadamente la premisa es incorrecta: hay 14 estados en los EE. UU. con múltiples zonas horarias , por ejemplo, FL (UTC-5 y UTC-6) o TX (-6/-7).
Hay soluciones, pero como obtuve un voto negativo, no tengo confianza en que valga la pena seguir.
Hasta la década de 1980, Alaska tenía cuatro husos horarios. Muchos estados que son amplios de este a oeste (y también algunos que no lo son) tienen 2 zonas horarias. Y luego está Indiana, que es simplemente especial...
@reirab, ¿viste mi comentario? Hay soluciones que podría agregar, pero no entiendo por qué esto se rechaza cuando la respuesta de wbeard52 establece explícitamente que no puede funcionar, pero no se rechaza.