javascript OpenWeather API纬度和经度未返回正确的位置

rbl8hiat  于 11个月前  发布在  Java
关注(0)|答案(1)|浏览(140)

我希望能够查找一个城市并获得天气信息,但使用OpenWeatherMap API,Geocoding不会给予天气信息。它会提供纬度和经度,因此我从Geocoder获取纬度和经度并将其插入到普通的API中,但它给了我一个错误:
{cod:'400',message:'wrong latitude'}
下面是我的代码:

const apiKey = '';

async function weather(){
    coord = [];
    const apiURL = await `https://api.openweathermap.org/data/2.5/weather?lat=${coord[0]}&lon=${coord[1]}&appid=${apiKey}`;

    const geoURL = `http://api.openweathermap.org/geo/1.0/direct?q=London&appid=${apiKey}`;

    try{
        const geoData = await fetch(geoURL);
        const geoResult = await geoData.json();
        console.log(geoResult);
        geoResult.forEach(att => {
            var lat = att.lat;
            var lon = att.lon;
            coord.push(lat);
            coord.push(lon);
        })
        console.log(coord);
        const data = await fetch(apiURL);
        const result = await data.json();
        console.log(result);
    }

    catch(err){
        console.log(err);
    }

    finally{
        console.log('finally block');
    }
}

weather();

字符串
我不明白它为什么要这样做。coord数组中的坐标是正确的。我真的把他们给我的坐标直接输入到apiURL。有人能给我解释一下吗?

b09cbbtk

b09cbbtk1#

问题在于你在向列表中添加坐标之前创建了url。
即使你稍后更新了列表,字符串url已经被计算过了,所以它用undefined代替了lat和lon。就像下面的代码片段。

const coord = [];
const apiURL = `https://api.openweathermap.org/data/2.5/weather?lat=${coord[0]}&lon=${coord[1]}`;

coord.push(1,2);

console.log(coord); // logs `[1,2]`
console.log(apiURL); // logs `https://api.openweathermap.org/data/2.5/weather?lat=undefined&lon=undefined`

字符串
你所要做的就是在坐标被添加到列表中之后创建URL

相关问题