如何计算 openweathermap.org JSON 中返回的摄氏温度?

Posted

技术标签:

【中文标题】如何计算 openweathermap.org JSON 中返回的摄氏温度?【英文标题】:How do I calculate the temperature in celsius returned in openweathermap.org JSON? 【发布时间】:2013-10-28 22:19:20 【问题描述】:

我正在使用 openweathermap.org 获取一个城市的天气。

jsonp 调用正常,一切正常,但生成的对象包含未知单位的温度:


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

这是一个演示,console.log 是完整的对象。

我认为最终的温度不是华氏度,因为将290.38 华氏度转换为摄氏度是143.544

有谁知道 openweathermap 返回的温度单位是​​多少?

【问题讨论】:

有人赞成我的回答,我想记住它是关于什么的,所以我点击了。在答案中看到了蛇。哎呀。只是没有要求。我已经删除了snark,回想起来我为此道歉。编码愉快! 【参考方案1】:

看起来像kelvin。将开尔文转换为摄氏度很简单:只需减去 273.15。

查看the API documentation,如果您在请求中添加&units=metric,您将返回摄氏度。

【讨论】:

@TJCrowder 这是不是有点奇怪的默认设置? @hitautodestruct:这是给的,但是,我不是科学家。 :-) 开尔文 (en.wikipedia.org/wiki/Kelvin) 是“国际单位制”中的温度单位。它是绝对的,基于物理学。它的零是“绝对零”。对我来说,它看起来是“默认”的一个非常自然的选择...... @MarcoS:当然,但这是天气信息。 99.999999% 的使用天气信息的人会使用摄氏或华氏,甚至(我敢打赌)绝大多数气象学家。默认值适用于常见情况,而不是百万分之一的情况。 :-) 我的英雄走了。看着他走。甚至没有看到 &units 文档。【参考方案2】:

这似乎是开尔文,但您可以指定要为 temp 返回的格式,例如:

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

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

【讨论】:

感谢您抽出宝贵时间回答! @spacebean 显示如下错误:"cod":401, "message": "Invalid API key. Please see http://openweathermap.org/faq#error401 for more info." 如果您与 &lat=...&lng=...&units=metric 一起传递,则不再有效。【参考方案3】:

开尔文到华氏度是:

(( kelvinValue - 273.15) * 9/5) + 32

我注意到并非所有的 OpenWeatherApp 调用都会读取单位参数(如果它传入)。 (这个错误的一个例子: http://api.openweathermap.org/data/2.5/group?units=Imperial&id=5375480,4737316,4164138,5099133,4666102,5391811,5809844,5016108,4400860,4957280&appid=XXXXXX) Kelvin 仍然返回。

【讨论】:

【参考方案4】:

您可以将单位更改为公制。

这是我的代码。

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

【讨论】:

【参考方案5】:

试试这个例子

curl --location --request GET 'http://api.openweathermap.org/data/2.5/weather?q=Manaus,br&APPID=your_api_key&lang=PT&units=metric'

【讨论】:

【参考方案6】:

首先确定您想要哪种格式。 在您的 BASE_URL 中发送城市后,仅添加 &mode=json&units=metric。您将从服务器获得直接的摄氏温度值。

【讨论】:

以上是关于如何计算 openweathermap.org JSON 中返回的摄氏温度?的主要内容,如果未能解决你的问题,请参考以下文章

无法对 openweathermap.org 执行看似简单的 HTTP POST

OpenWeatherMap.ORG API - $.getJSON 不起作用,我没有收到任何数据

使用 OpenWeatherMap API 会出现 401 错误

我想显示从这个天气 API(https://openweathermap.org/current)获取的结果,但是当我输入城市名称时,我没有得到任何响应

Openweathermap 不适用于某些国家/地区?

尝试通过 JSON 查询从 openweathermap 获取数据时出现 FileNotFoundException