Pergunta

Existe uma maneira para estimar o deslocamento de GMT (ou fuso horário) a partir de uma latitude / longitude? Eu vi GeoNames, mas isso precisa trabalhar a longo prazo e nós realmente não quer contar com um serviço web. Ele tinha acabado de ser usado para determinar se a exibição de "hoje" ou "esta noite" ao dar informações para vários usuários para que não precisa ser muito preciso (uma ou duas horas fora não seria mau).

Foi útil?

Solução

offset = direction * longitude * 24 / 360

em que direcção é 1 para leste, -1 para oeste, e a longitude é em (-180.180)

Outras dicas

Baseando o fuso horário sozinho a longitude é descontroladamente fora imprecisa de águas internacionais. Veja o mapa desta página:

http://askgeo.com/database/TimeZone

As listras coloridas verticais no fundo do oceano são os chamados fusos horários naturais derivados de longitude sozinho, e as cores da terra são os fusos horários reais por as leis que regem. Você pode ver que eles não se alinham muito bem em tudo.

Na verdade, eu corri para este problema enquanto trabalhava em um projeto diferente e fez pesquisa e desenvolvimento substancial do mesmo. Primeiro minha pesquisa:

  • Em primeiro lugar, os fusos horários não são normalmente codificados por apenas um deslocamento de GMT (aka UTC). Que não leva em conta o horário de verão, e as mudanças no fusos horários ao longo dos anos. Em vez disso, as IDs de fuso horário são usadas para designar uma área geográfica em que o tempo oficial relógio tem sido a mesma em toda a área para um dado período de tempo (por exemplo, desde 1970). O sistema mais importante de tais identificações é o "Olson ID fuso horário" (em conjunto, estes IDs e as suas regras de compensação são conhecidos como o "banco de dados tz"), que é usado por outros sistemas operacionais Linux e UNIX. A maioria das linguagens de programação e sistemas operacionais têm suporte partido nativa ou terceiro para Olson IDs de fuso horário.

Em termos de soluções existentes para latitude e longitude convertido para o fuso horário:

  • GeoNames.org tem um vasto banco de dados de locais de pontos (centros das cidades, aeroportos, edifícios públicos, etc.), cada um dos quais é anotado com um monte de metadados útil, incluindo o Olson fuso horário ID. E eles têm uma boa API para permitir que você acessar estes através da web. O problema é que, se a menos que o ponto que você está consultando é bem em cima de um registro em seu banco de dados, você pode obter um resultado que está do outro lado de uma fronteira fuso horário, ou você pode não obter resposta em tudo se sua consulta está longe de seu ponto mais próximo. O serviço web também é dolorosamente lento, e eles limitar o número de consultas que você pode fazer em um dia para um número relativamente pequeno.

  • Ferramentas da Terra (http://www.earthtools.org/webservices.htm) também tem um serviço para isso, e é muito mais rápido do que GeoNames, mas retorna apenas um deslocamento de GMT, não um tempo zona de ID, e não lidar com o horário de verão corretamente para a maioria do mundo. Além disso, parece não ser mantida, então eu não tenho certeza se os dados são mais precisos (fusos horários mudar ao longo do tempo).

Depois de analisar as opções e procurar outras possibilidades, sem sucesso, eu decidi construir a minha própria solução, e lançaram-lo em:

http://askgeo.com

AskGeo é baseado em um mapa de fuso horário do mundo, então ele retorna um fuso horário válido para cada latitude e longitude válido. Ele retorna o padrão Olson fuso horário ID (por exemplo, "América / Los_Angeles") utilizados na maioria dos outros sistemas operacionais Linux e e estruturas de programação. Também retorna o deslocamento atual, tendo plenamente em conta o horário de verão.

É extremamente fácil de usar e uso está documentado na página principal do site. As consultas suportado pela API em lote, por isso, se você precisa fazer um monte de look-ups, utilize a interface em lote, em vez de atolar nossos servidores com solicitações de série. As consultas em massa são também muito mais rápido, então vitórias todos.

Quando lançamos pela primeira vez este, nós construí-lo no Google App Engine (GAE) e fez-o livre para todos os usuários. Isso foi possível porque os preços do GAE eram tão baixos naquele momento. Desde então, a nossa carga do servidor aumentou substancialmente e os preços do GAE foi para cima. Ambos os fatores combinados nos levou a mudar para Amazon Web Services para hospedagem e começar a cobrar para uso comercial, mantendo o serviço gratuito para sem fins lucrativos, projetos de código aberto não comerciais, e os pesquisadores. Para usuários comerciais, nós fornecemos1000 consultas gratuitas para deixar os clientes potenciais avaliar a API para garantir que ele atenda às suas necessidades. Consulte o site para preços e termos.

A biblioteca subjacente foi escrito em Java e devido à demanda popular, nós também lançou a biblioteca sob uma licença comercial. A documentação completa da biblioteca e preços detalhes estão no site.

Espero que este seja útil. Certamente foi útil para o projeto que eu estava trabalhando.

Se você conhece a longitude usuários, você sabe completamente todos os aspectos de tempo para eles (negligenciando alguns pequenos erros como a relatividade especial etc). O tempo solar médio é simplesmente a diferença de GMT e longitude (graus para converter parte minutos, um grau = 60 minutos). Você adicionar ou subtrair baseado em Leste ou Oeste. tempo solar médio é basicamente o tempo mais preciso, em seguida, fusos horários. durante o dia e à noite horários são variáveis ??e dependem latitude, para que você use algumas aproximações de Nascer e por do sol tomando em latitude e da data e ano. Isso por si só daria noção bastante precisa do dia e noite.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top