Wyszukiwanie strefy czasowej na podstawie szerokości i długości geograficznej [zamknięte]


79

Czy jest dostępna jakaś biblioteka (lub nawet lepiej usługa internetowa), która może konwertować szerokość / długość geograficzną na strefę czasową?


9
Czy jest do tego rozwiązanie inne niż usługi sieciowe? Mam przypadek użycia, w którym mam sporadyczne połączenie z Internetem i nadal potrzebuję uzyskać te informacje w terenie. Przydatna byłaby baza danych zawierająca informacje o strefach czasowych z interfejsem API na górze.
Simon Gillbee,


Tak, na askgeo.com dostępna jest komercyjnie dostępna biblioteka, która umożliwia właśnie to. Jest napisany w Javie, jest bezpieczny dla wątków i bardzo szybki (10 000 zapytań na sekundę).
James D

1
Kiedy wszystko jest powiedziane i zrobione, czas jest tylko wymiarem planowania. „Godziny” nie są związane z lokalnym cyklem dobowym, ponieważ zmienia się on corocznie nawet dla danej lokalizacji. Byłoby to znacznie prostsze, gdyby wszyscy używali czasu gwiazdowego w sekundach, kilosekundach, megasekundach itp. KSec to około 17 minut, co jest bardzo ludzkim kawałkiem czasu. Dzień to około 86,4 tys. Nie jest to liczba parzysta, ale co z tego? Żaden dzień nie jest nigdy dokładnie takiej samej długości jak poprzedni, ponieważ obrót planety zwalnia.
Peter wygrał

Odpowiedzi:


64

Dość głęboko przyjrzałem się tej kwestii w przypadku projektu, nad którym pracuję. GeoNames.org i EarthTools.com są dobrymi opcjami w wielu sytuacjach, ale mają następujące poważne wady:

  • Witryna GeoNames.org znajduje strefę czasową, wyszukując najbliższy punkt w swojej bazie danych, który zawiera pole strefy czasowej. To często prowadzi do złego wyniku w pobliżu granic. Jest również boleśnie powolny, co prowadzi do czasów zapytań rzędu kilku sekund na żądanie. Nie zwraca również prawidłowej strefy czasowej, jeśli w ich bazie danych w pobliżu punktu zapytania nie ma żadnego elementu. GeoNames ogranicza również liczbę zapytań, które można wykonać dziennie, co utrudnia operacje zbiorcze.
  • EarthTools.org używa mapy i jest w stanie szybko zwracać zapytania, ale nie bierze pod uwagę czasu letniego dla większości lokalizacji i zwraca surowe przesunięcie zamiast identyfikatora strefy czasowej (tzn. Zwracają „GMT-7 „zamiast„ America / Chicago ”). Spojrzałem też na ich stronę podczas przygotowywania tego posta, a Google Chrome ostrzegł przed złośliwym oprogramowaniem w ich witrynie. To dla mnie nowość i może się zmienić, ale jest oczywiście powodem do niepokoju.

Te wady oznaczały, że te istniejące narzędzia nie były odpowiednie dla moich potrzeb, więc stworzyłem własne rozwiązanie i opublikowałem je do ogólnego użytku. Znajdziesz go tutaj:

http://www.askgeo.com/

AskGeo opiera się na mapie stref czasowych świata, więc zwraca prawidłową strefę czasową dla każdej prawidłowej szerokości i długości geograficznej. Zwraca standardowy identyfikator strefy czasowej (np. „America / Los_Angeles”) używany w systemie Linux i większości innych systemów operacyjnych i struktur programistycznych. Zwraca również bieżące przesunięcie, w pełni uwzględniając czas letni.

Jest niezwykle łatwy w obsłudze, a użycie jest udokumentowane na stronie głównej serwisu. Interfejs API obsługuje zapytania wsadowe, więc jeśli potrzebujesz dużo wyszukiwań, użyj interfejsu wsadowego, zamiast blokować nasze serwery żądaniami szeregowymi. Zapytania zbiorcze są również znacznie szybsze, więc wszyscy wygrywają.

Kiedy po raz pierwszy to uruchomiliśmy, zbudowaliśmy go w Google App Engine (GAE) i udostępniliśmy bezpłatnie wszystkim użytkownikom. Było to możliwe, ponieważ ceny GAE były wówczas tak niskie. Od tego czasu obciążenie naszych serwerów znacznie wzrosło, a ceny GAE znacznie wzrosły. Połączenie tych dwóch czynników skłoniło nas do przejścia na Amazon Web Services w celu hostowania i rozpoczęcia pobierania opłat za użytek komercyjny, zachowując jednocześnie usługę bezpłatną dla non-profit, niekomercyjnych projektów open source i badaczy. Użytkownikom komercyjnym zapewniamy 1000 bezpłatnych zapytań, aby potencjalni klienci mogli ocenić API, aby upewnić się, że spełnia ich potrzeby. Odwiedź witrynę internetową, aby zapoznać się z cenami i warunkami.

Biblioteka bazowa została napisana w Javie i ze względu na popularne zapotrzebowanie wydaliśmy ją również na licencji komercyjnej. Pełna dokumentacja biblioteki i szczegóły cenowe znajdują się na stronie internetowej.

Mam nadzieję, że to się przyda. Z pewnością przydało się to w projekcie, nad którym pracowałem.


Czy istnieje sposób na przekonwertowanie identyfikatora strefy czasowej (np. „America / Los_Angeles”) na .NET System.TimeZoneInfo?
Judah Gabriel Himango

Ta strona zawiera mapowanie między identyfikatorami bazy danych tz (znanymi również jako identyfikatory Olsona) a identyfikatorami stref czasowych systemu Windows: unicode.org/repos/cldr-tmp/trunk/diff/supplemental/ ...
James D

Dobra robota. Byłoby dobrze, gdyby można było przekazać datę, aby uzyskać skorygowane przesunięcie światła dziennego dla innego punktu w czasie. Dodanie nazwy strefy czasowej systemu Windows byłoby dodatkowym bonusem.
CodeGrue,

1
Czy planujesz zaakceptować parametr wywołania zwrotnego, aby JSONP działał?
Jon Nylander,

8
Chyba że przegapiłem coś, co nie jest już darmowe: API można wypróbować bezpłatnie i jest bezpłatne do użytku niekomercyjnego i osobistego. Projekty open source, studenci i osoby prywatne mogą z niego korzystać bezpłatnie (zgodnie z naszymi wytycznymi dotyczącymi użytkowania). Każdy użytkownik, który chce używać API do celów komercyjnych, musi uiścić opłatę za dostęp w wysokości 200 USD rocznie.
Arry

28

Zajrzyj na Geonames.org

Jest to bezpłatna usługa internetowa, która pozwala uzyskać wiele informacji z długiego / szer

Zapewniają również darmową (i otwartą) bibliotekę Java Client for GeoNames Webservices (biblioteka również dla innych języków: ruby, python, perl, lisp ...)

Oto kilka informacji, które możesz uzyskać z długich / lat: (pełna lista usług internetowych tutaj)

  • Znajdź najbliższy adres
  • Znajdź najbliższe skrzyżowanie
  • Znajdź pobliskie ulice
  • Podniesienie
  • Strefa czasowa

1
to da ci aktualny czas i przesunięcia dla czasu letniego i standardu, ale mam problem ze znalezieniem, czy data w przyszłości jest pod datą letnią
Scott Cowan

w tym celu kalendarz Java będzie prawdopodobnie bardziej przydatny
Frederic Morin


8

Interfejs API Yahoo places zapewnia informacje o strefie czasowej za pośrednictwem odwrotnej geolokalizacji.

Sprawdź to.

http://developer.yahoo.com/geo/placefinder/guide/requests.html


W przypadku PHP używam unserialize (file_get_contents ()) na podstawowym adresie URL z lokalizacją = lat% 20long & gflags = R & flags = PT, aby uzyskać tablicę zawierającą strefę czasową.
Owen

1
Adres URL zapytania wygląda następująco: gdzie.yahooapis.com/…
Jon Stevens

5

Ile potrzebujesz dokładności? Dzielenie długości geograficznej przez 15 byłoby prawie prawidłowe: str


6
Byłem dość żartobliwy, kiedy ułożyłem tę odpowiedź, ale dopiero gdy natknąłem się na to pytanie, próbując samodzielnie rozwiązać problem, zdałem sobie sprawę, jak całkowicie bezużyteczny jest ten pomysł: upload.wikimedia.org/wikipedia/commons/e/e7 /Timezones2008.png (chyba że jesteś na wodach międzynarodowych)
Tom

1
Patrzę na tę mapę i myślę, że zaproponowane przez ciebie podejście jest całkiem przyzwoite, jak na zgrubne oszacowanie. Na przykład potrzebuję czegoś dość przybliżonego (kilka godzin poza domem jest w porządku), a podzielenie długości geograficznej przez 15 wygląda na dobre rozwiązanie. Z mapy wynika, że ​​wokół międzynarodowej linii daty jest bardzo niewiele zamieszkanych miejsc, gdzie podzielenie przez 15 będzie okropnie błędne.
MB.

2
Wprowadzenie strefy czasowej z politycznego punktu widzenia przy użyciu matematyki nie zawsze jest zalecane. Ale jeśli trzeba wiedzieć, czy jest noc czy dzień, to podejście można rozwiązać programowo bez żadnej usługi sieciowej. Dzięki za ten pomysł.
JackPearse

Tak, askgeo.com (pełne ujawnienie: prowadzę witrynę). Możesz kupić bibliotekę Java, która robi to na własnym serwerze.
James D

4

Eric Muller stworzył mapy shapefile dla stref czasowych bazy danych tz (Olson). Jednak kilka drobnych zastrzeżeń:

  1. Stosowane granice są często nieoficjalne.
  2. Nie jest aktualizowana tak regularnie, jak sama baza danych tz, więc może brakować niektórych nowo utworzonych lub dostosowanych stref.

Jednak poza tym wydaje się, że jest bardzo dokładny do większości celów.



0

DRT Engine pobiera szerokość i długość geograficzną oraz lokalną datę i godzinę i zwraca przesunięcie strefy czasowej. Można to wykorzystać do ustalenia strefy czasowej określonej lokalizacji w przyszłości .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.