所謂數(shù)據(jù)可視化,我們可以理解為從宏觀角度來看一眼就能看出來整個數(shù)據(jù)的占比,走向。對于數(shù)據(jù)可視化,很多互聯(lián)網(wǎng)公司是很看重這一塊的,包括大廠;就比如阿里的淘寶,雙十一的時候往往就需要將消費者的一些數(shù)據(jù)通過圖的形式展現(xiàn)出來。接下來我們就來實現(xiàn)一個天氣的數(shù)據(jù)可視化(移動端開發(fā)),看如下效果圖(iPhone6/7/8)。
(資料圖片)
API
賬號,選擇開發(fā)支持,地圖 JS API
。key
。vue
項目,將vue
的一些默認組件和樣式刪除,在views
下新建一個Index.vue
,并且在index.js
下配置路由。目錄結(jié)構(gòu)如下所示:npm install echarts --save
安裝一個依賴,這樣就可以使用echarts
了。將準備工作第三步找到的方式二的兩個<script>
引入到index.html
中,將你自己申請的key
值和安全密鑰粘貼到里面去。這樣就可以使用高德地圖 JS API
開發(fā)地圖應用。
設(shè)置頭部樣式和背景色,時間和切換城市用到了彈性布局。
//html//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{{}}
{{}}
℃
風力:{{ }}| 風向:{{ }}| 空氣濕度:{{ }}明天: 白天:{{ }}℃ {{ }} {{ }}風 {{ }} 夜間:{{ }}℃ {{ }} {{ }}風 {{ }}后天: 白天:{{ }}℃ {{ }} {{ }}風 {{ }} 夜間:{{ }}℃ {{ }} {{ }}風 {{ }}//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; }}
- 再放一個
div
用于存放折線圖。//html//css.echart-container { width: 100%; height: 50vh;}
用
watchEffect
或onMounted
來獲取天氣數(shù)據(jù)。想要獲取天氣情況我們先要獲得定位,這是需要用到高德地圖
API
,我們來到這個位置:開發(fā)>地圖 JS API v2.0>教程>服務>定位
,找到IP
定位獲取當前城市信息。將這段代碼復制到
onMounted
的回調(diào)函數(shù)中,這樣我們就能獲取到定位信息。
- 接下來就可以來獲取天氣了,我們把獲取天氣封裝成一個函數(shù)
getWeather
。同樣的我們來到:開發(fā)>地圖 JS API v2.0>教程>服務>天氣
,找到實時天氣查詢。把上圖中的代碼復制到獲取天氣的函數(shù)中,并將它放在獲取定位成功后執(zhí)行,傳入定位的城市,這樣就可以獲得定位的城市的天氣情況了。
- 同樣的,我們來獲取未來幾天的天氣情況,通過下面的代碼就可以獲取到。
weather.getForecast("cityName", function(err, data) {console.log(err, data); });注意:此時輸出的未來天氣是一個數(shù)組。
- 我們已經(jīng)獲取到了天氣數(shù)據(jù)了,接下來就要把這些數(shù)據(jù)存起來,把它變成響應式的,然后把它放到頁面上展示出來。
const state = reactive({ today: {}, futureData: [], }) state.today = data state.futureData = data.forecasts return { ...toRefs(state), }把數(shù)據(jù)放到頁面上我理解的是挖坑然后埋數(shù)據(jù),就像下面這樣:
{{ today.city }}
{{ today.weather }}
注意:由于
futureData
是一個數(shù)組,我們要在它放數(shù)據(jù)的div
上加一個v-if="futureData.length > 0"
,要不然會報錯。明天:白天:{{ futureData[1].dayTemp }}℃ {{ futureData[1].dayWeather}} {{ futureData[1].dayWindDir }}風 {{ futureData[1].dayWindPower }} 夜間:{{ futureData[1].nightTemp }}℃ {{ futureData[1].nightWeather }} {{ futureData[1].nightWindDir }}風 {{ futureData[1].nightWindPower}}
- 接下來我們就來做一個折線圖了,打開
ECharts
官網(wǎng),選一個折線圖Examples - Apache ECharts定義一個方法
initEchart
來完成圖的繪制(這里定義了一個空數(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
上掛一個ref="echartContainer"
喲。這樣就能幫我們初始化一個折線圖了。
- 最后直接在獲取未來天氣中調(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即為當前所在城市信息 //console.log(result.city); getWeather(result.city) } }) }) }) const getWeather = (cityName) => { //加載天氣查詢插件 AMap.plugin("AMap.Weather", function () { //創(chuàng)建天氣查詢實例 var weather = new AMap.Weather(); //執(zhí)行實時天氣信息查詢 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>本文轉(zhuǎn)載于:
https://juejin.cn/post/7230078695767294013
如果對您有所幫助,歡迎您點個關(guān)注,我會定時更新技術(shù)文檔,大家一起討論學習,一起進步。
標簽:
記錄--手把手教你Vue+ECharts+高德地圖API實現(xiàn)天氣預報數(shù)據(jù)可視化_今日熱訊
2023-06-03奧尼爾轉(zhuǎn)發(fā)有趣事實:熱火隊史奪得的三冠 都輸?shù)袅丝倹Q賽G1
2023-06-03再見姆巴佩!皇馬醞釀王炸簽約,賽季獨造37球,巴薩曼城嗅到不安|快看點
2023-06-03京津冀簽署協(xié)議推進交通基礎(chǔ)設(shè)施互聯(lián)互通
2023-06-03正規(guī)保安公司招聘(正規(guī)保安公司) 世界觀天下
2023-06-03戈登:若奪冠八九十歲時可以跟兒孫吹噓,曾經(jīng)防死杜詹巴特勒
2023-06-03中金普洛斯REIT成功完成定向募集 REITs擴募邁出關(guān)鍵一步
2023-06-03守護城市“煙火氣”,金山公安制定“一夜市一預案”|全球快消息
2023-06-03辭舊迎新過年啦譜子(辭舊迎新過年啦什么歌)
2023-06-03環(huán)球熱推薦:文學寫作基礎(chǔ)(十六):調(diào)動積累,補充生發(fā)
2023-06-03美債務上限法案將于6月3日簽署 道指狂飆700點 惠譽維持美國信用評級在負面觀察狀態(tài)_世界新動態(tài)
2023-06-03第22屆上海市社會科學普及周講座在華東理工大學舉辦|天天動態(tài)
2023-06-03暴漲292%!金橋信息實控人突然宣布:減持!什么情況?
2023-06-03溫柔書寫方法有哪些古詩 古詩正確書寫格式-當前報道
2023-06-03【世界熱聞】安卓怎么刷機_安卓手機如何刷機
2023-06-03同程旅行發(fā)布兒童節(jié)親子游數(shù)據(jù):主題公園霸榜,演出展覽漲幅高|信息
2023-06-03觀熱點:蹲久了腳麻是怎么回事如何應急治療_蹲久了腳麻怎么回事
2023-06-03卵磷脂膠囊
2023-06-03中考必備記敘文萬能名人事例
2023-06-03官宣!知名百億基金經(jīng)理加盟 當前快播
2023-06-03維護高考公平公正!教育部公布2023年高考舉報電話
2023-06-03工業(yè)富聯(lián)股東大會直擊:會場人員爆滿 高管透露已著手開發(fā)下一代AI服務器_每日資訊
2023-06-03網(wǎng)傳"女博士介入導師婚姻",男方代其發(fā)高水平論文,四川官方回應
2023-06-02巴拉克建議拜仁引入阿爾瓦雷斯、芒特:這事兒不靠譜,名宿勿多言
2023-06-02環(huán)球微資訊!山鷹國際控股股東泰盛實業(yè)質(zhì)押800萬股用于非融資類質(zhì)押
2023-06-02A股市場反彈!北向資金單日凈買入逾85億,創(chuàng)近4個月新高
2023-06-02天津養(yǎng)老金調(diào)整方案更新了嗎?2022~2023年天津養(yǎng)老金調(diào)整方案細則最新消息(全文)|天天熱訊
2023-06-02持中國駕照怎樣出境自駕游?飛豬聯(lián)合租租車免費送10萬份國際認證駕照翻譯件
2023-06-02新華指數(shù):秭歸夏橙新鮮上市 倫晚臍橙產(chǎn)地走貨量顯著增加 天天觀速訊
2023-06-02振江股份于南昌參設(shè)鋰電科技公司,經(jīng)營范圍含電池制造|天天短訊
2023-06-02【全球報資訊】“網(wǎng)紅”玩具有何安全隱患?市場監(jiān)管總局將安全科普課堂帶進校園
2023-06-02宛虹橋6,8號民居
2023-06-02今日看點:撲克魔術(shù)教程簡單互動_撲克魔術(shù)教程
2023-06-02大興七中分校貼吧_大興七中分校-全球觀熱點
2023-06-02面對“兒歌成人化”我們能做什么?
2023-06-02頭條焦點:算力還是不夠!OpenAI 自曝發(fā)展受到 GPU 限制
2023-06-02恒指夜期收盤(6.2)︱恒生指數(shù)夜期(6月)收報18480點 高水263點
2023-06-02【環(huán)球快播報】神經(jīng)母細胞瘤形成原因分析 神經(jīng)母細胞瘤形成原因
2023-06-02韓媒:韓防長重申不會向烏提供殺傷性武器-天天視點
2023-06-02多彩“六一” 快樂節(jié)日
2023-06-02【環(huán)球速看料】三超新材6月2日快速回調(diào)
2023-06-02呼和浩特市鴻博網(wǎng)絡(luò)科技有限公司_呼和浩特市大旗網(wǎng)絡(luò)有限公司_環(huán)球精選
2023-06-02天天快消息!惡的拼音和組詞_惡的拼音和組詞造句
2023-06-02每日機構(gòu)分析:6月1日_全球看熱訊
2023-06-02李連杰游戲代言來者不拒,難道巨星也缺錢了?這樣玩人設(shè)恐會翻車
2023-06-02被譽為石雕藝術(shù)之鄉(xiāng)的是哪個城市_被譽為石雕藝術(shù)之鄉(xiāng)的是哪里 每日觀察
2023-06-02蘇州工藝美術(shù)職業(yè)技術(shù)學院在哪_蘇州工藝美術(shù)職業(yè)技術(shù)學院有多大 熱門看點
2023-06-0272歲張紀中又要當?shù)耍啃?1歲愛妻小腹隆起,身材豐滿滿臉笑容
2023-06-02梔子金花丸副作用及禁忌_梔子金花丸副作用_當前報道
2023-06-02可轉(zhuǎn)債發(fā)行是利好嗎?(可轉(zhuǎn)債發(fā)行是什么意思)
2023-06-02