最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue+ECharts+高德地圖API實(shí)現(xiàn)天氣預(yù)報(bào)數(shù)據(jù)可視化的教程

 更新時(shí)間:2023年06月18日 15:54:30   作者:一拾九  
所謂數(shù)據(jù)可視化,我們可以理解為從宏觀角度來看一眼就能看出來整個(gè)數(shù)據(jù)的占比,走向,對(duì)于數(shù)據(jù)可視化,很多互聯(lián)網(wǎng)公司是很看重這一塊的,包括大廠,本就將給大家介紹如何通過Vue+ECharts+高德地圖API實(shí)現(xiàn)天氣預(yù)報(bào)數(shù)據(jù)可視化

前言

所謂數(shù)據(jù)可視化,我們可以理解為從宏觀角度來看一眼就能看出來整個(gè)數(shù)據(jù)的占比,走向。對(duì)于數(shù)據(jù)可視化,很多互聯(lián)網(wǎng)公司是很看重這一塊的,包括大廠;就比如阿里的淘寶,雙十一的時(shí)候往往就需要將消費(fèi)者的一些數(shù)據(jù)通過圖的形式展現(xiàn)出來。接下來我們就來實(shí)現(xiàn)一個(gè)天氣的數(shù)據(jù)可視化(移動(dòng)端開發(fā)),看如下效果圖(iPhone6/7/8)。

準(zhǔn)備工作

  • 注冊(cè)一個(gè)高德地圖API賬號(hào),選擇開發(fā)支持,地圖 JS API。

  • 登錄控制臺(tái)成為開發(fā)者并創(chuàng)建 key。

  • 進(jìn)入安全密鑰使用說明,找到方式二。

  • 創(chuàng)建一個(gè)vue項(xiàng)目,將vue的一些默認(rèn)組件和樣式刪除,在views下新建一個(gè)Index.vue,并且在index.js下配置路由。目錄結(jié)構(gòu)如下所示:

  • 通過npm install echarts --save安裝一個(gè)依賴,這樣就可以使用echarts了。

開始(細(xì)分11步)

  • 將準(zhǔn)備工作第三步找到的方式二的兩個(gè)<script>引入到index.html中,將你自己申請(qǐng)的key值和安全密鑰粘貼到里面去。這樣就可以使用高德地圖 JS API 開發(fā)地圖應(yīng)用。

  • 設(shè)置頭部樣式和背景色,時(shí)間和切換城市用到了彈性布局。

  //html
  <div class="container">
        <div class="nav">
            <div class="time">7:41</div>
            <div class="city">切換城市</div>
        </div>
  <div>
 //css
  .container {
    min-height: 100vh;
    background: #000;
    opacity: 0.7;
    color: #fff;
}
.nav {
    display: flex;
    justify-content: space-between;
    padding: 10px;
}
  • 設(shè)置我們需要的天氣數(shù)據(jù)展示的html+css結(jié)構(gòu),這主要考查的是切頁面能力。
 //html
 <div class="city-info">
            <p class="city">{{}}</p>
            <p class="weather">{{}}</p>
            <h2 class="temp">
                <em></em>℃
            </h2>
            <div class="detail">
                <span>風(fēng)力:{{
                }}</span>|
                <span>風(fēng)向:{{ }}</span>|
                <span>空氣濕度:{{  }}</span>
            </div>
        </div>
        <div class="future">
            <div class="group" v-if="futureData.length > 0">
                明天:
                <span class="tm">白天:{{ }}℃ {{ 
                }} {{  }}風(fēng) {{ }} </span>
                <span class="tm"> 夜間:{{
                }}℃ {{  }} {{  }}風(fēng) {{ 
}}
                </span>
            </div>
            <div class="group" v-if="futureData.length > 0">
                后天:
                <span class="tm">白天:{{ }}℃ {{ 
                }} {{  }}風(fēng) {{  }} </span>
                <span class="tm"> 夜間:{{ 
                }}℃ {{  }} {{  }}風(fēng) {{ 
}}
                </span>
            </div>
        </div> 
//css
.city-info {
    text-align: center;
    .temp {
        font-size: 26px;
        em {
            font-size: 34px;
            font-style: normal;
        }
    }
}
.future {
    padding: 0 10px;
    margin-top: 30px;
    .group {
        height: 44px;
        line-height: 44px;
        background: rgba(255, 255, 255, 0.3);
        margin-bottom: 10px;
        padding: 0 10px;
        font-size: 13px;
        border-radius: 5px;
    }
}
  • 再放一個(gè)div 用于存放折線圖。
//html
<div class="echart-container"> </div>
//css
.echart-container {
    width: 100%;
    height: 50vh;
}
  • watchEffectonMounted來獲取天氣數(shù)據(jù)。

  • 想要獲取天氣情況我們先要獲得定位,這是需要用到高德地圖API,我們來到這個(gè)位置:開發(fā) > 地圖 JS API v2.0 > 教程 > 服務(wù) > 定位,找到IP定位獲取當(dāng)前城市信息。

將這段代碼復(fù)制到onMounted的回調(diào)函數(shù)中,這樣我們就能獲取到定位信息。

  • 接下來就可以來獲取天氣了,我們把獲取天氣封裝成一個(gè)函數(shù)getWeather。同樣的我們來到:開發(fā) > 地圖 JS API v2.0 > 教程 > 服務(wù) > 天氣,找到實(shí)時(shí)天氣查詢。

把上圖中的代碼復(fù)制到獲取天氣的函數(shù)中,并將它放在獲取定位成功后執(zhí)行,傳入定位的城市,這樣就可以獲得定位的城市的天氣情況了。

  • 同樣的,我們來獲取未來幾天的天氣情況,通過下面的代碼就可以獲取到。
weather.getForecast('cityName', function(err, data) {
console.log(err, data); });

注意:此時(shí)輸出的未來天氣是一個(gè)數(shù)組。

  • 我們已經(jīng)獲取到了天氣數(shù)據(jù)了,接下來就要把這些數(shù)據(jù)存起來,把它變成響應(yīng)式的,然后把它放到頁面上展示出來。
 const state = reactive({
            today: {},
            futureData: [],
        })
  state.today = data
  state.futureData = data.forecasts
   return {
            ...toRefs(state),
        }

 把數(shù)據(jù)放到頁面上我理解的是挖坑然后埋數(shù)據(jù),就像下面這樣:

 <p class="city">{{ today.city }}</p>
 <p class="weather">{{ today.weather }}</p>

注意:由于futureData是一個(gè)數(shù)組,我們要在它放數(shù)據(jù)的div上加一個(gè)v-if="futureData.length > 0",要不然會(huì)報(bào)錯(cuò)。

<div class="group" v-if="futureData.length > 0">
                明天:
<span class="tm">白天:{{ futureData[1].dayTemp }}℃ {{ futureData[1].dayWeather}} {{ futureData[1].dayWindDir }}風(fēng) {{ futureData[1].dayWindPower }} </span>
<span class="tm"> 夜間:{{ futureData[1].nightTemp }}℃ {{ futureData[1].nightWeather }} {{ futureData[1].nightWindDir }}風(fēng) {{ futureData[1].nightWindPower
}}
                </span>
            </div>
  • 接下來我們就來做一個(gè)折線圖了,打開ECharts官網(wǎng),選一個(gè)折線圖Examples - Apache ECharts

定義一個(gè)方法initEchart來完成圖的繪制(這里定義了一個(gè)空數(shù)組來獲取未來幾天的溫度)

  const tempArr = ref([])
   data.forecasts.forEach(item => {
                        tempArr.value.push(item.dayTemp)
                    })
  const echartContainer = ref(null)
  const initEchart = () => {
            const myChat = echarts.init(echartContainer.value);
            let option = {
                xAxis: {
                    type: 'category',
                    data: ['今天', '明天', '后天', '大后天'],
                    lineStyle: {
                        color: '#fff'
                    },
                    axisTick: {
                        show: false
                    },
                },
                yAxis: {
                    type: 'value',
                    show: false
                },
                series: [
                    {
                        data: tempArr.value,
                        type: 'line'
                    }
                ]
            };
            myChat.setOption(option)
        }
   return {
            echartContainer
        }

別忘了在裝這幅圖的div上掛一個(gè)ref="echartContainer"喲。

這樣就能幫我們初始化一個(gè)折線圖了。

  • 最后直接在獲取未來天氣中調(diào)用initEchart就可以了。

部分代碼

<script>
import { toRefs, watchEffect, reactive, ref, onMounted } from 'vue';
import * as echarts from 'echarts';
export default {
    setup() {
        const echartContainer = ref(null)
        const state = reactive({
            today: {},
            futureData: [],
        })
        const tempArr = ref([])
        onMounted(() => {
            //1.獲取定位
            AMap.plugin('AMap.CitySearch', function () {
                var citySearch = new AMap.CitySearch()
                citySearch.getLocalCity(function (status, result) {
                    // console.log(status);
                    if (status === 'complete' && result.info === 'OK') {
                        // 查詢成功,result即為當(dāng)前所在城市信息
                        //console.log(result.city);
                        getWeather(result.city)
                    }
                })
            })
        })
        const getWeather = (cityName) => {
            //加載天氣查詢插件
            AMap.plugin('AMap.Weather', function () {
                //創(chuàng)建天氣查詢實(shí)例
                var weather = new AMap.Weather();
                //執(zhí)行實(shí)時(shí)天氣信息查詢
                weather.getLive(cityName, function (err, data) {
                    console.log(err, data);
                    state.today = data
                });
                //未來的天氣
                weather.getForecast(cityName, function (err, data) {
                    console.log(err, data);
                    state.futureData = data.forecasts
                    data.forecasts.forEach(item => {
                        tempArr.value.push(item.dayTemp)
                    })
                    initEchart()
                });
            });
        }
        const initEchart = () => {
            const myChat = echarts.init(echartContainer.value);
            let option = {
                xAxis: {
                    type: 'category',
                    data: ['今天', '明天', '后天', '大后天'],
                    lineStyle: {
                        color: '#fff'
                    },
                    axisTick: {
                        show: false
                    },
                },
                yAxis: {
                    type: 'value',
                    show: false
                },
                series: [
                    {
                        data: tempArr.value,
                        type: 'line'
                    }
                ]
            };
            myChat.setOption(option)
        }
        return {
            ...toRefs(state),
            echartContainer
        }
    }
}
</script>

結(jié)語

ECharts中的一些圖表是很好用的,我們可以自己動(dòng)手多去嘗試嘗試。未來的學(xué)習(xí)之旅還很長,對(duì)于數(shù)據(jù)的可視化我們還可以做成3D的效果。本文如有錯(cuò)失,歡迎大家指正,最后感謝大家的觀看,點(diǎn)個(gè)免費(fèi)的贊吧??。

以上就是Vue+ECharts+高德地圖API實(shí)現(xiàn)天氣預(yù)報(bào)數(shù)據(jù)可視化的教程的詳細(xì)內(nèi)容,更多關(guān)于Vue+ECharts+高德地圖API 數(shù)據(jù)可視化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue打包部署到Nginx時(shí),css樣式不生效的解決方式

    Vue打包部署到Nginx時(shí),css樣式不生效的解決方式

    這篇文章主要介紹了Vue打包部署到Nginx時(shí),css樣式不生效的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 詳解vue中使用express+fetch獲取本地json文件

    詳解vue中使用express+fetch獲取本地json文件

    本篇文章主要介紹了詳解vue中使用express+fetch獲取本地json文件,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • vue component 中引入less文件報(bào)錯(cuò) Module build failed

    vue component 中引入less文件報(bào)錯(cuò) Module build failed

    這篇文章主要介紹了vue component 中引入less文件報(bào)錯(cuò) Module build failed的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • vue中使用js-doc的案例代碼

    vue中使用js-doc的案例代碼

    這篇文章主要介紹了vue中使用js-doc的相關(guān)知識(shí),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Vue3基礎(chǔ)篇之常用的循環(huán)示例詳解

    Vue3基礎(chǔ)篇之常用的循環(huán)示例詳解

    filter?方法會(huì)創(chuàng)建一個(gè)新的數(shù)組,其中包含滿足指定條件的所有元素,這個(gè)方法非常適合循環(huán)遍歷數(shù)組并根據(jù)特定條件過濾元素的情況,這篇文章主要介紹了Vue3基礎(chǔ)[常用的循環(huán)],需要的朋友可以參考下
    2024-01-01
  • Vue2 cube-ui時(shí)間選擇器詳解

    Vue2 cube-ui時(shí)間選擇器詳解

    這篇文章主要為大家介紹了Vue2 cube-ui時(shí)間選擇器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Vue修改mint-ui默認(rèn)樣式的方法

    Vue修改mint-ui默認(rèn)樣式的方法

    下面小編就為大家分享一篇Vue修改mint-ui默認(rèn)樣式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue使用el-upload實(shí)現(xiàn)文件上傳功能

    vue使用el-upload實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了vue使用el-upload實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue路由事件beforeRouteLeave及組件內(nèi)定時(shí)器的清除方法

    vue路由事件beforeRouteLeave及組件內(nèi)定時(shí)器的清除方法

    今天小編就為大家分享一篇vue路由事件beforeRouteLeave及組件內(nèi)定時(shí)器的清除方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue中的同步和異步調(diào)用順序詳解

    Vue中的同步和異步調(diào)用順序詳解

    這篇文章主要介紹了Vue中的同步和異步調(diào)用順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評(píng)論

沂南县| 甘谷县| 玛多县| 祁东县| 吴桥县| 外汇| 大姚县| 县级市| 新竹县| 宁夏| 雷波县| 新巴尔虎左旗| 扶余县| 全椒县| 伊通| 宁远县| 涪陵区| 新蔡县| 施秉县| 兰州市| 房产| 无为县| 名山县| 旅游| 阜城县| 富阳市| 慈利县| 合山市| 贵德县| 盐池县| 河北省| 达日县| 宜良县| 德庆县| 建瓯市| 盘山县| 教育| 沈丘县| 南安市| 保定市| 菏泽市|