javascript - 将风向从度数转换为文本
问题描述
我正在为一个项目构建这个天气应用程序,api 以度数返回风向,我想将其转换为文本 Nort、northeast 等。
这是我使用的代码
const api = {
key: "",
base: "https://api.openweathermap.org/data/2.5/"
}
const searchbox = document.querySelector('.search-box');
searchbox.addEventListener('keypress', setQuery);
function setQuery(evt) {
if (evt.keyCode == 13) {
getResults(searchbox.value);
}
}
function getResults (query) {
fetch(`${api.base}weather?q=${query}&units=metric&APPID=${api.key}`)
.then(weather => {
return weather.json();
}).then(displayResults);
}
function displayResults (weather) {
console.log(weather);
let city = document.querySelector('.location .city');
city.innerText = `${weather.name}, ${weather.sys.country}`;
let now = new Date();
let date = document.querySelector('.location .date');
date.innerText = dateBuilder(now);
let temp = document.querySelector('.current .temp');
temp.innerHTML = `${Math.round(weather.main.temp)}<span>°c</span>`;
let weather_el = document.querySelector('.current .weather');
weather_el.innerText = weather.weather[0].main;
let hilow = document.querySelector('.hi-low');
hilow.innerText = `${Math.round(weather.main.temp_min)}°c / ${Math.round(weather.main.temp_max)}°c`;
let pressure = document.querySelector('.current .pressure');
pressure.innerHTML =`${weather.main.pressure}<span> </span><span>PSi</span>`;
let wind = document.querySelector('.current .wind');
wind.innerHTML= `${weather.wind.speed} m/s`;
let deg = document.querySelector('.current .deg')
deg.innerText=`${weather.wind.deg}`;
}
function dateBuilder (d) {
let months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
let day = days[d.getDay()];
let date = d.getDate();
let month = months[d.getMonth()];
let year = d.getFullYear();
return `${day} ${date} ${month} ${year}`;
}
这条线正在返回度数
let deg = document.querySelector('.current .deg')
deg.innerText=`${weather.wind.deg}`;
有没有简单的方法来转换它?
解决方案
您可以获取度数并将其转换为所有方向的索引。基本上把0-360变成0-8,四舍五入保证整数。然后你有一个索引可以在所有方向的数组中使用。
// Insert the amount of degrees here
degrees = 10;
// Define array of directions
directions = ['north', 'northeast', 'east', 'southeast', 'south', 'southwest', 'west', 'northwest'];
// Split into the 8 directions
degrees = degrees * 8 / 360;
// round to nearest integer.
degrees = Math.round(degrees, 0);
// Ensure it's within 0-7
degrees = (degrees + 8) % 8
console.log(directions[degrees])