2010-05-06 8 views
5

Desidero utilizzare l'API di Google Weather, passando valori lat e long. Sto memorizzando questi valori, tuttavia sembra che Google abbia bisogno di questi valori in formato diverso.Utilizzo di Google Weather API con Lat e Lon - come formattare?

cioè Per la città di McTavish Ho valori di 45,5 e -73,583

Questo funziona qui: http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=45.5,-73.583

Ma quando io uso questi dati per Google API, non funziona: Vedere: www. google.com/ig/api?weather=,,,45.5,-73.583

Qualsiasi aiuto apprezzato. Preferirei utilizzare i dati di Google.

+0

** Il tempo API di Google è stato chiuso nel 2012 ** -> http://stackoverflow.com/questions/12145820/google-weather-api -gone/35943521 –

risposta

5

RISPOSTA AGGIORNATA: Ho appena notato alcune ALTRE irregolarità con l'API meteo di Google. In qualsiasi caso, è necessario disporre di 8 cifre numeriche, oltre al segno negativo, se applicabile. Vedere il seguente blocco di codice (basato su Java) per una corretta formattazione. (Non l'algoritmo perfetto, ma solo un esempio veloce in modo da poter vedere i risultati)

lat = lat.replace(".", ""); 
while(lat.length() < 9) 
    lat = lat.concat("0"); 
if(lat.contains("-")) 
    lat = lat.substring(0, 9); 
else 
    lat = lat.substring(0, 8); 

risposta originale: Paul, il trucco in merito a Google API Meteo è che non si utilizzano le coordinate come ricevuto dalla latitudine/longitudine tradizionale. Invece, si analizzano i punti decimali. Inoltre, un "bizzarro divertimento" dell'API meteo di Google sembra essere un'esigenza che i dati arrivino come una stringa da 7 a 8 cifre. Ad esempio, 45. 5 dovrebbe essere in realtà 45.50000 e -73.583 in realtà dovrebbe essere -73.58300. Questa lunghezza di 7-8 cifre NON sembra includere il segno negativo (-) davanti a tutte le coordinate negative.

Così, il tuo 45.5(0000) diventa 4550000 e il tuo -73.583(00) diventa -7358300. Così l'URL finale sarebbe:

http://www.google.com/ig/api?weather=,,,4550000,-7358300 

Nota che ancora una volta, 7-8 cifre significa 4550000 o 45500000 sarebbe accettabile, come farebbe -7358300 o -73583000.

Ho scoperto solo la lunghezza di 7-8 cifre quando ho visto la domanda - Ho provato ad inserire i dati nel mio programma di analisi meteorologica e ho riscontrato che 455,-73583 non produce dati corretti.

Nota che questa è la mia sperimentazione non ufficiale, e non la documentazione ufficiale, quindi potrebbero esserci altre stranezze da scoprire.

+1

Versione JavaScript per la formattazione corretta: 'lat.replace ('.', ''); while (lat.length <9) {lat = lat.concat ('0'); } lat = lat.indexOf ('-')! == -1? lat.substr (0, 9): lat.substring (0, 8); ' – Voles

+1

Questo non è corretto. Miguel Perez Subias ha dato la risposta corretta. Le ultime 6 cifre dovrebbero essere le posizioni decimali. Questa causa fa scena. Puoi semplicemente rimuovere la virgola decimale e il riquadro a destra in modo da perdere i dati –

4

E 'molto più semplice - latitudine & longitudine deve essere moltiplicato per un milione

+0

Questo non funziona se le coordinate hanno una precisione di oltre sei cifre. – mattbasta

2

A mio parere longitudine una latitudine deve essere codificato in formato _e6 (sei ultime cifre devono essere la parte decimale del/string lat lon passata a l'API). Quindi devi adattare i primi decimali ad una lunghezza di sei, devi aggiungere 0 se hai meno di sei decimali, e lo tocchi a 6, se ne hai di più. Per la parte int se hai un solo carattere devi prima aggiungere uno zero, per due o tre cifre, non devi fare nulla.

Esempi:

  • 1,1234 deve essere codificato come: -01123400
  • 112.2345 deve essere codificato come: 112234500
  • 34,123456 deve essere codificato come

Here you have a explanation with examples and a the php source code (il blog è scritto in spagnolo).

0

Come ha detto Miguel sono le ultime 6 cifre che dovrebbero essere le cifre decimali. Quindi il codice corretto è così semplice come ....

string.Format("http://www.google.com/ig/api?weather=,,,{0:0},{1:0}", 
    (latitude * 1000000), 
    (longitude * 1000000));