2009-12-06 9 views
11

Quiero escribir aplicación donde el usuario puede apuntar en cualquier lugar en el mapa (no sólo las ciudades) y obtener zona horaria en ese lugar.algoritmo para conseguir zona horaria de geo coordina

estructura

¿Qué datos (aplicación no tendrá conexión a Internet) y el algoritmo debe usar? ¿Dónde puedo obtener los datos necesarios (no voy a precisar más y luego adivino el mapa en 24 rectángulos)?

Voy a escribir mi aplicación en Java ME.

+0

Véase también [la wiki de la comunidad sobre este tema] (http://stackoverflow.com/q/16086962/634824) –

Respuesta

5

Hay una serie de servicios web que pueden hacer esto para usted (por ejemplo GeoNames tiene un great API). Pero si no tiene una conexión a Internet, eso no es algo que vaya a encontrar directamente en las bibliotecas estándar de Java ME.

Usted podría hacer algo parecido, sin embargo: almacenar las coordenadas de las ciudades correspondientes a cada zona horaria, y luego hacer un Voronoi tessellation quedando con las áreas que están más próximas a cada ciudad. Luego, cuando los usuarios hagan clic en un área geográfica particular, simplemente asocie ese punto a la sección derecha del teselado, y listo - usted tiene la ciudad más cercana, que a su vez determina el huso horario correcto.

enfoques más sofisticados son posibles, pero también requieren estructuras de memoria significativamente más grandes, que supongo es una restricción si está ejecutando Java ME. Este es un buen compromiso entre espacio y velocidad.

+2

Pero tenga un poco de cuidado, hay, por ejemplo, lugares en el norte de Francia más cerca de Londres que París y lugares en Escocia más cerca de Stavanger que a Edimburgo, por lo que el enfoque de la ciudad más cercana no garantiza la respuesta correcta. –

+0

Derecha. La clave sería tener solo una ciudad representativa para cada país/zona horaria. Por ejemplo, no necesita seis ciudades para representar a Francia, solo una (por ejemplo, París) para la zona horaria en la que se encuentra (Hora de Europa Central). Eso aumenta el tamaño de cada región de Voronoi y aumenta las posibilidades de una respuesta correcta. –

+0

Pero un polígono que contiene París y el resto de Francia no será la región de Voronoi de París. Claro, use una representación poligonal para cada zona horaria (o cada país) pero no serán regiones de Voronoi. –

13

Dado que las zonas horarias se basan en entidades políticas en lugar de simplemente un cálculo físico lat/lon, crearía una estructura de datos que mapeara polígonos sobre coordenadas lat/lon en entidades políticas (país y provincia/estado) y luego una estructura separada que mapea las entidades políticas y la fecha actual en el desplazamiento de la zona horaria.

De esa manera usted no sólo evitar la redundancia, sino también:

  1. Se puede visualizar la información de referencia el horario de verano de forma independiente de un conjunto específico de coordenadas, y
  2. Cuando algún país cambia las reglas para cuando el horario de verano comienza y termina, tienes un lugar para hacer la actualización.

Sin embargo, dada la forma muy irregular de algunos bordes, necesitará una estructura de datos bastante grande para la precisión, dependiendo de la resolución de su entrada y/o pantalla.

+0

Muchas gracias. Creo que esta es la dirección correcta. Creo que el elemento más difícil será extraer datos de zonas horarias de GiS en algún sistema y convertirlo a formato utilizable. –

+0

Solo asegúrate de permitir varias zonas horarias para una ubicación determinada. Algunos lugares en el mundo tienen fronteras muy borrosas. – Trejkaz

3

Bueno, si la precisión no es un requisito, ¿por qué molestarse con una estructura de datos? Escribe una función que, dada una longitud, devuelve el desplazamiento, expresado en horas, desde el meridiano de Greenwich.

Y si esto no funciona para usted, me gustaría ir con la respuesta de Joel Neely. La respuesta de

+3

Me reí, pero esta es probablemente la respuesta más segura, ya que molesta a todos por igual. : D – Trejkaz

+0

p. Ej. abs (longitud/15), entonces para Los Ángeles, que es -118.44, obtendrías -7.88 y estamos GMT-8. – Rob

3

Joel Neely es buena, pero tenga en cuenta que este es un problema muy complicado por razones políticas. Entonces, para las áreas en disputa como Cachemira o el Tíbet, podrías ofender a las personas por la decisión que tomes.

Además, si desea utilizar la información de la zona horaria para calcular los cambios de hora, se vuelve aún más complicado, ya que las decisiones sobre el horario de verano pueden cambiar con solo 2 semanas de aviso. Ver: http://www.timeanddate.com/news/time/argentina-dst-2009-2010.html

La información del polígono se puede comprar en http://www.worldtimeserver.com/time_zone_guide/ si está interesado.Descargo de responsabilidad: no compré esta información, por lo que no sé qué tan bueno es.