2010-05-06 7 views
5

Ich möchte die Google Weather API verwenden - indem ich Lat- und Long-Werte übergebe. Ich speichere diese Werte, es scheint jedoch, dass Google diese Werte in einem anderen Format benötigt.Verwenden von Google Weather API mit Lat und Lon - wie formatieren?

dh für die Stadt McTavish Ich habe Werte von 45,5 und -73,583

Das funktioniert hier: http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=45.5,-73.583

Aber wenn ich diese Daten für Google-API verwenden, funktioniert es nicht: Siehe: www. google.com/ig/api?weather=,,45.5,-73.583

Jede Hilfe geschätzt. Ich würde lieber die Google-Daten verwenden.

+0

** Das Google Wetter API wurde im Jahr 2012 ** heruntergefahren -> http://stackoverflow.com/questions/12145820/google-weather-api -gone/35943521 –

Antwort

5

AKTUALISIERTE ANTWORT: Ich habe gerade einige andere Unregelmäßigkeiten mit Google Weather API bemerkt. In jedem Fall müssen Sie zusätzlich zu dem negativen Vorzeichen 8 Ziffern haben, wenn es zutrifft. Siehe den folgenden Codeblock (Java-basiert) für die korrekte Formatierung. (Nicht der perfekte Algorithmus, aber nur ein kurzes Beispiel, so dass Sie die Ergebnisse sehen können)

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); 

ORIGINAL RESPONSE: Paul, der Trick über Googles Wetter API ist, dass Sie nicht die Koordinaten verwenden wie erhalten durch traditioneller Breiten-/Längengrad Stattdessen analysieren Sie die Dezimalstellen. Außerdem scheint eine "spaßige Eigenart" von Google's Weather API eine Anforderung zu sein, dass die Daten als 7- bis 8-stellige Zeichenfolge eingehen. So sollte zum Beispiel 45. 5 wirklich 45.50000 sein, und -73.583 sollte wirklich -73.58300 sein. Diese Länge von 7-8 Ziffern scheint NICHT das negative Vorzeichen (-) vor irgendwelchen negativen Koordinaten zu enthalten.

Ihre wird 4550000, und Ihre -73.583(00) wird -7358300. So dass die endgültige URL wäre:

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

Beachten Sie, dass wieder, 7-8 Ziffern bedeutet 4550000 oder 45500000 akzeptabel wäre, als würde -7358300 oder -73583000.

Ich habe nur über die 7-8 Ziffernlänge herausgefunden, als ich Ihre Frage sah - ich habe versucht, die Daten in meine Wetter-Parsing-Programm eingeben und festgestellt, dass 455,-73583 liefert keine richtigen Daten.

Beachten Sie, dass dies durch meine inoffizielle Experimente und nicht durch offizielle Dokumentation, so kann es andere Macken entdeckt werden.

+1

JavaScript-Version für die korrekte Formatierung: 'lat.replace ('.', ''); while (lat.length <9) {lat = lat.concat ('0'); } lat = lat.indexOf ('-')! == -1? latStr (0, 9): latstring (0, 8); ' – Voles

+1

Dies ist nicht korrekt. Miguel Perez Subias hat die richtige Antwort gegeben. Die letzten 6 Ziffern sollten die Nachkommastellen sein. Dies macht Szene. Sie können nur die Dezimalstelle entfernen und rechts davon padeln, wie Sie Daten verlieren würden –

4

Es ist viel einfacher - Breite & Länge sollte übergeben um eine Million

+0

Dies funktioniert nicht, wenn die Koordinaten eine Genauigkeit von mehr als sechs Ziffern haben. – mattbasta

2

Meiner Meinung nach Länge eine Breite multipliziert werden muss, in _e6 Format (letzte sechs Ziffern codiert werden muss, der Dezimalteil des lon/lat String die API). Dann müssen Sie die ersten Dezimalstellen auf eine Länge von sechs anpassen, indem Sie 0 s hinzufügen, wenn Sie weniger als sechs Dezimalstellen haben, und Sie auf sechs dezimieren, wenn Sie mehr haben. Für den int-Teil, wenn Sie nur ein Zeichen haben, müssen Sie zuerst eine Null hinzufügen, für zwei oder drei Ziffern müssen Sie nichts tun.

Beispiele: -01.123.400

  • 112:

    • 1,1234 müssen codiert werden.2345 müssen codiert werden: 112234500
    • 34,123456 müssen

    Here you have a explanation with examples and a the php source code (das Blog wird geschrieben in Spanisch) codiert werden.

  • 0

    Wie Miguel sagte, sind es die letzten 6 Ziffern, die die Nachkommastellen sein sollten. Also der richtige Code als so einfach ....

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