Solución:
Servicios web de ubicación de zona horaria
- API de zona horaria de Google Maps
- API de zona horaria de Bing Maps
- API de zona horaria de Azure Maps
- API de zona horaria de GeoNames
- API TimeZoneDB
- AskGeo – comercial (pero posiblemente más preciso que GeoNames)
- API de zona horaria de GeoGarage: comercial, centrada en zonas horarias náuticas.
Datos sin procesar de los límites de la zona horaria
- Generador de límites de zona horaria: crea shapefiles de zona horaria a partir de datos de mapas de OpenStreetMaps. Incluye aguas territoriales cercanas a las costas.
Los siguientes proyectos han sido anteriormente fuentes de datos de límites de zona horaria, pero ya no se mantienen de forma activa.
- tz_world: los datos de shapefile originales de Eric Muller
- whereonearth-timezone – Versión GeoJSON con datos WOEDB fusionados en
Implementaciones fuera de línea de geolocalización de zona horaria
Implementaciones que utilizan los datos de Timezone Boundary Builder
- node-geo-tz: biblioteca de JavaScript (solo Node.js)
- espacio de tiempo – biblioteca JavaScript
- tz-lookup-oss – biblioteca JavaScript
- GeoTimeZone – biblioteca .NET
- Geo-Timezone – biblioteca PHP
- timezonefinder – biblioteca de Python
- ZoneDetect – biblioteca C
- Forma de tiempo – biblioteca Java
- TimeZoneMap – biblioteca de Java y Android
- lutz – biblioteca R
- go-tz – Ir a la biblioteca
- Búsqueda de zona horaria – Biblioteca de Go
- docker-timezone-lookup – contenedor de docker que envuelve node-geo-tz
Implementaciones que usan los datos tz_world más antiguos
- latlong – Ir a la biblioteca (Lea también esta publicación).
- TimeZoneMapper – biblioteca Java
- tzwhere – JavaScript / biblioteca de nodos
- pytzwhere – biblioteca de Python
- timezone_finder – biblioteca Ruby
- LatLongToTimeZone: bibliotecas Java y Swift
- ¿Que hora es aqui? – Publicación de blog que describe PHP y MongoDB
- rundel / timezone – biblioteca R
Bibliotecas que llaman a uno de los servicios web
- zona horaria: gema Ruby que llama a GeoNames
- AskGeo tiene sus propias bibliotecas para llamar desde Java o .Net
- GeoNames tiene bibliotecas cliente para casi todo
Servicios web autohospedados
- geo2tz: basado en la búsqueda de zona horaria, disponible a través de la imagen de Docker
Otras ideas
- Encuentra la ciudad más cercana con un R-Tree
- Encuentra la ciudad más cercana con MySQL
Actualice esta lista si conoce otras
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 el TimeZoneInfo
class en .NET, use la biblioteca TimeZoneConverter.
No use 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 del punto de referencia para cada zona horaria. Esto permite crear un mapa resaltando estos puntos. Por ejemplo, consulte el mapa interactivo que se muestra en la página de inicio de la zona horaria del momento.
Si bien puede resultar tentador utilizar estos datos para resolver la zona horaria a partir de las coordenadas de latitud y longitud, considere que se trata de puntos, no de límites. Lo mejor que se podría hacer sería determinar el más cercano punto, 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 estamos intentando encontrar una zona horaria. Claramente, esta ubicación está dentro de la zona naranja de la izquierda, pero si solo miramos a la distancia más cercana al punto de referencia, se resolverá en la zona verdosa de la derecha.
¿Qué tal esta solución para node.js https://github.com/mattbornski/tzwhere
Y su contraparte de Python: https://github.com/pegler/pytzwhere
En Teleport recién comenzamos a abrir nuestras API y uno de los casos de uso también es exponer la información de TZ para las coordenadas.
Por ejemplo, se podría solicitar toda nuestra información TZ disponible para las coordenadas de la siguiente manera:
curl -s https://api.teleport.org/api/locations/59.4372,24.7453/?embed=location:nearest-cities/location:nearest-city/city:timezone/tz:offsets-now | jq '._embedded."location:nearest-cities"[0]._embedded."location:nearest-city"._embedded."city:timezone"'
Esto devolvería lo siguiente
{
"_embedded": {
"tz:offsets-now": {
"_links": {
"self": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/offsets/?date=2015-09-07T11%3A20%3A09Z"
}
},
"base_offset_min": 120,
"dst_offset_min": 60,
"end_time": "2015-10-25T01:00:00Z",
"short_name": "EEST",
"total_offset_min": 180,
"transition_time": "2015-03-29T01:00:00Z"
}
},
"_links": {
"self": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/"
},
"tz:offsets": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/offsets/{?date}",
"templated": true
},
"tz:offsets-now": {
"href": "https://api.teleport.org/api/timezones/iana:Europe%2FTallinn/offsets/?date=2015-09-07T11%3A20%3A09Z"
}
},
"iana_name": "Europe/Tallinn"
}
Para el ejemplo utilicé ./jq para el análisis de JSON.