23

Ich bekomme das Wetter für eine Stadt mit openweathermap.org.Wie berechne ich die Temperatur in Celsius, die in openweathermap.org JSON zurückgegeben wird?

Der JSONP Anruf arbeitet und alles ist in Ordnung, aber das resultierende Objekt enthält die Temperatur in einer unbekannten Einheit:

{ 
    //... 
    "main": { 
     "temp": 290.38, // What unit of measurement is this? 
     "pressure": 1005, 
     "humidity": 72, 
     "temp_min": 289.25, 
     "temp_max": 291.85 
    }, 
    //... 
} 

Hier ist eine Demo, die console.log ‚s die volle Objekt.

Ich glaube nicht, dass die resultierende Temperatur in Fahrenheit ist, weil 290.38 Fahrenheit in Celsius konvertiert 143.544 ist.

Weiß jemand, welche Temperatureinheit openweathermap zurückgibt?

Antwort

75

Es sieht wie kelvin aus. Die Konvertierung von Kelvin in Celsius ist einfach: Subtrahieren Sie 273,15.

Und der kürzeste Blick bei the API documentation sagt uns, dass, wenn Sie &units=metric auf Ihre Anfrage hinzufügen, werden Sie zurück Celsius erhalten.

+0

@TJCrowder Ist das nicht ein etwas seltsamer Standard zu haben? – hitautodestruct

+3

@hitautodestruct: Es ist zu * mir *, aber dann bin ich kein Wissenschaftler. :-) –

+4

Kelvin (http://en.wikipedia.org/wiki/Kelvin) ist die Temperatureinheit aus dem "International System of Units". Es ist absolut, basierend auf Physik. Es ist Null ist der "absolute Null". Es sieht als eine ganz natürliche Wahl für einen "Standard" aus, mir ... – MarcoS

6

Das Kelvin zu sein scheint, aber Sie das Format festlegen können Sie für die temporäre zurückgegeben werden sollen, zum Beispiel:

http://api.openweathermap.org/data/2.5/weather?q=London&mode=json&units=metric

oder

http://api.openweathermap.org/data/2.5/weather?q=London&mode=json&units=imperial

+0

Danke, dass Sie sich die Zeit genommen haben zu antworten! – hitautodestruct

+0

@spacebean Es zeigt Fehler wie folgt: '{" cod ": 401," message ":" Ungültiger API-Schlüssel. Weitere Informationen finden Sie unter http://openweathermap.org/faq#error401. "}' –

1

Sie können die Einheit in metrisch ändern.

Dies ist mein Code.

<head> 
    <script src="http://code.jquery.com/jquery-1.6.1.min.js"></script> 
     <script src="http://code.jquery.com/ui/1.10.2/jquery-ui.min.js"></script> 
     <style type="text/css">] 
     body{ 
      font-size: 100px; 

     } 

     #weatherLocation{ 

      font-size: 40px; 
     } 
     </style> 
     </head> 
     <body> 
<div id="weatherLocation">Click for weather</div> 

<div id="location"><input type="text" name="location"></div> 

<div class="showHumidity"></div> 

<div class="showTemp"></div> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#weatherLocation').click(function() { 
    var city = $('input:text').val(); 
    let request = new XMLHttpRequest(); 
    let url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&units=metric&appid=[YOUR API KEY HERE]`; 


    request.onreadystatechange = function() { 
     if (this.readyState === 4 && this.status === 200) { 
     let response = JSON.parse(this.responseText); 
     getElements(response); 
     } 
    } 

    request.open("GET", url, true); 
    request.send(); 

    getElements = function(response) { 
     $('.showHumidity').text(`The humidity in ${city} is ${response.main.humidity}%`); 
     $('.showTemp').text(`The temperature in Celcius is ${response.main.temp} degrees.`); 
    } 
    }); 
}); 
</script> 

</body>