PDA

View Full Version : [C++] Calcolare l'offset UTC dopo aver analizzato latitudine e longitudine in input


Opcode
28-08-2010, 17:26
Sera a tutti,

devo realizzare una classe che permetta, presi in input due double che esprimano rispettivamente latitudine e longitudine, permetta di ottenere in output l'offset UTC della zona espressa dai due punti.

La classe deve operare in ambiente *nix quindi non sono ammesse api specifiche di windows o simili. Precisamente la classe deve operare su FreeBSD.

Mi viene da pensare che potrei operare come segue:

Calcolare la zona a cui lat e lon puntano
Ottenere da una lista di dati l'offset relativo alla zona richiesta
Restituire il dato sotto forma di ore


Ma... ecco sono un po' confuso su come fare.
Purtroppo prima di oggi a parte la <ctime> non ho mai avuto a che fare con nulla del genere. Attualmente stò cercando qualche libreria che mi aiuti semplificandomi il lavoro, tenendo presente la licenza con cui viene rilasciata, se ne trovassi una che faccia anche tutto il necessario andrebbe benissimo, ma qualora non ne conosciate alcuna ma potete fornirmi link/guide o spiegazioni sugli algoritmi necessari, sui dati da prendere in considerazione e tutto quanto viene in gioco vi sarei molto grato.

Come da titolo un requisito essenziale è il linguaggio. Purtroppo non posso usarne altri.

Grazie a tutti in anticipo.

cionci
29-08-2010, 10:37
Dipende da come operi, se in via approssimata o meno.
In via approssimata se hai il tempo UTC e la longitudine, basta dividere la longitudine per 15 e con la parte intera hai il discostamento in ore dal UTC (negativo in caso di longitudine ovest, positivo in caso di est).

Se invece lo vuoi calcolare in modo preciso puoi usare questo metodo:
http://www.earthtools.org/webservices.htm#timezone (c'è anche un servizio simile da parte di www.geonames.org )
Il problema è che il tuo programma dovrà essere sempre online.

Opcode
29-08-2010, 20:40
Dipende da come operi, se in via approssimata o meno.
In via approssimata se hai il tempo UTC e la longitudine, basta dividere la longitudine per 15 e con la parte intera hai il discostamento in ore dal UTC (negativo in caso di longitudine ovest, positivo in caso di est).

Se invece lo vuoi calcolare in modo preciso puoi usare questo metodo:
http://www.earthtools.org/webservices.htm#timezone (c'è anche un servizio simile da parte di www.geonames.org )
Il problema è che il tuo programma dovrà essere sempre online.

Grazie mille per la risposta, è utilissima :)
Purtroppo non posso limitarmi a calcolare l'offset in via approssimativa ma ho bisogno di dati certi.

Ho visto che ci sono algoritmi per convertire lat/lon in un valore UTM[1] (http://www.dmap.co.uk/utmworld.htm) oppure in Gradi/minuti/secondi.
Mentre penso che il secondo non mi possa essere d'aiuto in alcun modo, il primo apre la porta ad una soluzione diversa, ovvero, definire in un file una sequenza di quadranti contenenti le informazioni (messe già a mano), calcolare tramite lat/lon il quadrante giusto, leggere le informazioni.

Secondo te è una soluzione plausibile?

La prima soluzione che hai proposto funziona in alcuni casi, ma stando a quei tool online anche la latitudine crea una differenza di time zone (mi sembra di aver letto da qualche parte che invece sulla stessa latitudine l'ora è uguale).

La soluzione di appoggiarsi ad un servizio online non è affatto malvagia, purtroppo non posso usare connessioni a internet :|
E comunque fosse penso che quei servizi offrano le API a pagamento per un tot di hit. Ad esempio: qui (http://worldtimeengine.com/api/geo).

Potrei effettuare direttamente una richiesta al sito web, ma penso che questo sia contro i loro ToS, altrimenti chi pagherebbe? :fagiano:

cionci
30-08-2010, 00:23
earthtools mi sembra che accetti al max una connessione al secondo.
Anche geonames offre un servizio simile a quello di earthtools, ma senza quelle limitazioni a quanto sembra: http://www.geonames.org/export/web-services.html#timezone

Opcode
30-08-2010, 23:48
earthtools mi sembra che accetti al max una connessione al secondo.
Anche geonames offre un servizio simile a quello di earthtools, ma senza quelle limitazioni a quanto sembra: http://www.geonames.org/export/web-services.html#timezone
Uhm. Si penso che adotterò la soluzione di effettuare una query ad uno dei servizi online.

Mi ritengo già soddisfatto di aver imparato come calcolare l'offset in via approssimativa :D
Magari in seguito proverò quella via attraverso UTM e un file di dati per le varie celle. Se riesce qualcosa ti farò sapere, almeno come ringraziamento per il tuo aiuto :)