記錄--手把手教你Vue+ECharts+高德地圖API實現天氣預報數據可視化

来源:https://www.cnblogs.com/smileZAZ/archive/2023/06/03/17454386.html
-Advertisement-
Play Games

這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 所謂數據可視化,我們可以理解為從巨集觀角度來看一眼就能看出來整個數據的占比,走向。對於數據可視化,很多互聯網公司是很看重這一塊的,包括大廠;就比如阿裡的淘寶,雙十一的時候往往就需要將消費者的一些數據通過圖的形式展現出來。接下來我們就來 ...


這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

前言

所謂數據可視化,我們可以理解為從巨集觀角度來看一眼就能看出來整個數據的占比,走向。對於數據可視化,很多互聯網公司是很看重這一塊的,包括大廠;就比如阿裡的淘寶,雙十一的時候往往就需要將消費者的一些數據通過圖的形式展現出來。接下來我們就來實現一個天氣的數據可視化(移動端開發),看如下效果圖(iPhone6/7/8)。

2.png

準備工作

  1. 註冊一個高德地圖API賬號,選擇開發支持,地圖 JS API

3.png

  1. 登錄控制台成為開發者並創建 key

image.png

  1. 進入安全密鑰使用說明,找到方式二。

WM{U}7_Y[9HC~}H6%2$S{]J.png

  1. 創建一個vue項目,將vue的一些預設組件和樣式刪除,在views下新建一個Index.vue,並且在index.js下配置路由。目錄結構如下所示:

7.png

  1. 通過npm install echarts --save安裝一個依賴,這樣就可以使用echarts了。

開始(細分11步)

  1. 將準備工作第三步找到的方式二的兩個<script>引入到index.html中,將你自己申請的key值和安全密鑰粘貼到裡面去。這樣就可以使用高德地圖 JS API 開發地圖應用。

  2. 設置頭部樣式和背景色,時間和切換城市用到了彈性佈局。

  //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;
}
  1. 設置我們需要的天氣數據展示的html+css結構,這主要考查的是切頁面能力。
 //html
 <div class="city-info">
            <p class="city">{{}}</p>
            <p class="weather">{{}}</p>
            <h2 class="temp">
                <em></em>℃
            </h2>
            <div class="detail">
                <span>風力:{{
                }}</span>|
                <span>風向:{{ }}</span>|
                <span>空氣濕度:{{  }}</span>
            </div>
        </div>
        <div class="future">
            <div class="group" v-if="futureData.length > 0">
                明天:
                <span class="tm">白天:{{ }}℃ {{ 
                }} {{  }}風 {{ }} </span>
                <span class="tm"> 夜間:{{
                }}℃ {{  }} {{  }}風 {{ 
}}
                </span>
            </div>
            <div class="group" v-if="futureData.length > 0">
                後天:
                <span class="tm">白天:{{ }}℃ {{ 
                }} {{  }}風 {{  }} </span>
                <span class="tm"> 夜間:{{ 
                }}℃ {{  }} {{  }}風 {{ 
}}
                </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;

    }
}
  1. 再放一個div 用於存放折線圖。
//html
<div class="echart-container"> </div>
//css
.echart-container {
    width: 100%;
    height: 50vh;
}
  1. watchEffectonMounted來獲取天氣數據。

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

8.png 將這段代碼複製到onMounted的回調函數中,這樣我們就能獲取到定位信息。

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

9.png

把上圖中的代碼複製到獲取天氣的函數中,並將它放在獲取定位成功後執行,傳入定位的城市,這樣就可以獲得定位的城市的天氣情況了。

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

註意:此時輸出的未來天氣是一個數組。

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

把數據放到頁面上我理解的是挖坑然後埋數據,就像下麵這樣:

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

註意:由於futureData是一個數組,我們要在它放數據的div上加一個v-if="futureData.length > 0",要不然會報錯。

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

定義一個方法initEchart來完成圖的繪製(這裡定義了一個空數組來獲取未來幾天的溫度)

  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"喲。

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

  1. 最後直接在獲取未來天氣中調用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 () {
                //創建天氣查詢實例
                var weather = new AMap.Weather();

                //執行實時天氣信息查詢
                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>

本文轉載於:

https://juejin.cn/post/7230078695767294013

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 一、grep查找文件內容 二、sort排序 三、uniq統計壓縮重覆 四、tr替換壓縮 五、cut截斷 六.sqlit拆分 七.paste合併 八.eval 一、grep(匹配文件內容) grep [選項]… 查找條件 目標文件 -m 匹配次數 -v 除什麼以外 -i 忽略大小寫 -n 顯示匹 ...
  • nginx.conf中有關訪客日誌定義如下 #log_format #創建日誌格式,名為main log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$h ...
  • 上周聽到公司同事分享 MySQL 同步數據到 ES 的方案,發現很有意思,感覺有必要將這塊知識點再總結提煉一下,就有了這篇文章。 本文會先講述數據同步的 4 種方案,並給出常用數據遷移工具,乾貨滿滿! 不 BB,上文章目錄: 1. 前言 在實際項目開發中,我們經常將 MySQL 作為業務資料庫,ES ...
  • 具象化理解資料庫的三級模式及二級映像 形象一點來說,把數據看做貨物,資料庫是倉庫,模式就是表格。 你有一個倉庫,倉庫里成千上萬的貨物,隨便你怎麼堆,你堆個正方體,堆個圓柱體,甚至隨便亂堆都行,你怎麼堆的叫內模式。 完事你寫了一張表,表上對全部貨物按某個標準分類,而且標清了啥貨物在哪(這個操作就是從內 ...
  • MySQL索引長度(key_len)計算 計算規則 索引欄位:沒有設置 NOT NULL,則需要加 1 個位元組。 定長欄位:tinyint 占 1 個位元組、int 占 4個位元組、bitint 占 8 個位元組、date 占 3個位元組、datetime 占 5 個位元組、char(n) 占 n 個位元組。 ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230602231102469-1389179464.png) # 1. 基礎思想 ## 1.1. 預寫日誌記錄 ## 1.2. 兩階段提交 ## 1.3. 關係資料庫 # 2 ...
  • 有很多朋友對中國文化歷史相關的數據感興趣,現有的中華上下五千年、世界五千年這類的數據記錄數還太少太少,於是今天就採集了一個中華歷史網站,共有效採集到近8萬條記錄。 分類彙總情況:野史秘聞(12273)、歷史人物(8840)、歷史雜談(7928)、文史百科(5635)、歷史趣聞(5282)、雜說歷史( ...
  • 原文地址: [Android Studio歷史版本下載地址彙總 - Stars-One的雜貨小窩](https://stars-one.site/2023/06/03/android-studio-version-list) > 由於新公司不給自帶電腦,然後給了台新的電腦,於是就是需要重新下載And ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...