Vue使用高德地圖定位到當前位置,并顯示天氣信息

首先得去高德控制臺申請兩個?key,一個天氣key和一個定位key

?

獲取天氣信息的函數:

const getWeather = function (city) {// 使用 fetch 發送請求獲取天氣信息fetch(`https://restapi.amap.com/v3/weather/weatherInfo?city=${city}&key=eefd36557b0250d19d243aea0f62d499`).then((response) => response.json()).then((data) => {const { lives } = data;// 更新響應式數據weather.city = lives[0].city;weather.weather = lives[0].weather;weather.temperature = lives[0].temperature;weather.winddirection = lives[0].winddirection;weather.windpower = lives[0].windpower;weather.reporttime = lives[0].reporttime;});
};

使用Geolocation API獲取當前位置:

onMounted(() => {let latitude = 0;let longitude = 0;if ("geolocation" in navigator) {navigator.geolocation.getCurrentPosition(function (position) {latitude = position.coords.latitude;longitude = position.coords.longitude;},function (error) {console.error("獲取位置失敗:", error.message);});} else {console.error("瀏覽器不支持Geolocation");}
});

加載高德地圖API并在地圖上顯示標記和天氣信息:

AMapLoader.load({// 加載高德地圖API
}).then((AMap) => {// 在地圖上顯示當前位置的標記const marker = new AMap.Marker({position: new AMap.LngLat(longitude, latitude),title: "當前位置",});// 其他地圖初始化和相關操作// 在地圖上顯示信息窗體watch(weather, (newVal, oldVal) => {// 創建信息窗體var content = ["<div><b>天氣</b>",`城市:${weather.city}`,// 其他天氣信息..."</div>",];var infoWindow = new AMap.InfoWindow({content: content.join("<br>"),anchor: "top-left",});infoWindow.open(map, [longitude, latitude]);});// 添加標記到地圖map.add(marker);// 標記點擊事件marker.on('click', function (e) {// 打開信息窗體infoWindow.open(map, [longitude, latitude]);});
}).catch(e => {console.error(e);
});

全部代碼

<template><div id="container"></div><!--  -->
</template>
<script setup lang="ts">
import {onMounted, reactive, ref, watch} from 'vue';
import AMapLoader from '@amap/amap-jsapi-loader';
import {computed} from "vue-demi";// 如果是在 ts 的項目中,這一步會有類型錯誤,解決方案請移步 2.1.1
window._AMapSecurityConfig = {securityJsCode: 'd6a5157a0b06c55bcee22c7b69a42c5a'// 你的安全密鑰
};
// 定義當前經緯度
/** 初始化地圖函數 */
// IP定位獲取當前城市信息
const weather = reactive({city: '',weather: '',temperature: '',winddirection: '',windpower: '',reporttime: ''
})
const weatheritem = computed(() => {// 回調函數必須return,結果就是計算的結果// 如果計算屬性依賴的數據發生變化,那么會重新計算return weather
})const getWeather = function (city) {fetch(`https://restapi.amap.com/v3/weather/weatherInfo?city=${city}&key=eefd36557b0250d19d243aea0f62d499` //天氣key).then((response) => {return response.json();}).then((data) => {const {lives} = dataconsole.log(lives[0])weather.city = lives[0].cityweather.weather = lives[0].weatherweather.temperature = lives[0].temperatureweather.winddirection = lives[0].winddirectionweather.windpower = lives[0].windpowerweather.reporttime = lives[0].reporttime});
}
onMounted(() => {let latitude = 0;let longitude = 0;// 獲取當前位置的經緯度
// 檢查瀏覽器是否支持Geolocationif ("geolocation" in navigator) {// 獲取當前位置navigator.geolocation.getCurrentPosition(function (position) {// 獲取經緯度latitude = position.coords.latitude;longitude = position.coords.longitude;// 在這里使用經緯度數據進行其他操作console.log("緯度:" + latitude + ", 經度:" + longitude);},function (error) {// 處理獲取位置失敗的情況console.error("獲取位置失敗:", error.message);});} else {// 瀏覽器不支持Geolocationconsole.error("瀏覽器不支持Geolocation");}// AMapLoader => 加載器// 資源加載完成后就會觸發 thenAMapLoader.load({"key": "34b7b1e632fcf24d30be5c5825f8043d", // 申請好的Web端開發者定位Key,首次調用 load 時必填"version": "2.0",   // 指定要加載的 JS API 的版本,缺省時默認為 1.4.15"plugins": [],           // 需要使用的的插件列表,如比例尺'AMap.Scale'等}).then((AMap) => {AMap.plugin('AMap.CitySearch', function () {var citySearch = new AMap.CitySearch()citySearch.getLocalCity(function (status, result) {if (status === 'complete' && result.info === 'OK') {// 查詢成功,result即為當前所在城市信息console.log(result.city)getWeather(result.city)}})})const marker = new AMap.Marker({position: new AMap.LngLat(longitude, latitude), //經緯度對象,也可以是經緯度構成的一維數組[116.39, 39.9]title: "當前位置",});//打開信息窗體// 初始化地圖const map = new AMap.Map('container', {center: [longitude, latitude], //地圖中心點zoom: 10// 配置對象 - 配置地圖的風格和縮放比例,請移步 2.2});//獲取當前城市信息//信息窗體的內容watch(weather, (newVal, oldVal) => {console.log(newVal, oldVal)var content = ["<div><b>天氣</b>",`城市:${weather.city}`,`時間:${weather.reporttime}`,`天氣:${weather.weather}`,`溫度:${weather.temperature}℃`,`風向:${weather.winddirection}`,`風速:${weather.windpower}`,"</div>",];
//創建 infoWindow 實例var infoWindow = new AMap.InfoWindow({content: content.join("<br>"), //傳入字符串拼接的 DOM 元素anchor: "top-left",});infoWindow.open(map, [longitude, latitude]); //map 為當前地圖的實例,map.getCenter() 用于獲取地圖中心點坐標。})map.add(marker)marker.on('click', function (e) {// 打開信息窗體,顯示信息console.log(e)infoWindow.open(map, [longitude, latitude]);});}).catch(e => {console.log(e);});
});</script><style scoped>
#container {width: 100vw;height: 100vh;
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719279.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

哪個有名的工具可以安全記事 私密記事本筆記推薦

在這個數字化的時代&#xff0c;我們的生活已經離不開各種記事工具。它們幫助我們記錄生活中的點點滴滴&#xff0c;無論是工作上的重要事項&#xff0c;還是個人的私密心情。然而&#xff0c;當我在尋找一個能夠安心記錄私密事情的工具時&#xff0c;安全性成為了我最關心的因…

C++從零開始的打怪升級之路(day42)

這是關于一個普通雙非本科大一學生的C的學習記錄貼 在此前&#xff0c;我學了一點點C語言還有簡單的數據結構&#xff0c;如果有小伙伴想和我一起學習的&#xff0c;可以私信我交流分享學習資料 那么開啟正題 今天分享的是關于繼承的知識點 1.菱形繼承 我們有許多關于繼承…

【軟件測試】Postman中變量的使用

Postman中可設置的變量類型有全局變量&#xff0c;環境變量&#xff0c;集合變量&#xff0c;數據變量及局部變量。區別則是各變量作用域不同&#xff0c;全局變量適用于所有集合&#xff0c;環境變量適用于當前所選環境&#xff08;所有集合中均可使用不同環境變量&#xff09…

【CSP試題回顧】202309-2-坐標變換(其二)

CSP-202309-2-坐標變換&#xff08;其二&#xff09; 關鍵點總結 1.輸入輸出的同步關閉&#xff0c;以加快I/O操作的速度 這一點還是很重要的&#xff0c;本題代碼如果不進行輸入輸出的同步關閉會時間超限。 ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);2.…

職場中的祖傳代碼處理建議

程序員是如何看待“祖傳代碼”的&#xff1f; 祖傳代碼的由來 在實際的程序員工作中&#xff0c;祖傳代碼是常見的。因為真正的互聯網職場生活中&#xff0c;業務變動調整頻繁&#xff0c;每到一個新的業務線&#xff0c;第一件事就是熟悉現有工程代碼&#xff0c;看舊文檔等…

K8S中POD的控制器

一、Pod控制器及其功用 Pod控制器&#xff0c;又稱之為工作負載&#xff08;workload&#xff09;&#xff0c;是用于實現管理pod的中間層&#xff0c;確保pod資源符合預期的狀態&#xff0c;pod的資源出現故障時&#xff0c;會嘗試進行重啟&#xff0c;當根據重啟策略無效&am…

Linux基礎命令[9]-wc

文章目錄 1. wc 命令說明2. wc 命令語法3. wc 命令示例3.1 不加參數3.2 -c&#xff08;統計字節數&#xff09;3.3 -m&#xff08;統計字符數&#xff09;3.4 -l&#xff08;統計行數&#xff09;3.5 -L&#xff08;最長一行的長度&#xff09;3.6 -w&#xff08;統計單詞數&am…

Arcgis實現點位空間位置從上到下從左到右排序

效果 背景 工作項目中經常會遇到需要對網格進行編號&#xff0c;而編號是有一定原則的&#xff0c;比如空間位置從上到下從左到右&#xff0c;或者其它原則&#xff0c;那么都可以通過下面的方式來實現 1、準備數據 點shp文件&#xff0c;查看初始FID字段標注&#xff0c;目…

transformer--transformer模型構建和測試

前面幾節進行了各種組件的學習和編碼&#xff0c;本節將組件組成transformer&#xff0c;并對其進行測試 EncoderDecoder 編碼器解碼器構建 使用EnconderDecoder實現編碼器-解碼器結構 # 使用EncoderDeconder類實現編碼器和解碼器class EncoderDecoder(nn.Module):def __ini…

飛書文檔批量導出

背景需求 最近所參與的項目即將結項&#xff0c;需要將飛書中的產品需求文檔&#xff08;PRD&#xff09;交付給甲方&#xff0c;由于文檔較多&#xff0c;大概有兩百多個&#xff0c;一個一個的下載導出&#xff0c;太麻煩了&#xff08;PS&#xff1a;本人比較懶&#xff09;…

ROS create_wall_timer/create_timer函數區別

在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;create_wall_timer 和 create_timer 是用于創建定時器的兩個不同的函數&#xff0c;它們在使用上有一些區別&#xff1a; Clock Type: create_wall_timer: 創建的定時器是基于Wall clock的&#xff0c;這意…

軟考筆記--結構化分析方法

結構化分析&#xff08;SA&#xff09;方法的基本思想是自定向下&#xff0c;逐層分解&#xff0c;把一個大問題分解成若干個小問題&#xff0c;每一個小問題再分解成若干個更小的問題。經過逐層分解&#xff0c;每個最低層的問題都是足夠簡單、容易解決的。 SA方法分析模型的…

78. 子集(力扣LeetCode)

文章目錄 78. 子集題目描述回溯算法 78. 子集 題目描述 給你一個整數數組 nums &#xff0c;數組中的元素 互不相同 。返回該數組所有可能的子集&#xff08;冪集&#xff09;。 解集 不能 包含重復的子集。你可以按 任意順序 返回解集。 示例 1&#xff1a; 輸入&#xff…

selenium高亮元素

def set_high_light_elment(self, element): """高亮web元素。 Args: element: WebElement:web元素 """ element_styleelement.get_attribute(style) self.mark_dom_text(element_s…

【MySQL】表的約束——空屬性、默認值、列描述、zerofill、主鍵、自增長、唯一鍵、外鍵

文章目錄 MySQL表的約束1. 空屬性2. 默認值3. 列描述4. zerofill5. 主鍵6. 自增長7. 唯一鍵8. 外鍵 MySQL 表的約束 MySQL中的表的約束是一種規則&#xff0c;用于限制或保護表中數據的完整性和合法性。約束可以確保數據在插入、更新或刪除時滿足特定的條件&#xff0c;從而維護…

MySQL相關問題

MySQL相關問題 一、MySQL支持哪些存儲引擎&#xff1f;二、MySQL是如何執行一條SQL的&#xff1f;三、MySQL數據庫InnoDB存儲引擎是如何工作的&#xff1f;四、如果要對數據庫進行優化&#xff0c;該怎么優化&#xff1f;五、MySQL如何定位慢查詢&#xff1f;六、如何分析MySQL…

揭秘App訪問量背后的秘密:數據統計與分析

在移動互聯網時代&#xff0c;App已成為人們日常生活的重要組成部分。對于App運營者來說&#xff0c;了解用戶的訪問量、行為習慣等數據至關重要。本文將深入探討如何精準統計App訪問量&#xff0c;為運營者提供有價值的數據支持。 一、App訪問量統計的重要性 訪問量是衡量A…

計算機專業必看的十部電影

計算機專業必看的十部電影 1. 人工智能2. 黑客帝國3. 盜夢空間4. 社交網絡5. Her6. 模仿游戲7. 斯諾登8. 頭號玩家9. 暗網10. 網絡迷蹤 計算機專業必看的十部電影&#xff0c;就像一場精彩盛宴&#xff01; 《黑客帝國》讓你穿越虛擬世界&#xff0c;感受高科技的魅力《模仿游戲…

公網IP怎么獲取?

公網IP是網絡中設備的唯一標識符&#xff0c;用于在Internet上進行通信和定位。對于普通用戶來說&#xff0c;了解如何獲取自己的公網IP是很有必要的&#xff0c;本文將介紹幾種獲取公網IP的方法。 方法一&#xff1a;通過路由器查詢 大多數家庭和辦公室使用的路由器都會有一個…

深入解析Mybatis-Plus框架:簡化Java持久層開發(七)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 簡介 本章節介紹如何通過Mybatis-Plus刪除數據庫中的數據。 本章節不需要前置準備&#xff0c;繼續使用之前的測試類&#xff0c;數據庫表進行操作。 &#x1f4…