Hay demasiadas preguntas en StackOverflow sobre la resolución de una zona horaria desde una ubicación. Este wiki comunitario es un intento de consolidar todas las respuestas válidas.
Actualice mi respuesta o agregue la suya como mejor le parezca.
La pregunta
Dada la latitud y longitud de una ubicación, ¿cómo se sabe qué zona horaria está vigente en esa ubicación?
En la mayoría de los casos, estamos buscando una identificación de zona horaria IANA / Olson, aunque algunos servicios pueden devolver solo un desplazamiento UTC u otro identificador de zona horaria. Lea la información de la etiqueta de zona horaria para más detalles.
geolocation
timezone
latitude-longitude
Matt Johnson-Pint
fuente
fuente
"Europe/London"
identificador de zona horaria de la base de datos de zonas horarias de la IANA.Respuestas:
Zona horaria Ubicación Servicios web
Datos de límite de zona horaria sin procesar
Los siguientes proyectos han sido previamente fuentes de datos de límites de zona horaria, pero ya no se mantienen activamente.
Implementaciones fuera de línea de geolocalización de zona horaria
Implementaciones que usan los datos de Timezone Boundary Builder
Implementaciones que usan los datos antiguos de tz_world
Bibliotecas que llaman a uno de los servicios web.
Servicios web autohospedados
Otras ideas
Actualice esta lista si conoce otros
Además, tenga en cuenta que el enfoque de la ciudad más cercana puede no producir el resultado "correcto", solo una aproximación.
Conversión a zonas de Windows
La mayoría de los métodos enumerados devolverán una identificación de zona horaria de IANA. Si necesita convertir a una zona horaria de Windows para usar con la
TimeZoneInfo
clase en .NET, use la biblioteca TimeZoneConverter .No uses zone.tab
La base de datos tz incluye un archivo llamado
zone.tab
. Este archivo se utiliza principalmente para presentar una lista de zonas horarias para que un usuario elija. Incluye las coordenadas de latitud y longitud para el punto de referencia para cada zona horaria. Esto permite crear un mapa resaltando estos puntos. Por ejemplo, vea el mapa interactivo que se muestra en la página de inicio de zona horaria .Si bien puede ser tentador utilizar estos datos para resolver la zona horaria a partir de las coordenadas de latitud y longitud, tenga en cuenta que estos son puntos, no límites. Lo mejor que podría hacer sería determinar el punto más cercano, que en muchos casos no será el punto correcto.
Considere el siguiente ejemplo:
Los dos cuadrados representan diferentes zonas horarias, donde el punto negro en cada cuadrado es la ubicación de referencia, como lo que se puede encontrar en zone.tab. El punto azul representa la ubicación para la que intentamos encontrar una zona horaria. Claramente, esta ubicación está dentro de la zona naranja a la izquierda, pero si solo miramos la distancia más cercana al punto de referencia, se resolverá a la zona verdosa a la derecha.
fuente
¿Qué tal esta solución para node.js https://github.com/mattbornski/tzwhere
Y su contraparte de Python: https://github.com/pegler/pytzwhere
fuente
Nosotros en Teleport recién comenzamos a abrir nuestras API y uno de los casos de uso también está exponiendo información de TZ para coordenadas.
Por ejemplo, uno podría solicitar toda nuestra información TZ disponible para las coordenadas de la siguiente manera:
Esto devolvería lo siguiente
Para el ejemplo, utilicé ./jq para el análisis JSON.
fuente
Así es como puede usar el editor de scripts de Google para obtener el timezoneName y timeZoneId dentro de una gsheet.
Paso 1. Obtenga una clave API para la API de zona horaria de Google
Paso 2. Crea una nueva gsheet. Debajo del menú 'herramientas' haga clic en 'editor de script'. Agregue el siguiente código:
Paso 3. Guarde y publique su
getTimezone()
función y úsela como se muestra en la imagen de arriba.fuente
Puedes usar geolocator.js para obtener fácilmente la zona horaria y más ...
Utiliza las API de Google que requieren una clave. Entonces, primero configuras el geolocalizador:
Obtenga TimeZone si tiene las coordenadas:
Salida de ejemplo:
Localice, luego obtenga TimeZone y más
Si no tiene las coordenadas, primero puede ubicar la posición del usuario.
El siguiente ejemplo probará primero la API de geolocalización HTML5 para obtener las coordenadas. Si falla o se rechaza, obtendrá las coordenadas a través de la búsqueda Geo-IP. Finalmente, obtendrá la zona horaria y más ...
Salida de ejemplo:
fuente
https://en.wikipedia.org/wiki/Great-circle_distance
Y aquí hay una buena implementación utilizando datos JSON: https://github.com/agap/llttz
fuente
divulgación: soy el autor de la imagen acoplada que se describe a continuación
He envuelto https://github.com/evansiroky/node-geo-tz en un contenedor acoplable muy simple
Puede iniciar el contenedor acoplable con
Esto expone el servicio de búsqueda en su host local en el puerto 3000. Luego puede hacer una búsqueda de zona horaria al
fuente
Pruebe este código para usar la API de zona horaria de Google de Java con el cliente de hora NTP actual y la conversión correcta UTC_Datetime_from_timestamp:
Y úsalo con:
fuente
Ok, aquí está la versión corta sin el tiempo NTP correcto:
Y úsalo con:
fuente
Si desea usar geonames.org, use este código. (Pero geonames.org es muy lento a veces)
Y úsalo con:
fuente
De Guppy:
Método vinculado
America/Anchorage.dst
deDstTzInfo
América / Anchorage 'LMT-1 día, 14:00:00 STD
fuente
De hecho, es importante reconocer que este es un problema más complicado de lo que la mayoría sospecharía. En la práctica, muchos de nosotros también estamos dispuestos a aceptar un conjunto de códigos que funcione para "tantos casos como sea posible", donde al menos sus problemas fatales pueden identificarse y minimizarse colectivamente. Así que publico esto con todo eso y el espíritu del OP en mente. Finalmente, para obtener un valor práctico para otros que están tratando de convertir el GPS a la zona horaria con el objetivo final de tener un objeto de tiempo sensible a la ubicación (y lo más importante para ayudar a avanzar la calidad de las implementaciones promedio con objetos de tiempo que siguen de esta wiki) aquí está lo que generé en Python (no dude en editar):
fuente
Hay varias fuentes en línea que tienen datos de geojson para zonas horarias ( aquí hay una , aquí hay otra)
Utilice una biblioteca de geometría para crear objetos de polígono a partir de las coordenadas geojson ( bien proporcionado [python], GEOS [c ++], JTS [java], NTS [.net]).
Convierta su lat / lng en un objeto de punto (sin embargo, su biblioteca lo representa) y verifique si se cruza con el polígono de la zona horaria.
fuente
al usar la latitud y la longitud, obtener la zona horaria de la ubicación actual debajo del código funcionó para mí
fuente
Para aquellos de nosotros que usamos Javascript y buscamos obtener una zona horaria de un código postal a través de las API de Google , este es un método.
Nota: entiendo que los códigos postales no son únicos en todos los países, por lo que es probable que sea el más adecuado para su uso en los EE. UU.
fuente
fuente
Si prefiere evitar un servicio web, puede recuperar esa información del navegador de esta manera:
En mi caso actual está imprimiendo:
Fecha completa : 27/01/2014 16:53:37 Compensación UTC : Código de país UTC-3 Zona horaria: BRT
Espero que pueda ser útil.
fuente