vue3 根據城市名稱計算城市之間的距離

<template><div class="distance-calculator"><h1>城市距離計算器</h1><!-- 城市輸入框 --><div class="input-group"><inputv-model="city1"placeholder="請輸入第一個城市"@keyup.enter="calculateDistance"/><inputv-model="city2"placeholder="請輸入第二個城市"@keyup.enter="calculateDistance"/></div><!-- 計算按鈕 --><button @click="calculateDistance" :disabled="loading">{{ loading ? '計算中...' : '計算距離' }}</button><!-- 結果顯示 --><div v-if="result" class="result">{{ result }}</div><!-- 錯誤提示 --><div v-if="error" class="error">{{ error }}</div></div>
</template><script>
// 1. 需要安裝的依賴:
// - Vue 3 (已包含在項目中)
// - 高德地圖JS API (通過CDN引入,無需npm安裝)
// - 可選: 如果需要HTTP請求,可以安裝axios (npm install axios)import { ref, onMounted } from 'vue';export default {name: 'DistanceCalculator',setup() {// 2. 響應式數據const city1 = ref('北京'); // 默認值可修改或留空const city2 = ref('上海'); // 默認值可修改或留空const result = ref('');const error = ref('');const loading = ref(false);// 3. 高德地圖實例let geocoder = null;let AMap = null;// 4. 初始化高德地圖const initAMap = () => {return new Promise((resolve, reject) => {// 首先設置安全配置window._AMapSecurityConfig = {securityJsCode: 'efe5df61770675b2985df3e32565fb80'  // 安全密鑰};// 檢查是否已加載if (window.AMap) {AMap = window.AMap;// 確保插件加載完成后再初始化AMap.plugin(['AMap.Geocoder', 'AMap.GeometryUtil'], () => {geocoder = new AMap.Geocoder({city: "全國" // 指定查詢范圍為全國});resolve();});return;}// 動態加載高德地圖JSconst script = document.createElement('script');script.src = `https://webapi.amap.com/maps?v=1.4.15&key=05d4c031a356cdffb8055c0d1532ced8`;  // API keyscript.onload = () => {if (window.AMap) {AMap = window.AMap;// 加載完成后加載插件AMap.plugin(['AMap.Geocoder', 'AMap.GeometryUtil'], () => {try {geocoder = new AMap.Geocoder({city: "全國" // 指定查詢范圍為全國});resolve();} catch (err) {reject(new Error('Geocoder 插件初始化失敗'));}});} else {reject(new Error('AMap 加載失敗'));}};script.onerror = () => {reject(new Error('高德地圖腳本加載失敗'));};document.head.appendChild(script);});};// 5. 計算距離的主要函數const calculateDistance = async () => {if (loading.value) return;try {loading.value = true;error.value = '';result.value = '';// 確保高德地圖已初始化if (!geocoder) {await initAMap();}// 驗證輸入if (!city1.value.trim() || !city2.value.trim()) {throw new Error('請輸入兩個城市名稱');}// 獲取城市坐標const [location1, location2] = await Promise.all([new Promise((resolve, reject) => {geocoder.getLocation(city1.value, (status, result) => {if (status === 'complete' && result.geocodes.length) {resolve(result.geocodes[0].location);} else {reject(new Error(`無法獲取 ${city1.value} 的坐標`));}});}),new Promise((resolve, reject) => {geocoder.getLocation(city2.value, (status, result) => {if (status === 'complete' && result.geocodes.length) {resolve(result.geocodes[0].location);} else {reject(new Error(`無法獲取 ${city2.value} 的坐標`));}});})]);if (!AMap.GeometryUtil) {throw new Error('GeometryUtil 插件未加載成功');}const distance = AMap.GeometryUtil.distance([location1.lng, location1.lat],[location2.lng, location2.lat]);const distanceInKm = Math.round(distance / 1000);result.value = `${city1.value} 到 ${city2.value} 的直線距離約為: ${distanceInKm}公里`;} catch (err) {console.error('計算距離出錯:', err);error.value = err.message || '計算距離時出錯';} finally {loading.value = false;}};// 6. 組件掛載時初始化onMounted(() => {// 預加載高德地圖initAMap().catch(err => {console.error('初始化地圖失敗:', err);error.value = '初始化地圖失敗,請刷新重試';});});return {city1,city2,result,error,loading,calculateDistance};}
};
</script><style scoped>
.distance-calculator {max-width: 500px;margin: 0 auto;padding: 20px;font-family: Arial, sans-serif;
}.input-group {margin: 20px 0;display: flex;gap: 10px;
}input {flex: 1;padding: 8px 12px;border: 1px solid #ddd;border-radius: 4px;
}button {background-color: #4CAF50;color: white;padding: 10px 15px;border: none;border-radius: 4px;cursor: pointer;
}button:disabled {background-color: #cccccc;cursor: not-allowed;
}.result {margin-top: 20px;padding: 10px;background-color: #f8f9fa;border-radius: 4px;
}.error {margin-top: 20px;padding: 10px;color: #dc3545;background-color: #f8d7da;border-radius: 4px;
}
</style>

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

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

相關文章

Java安全-FastJson反序列化分析

FastJson介紹 Fastjson 是阿里巴巴推出的一款高性能 JSON 序列化/反序列化庫&#xff0c;由于其便捷性被廣泛應用于 Java 項目中 FastJson使用 package org.example;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject;public class FastjsonDemo {…

查看npm安裝了哪些全局依賴

查看npm安裝了哪些全局依賴 在macOS上&#xff0c;如果你想要查看通過npm全局安裝的依賴包&#xff0c;你可以使用以下幾種方法&#xff1a; 方法1&#xff1a;使用命令行 打開你的終端&#xff08;Terminal&#xff09;&#xff0c;然后輸入以下命令&#xff1a; npm list -…

告別代碼Bug,GDB調試工具詳解

在軟件開發的漫漫長路上&#xff0c;Bug 就像隱藏在黑暗中的 “小怪獸”&#xff0c;時不時跳出來給開發者們制造麻煩。曾經&#xff0c;歐洲航天局&#xff08;ESA&#xff09;首次發射阿麗亞娜 5 號火箭&#xff0c;這本是太空探索史上的重要時刻&#xff0c;卻因一行代碼導致…

LangChain4j(2):整合SpringBoot

1 新建Springboot項目 1.1 引入依賴 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0…

移動端六大語言速記:第2部分 - 控制結構

移動端六大語言速記&#xff1a;第2部分 - 控制結構 本文繼續對比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift這六種移動端開發語言的控制結構&#xff0c;幫助開發者快速掌握各語言的語法差異。 2. 控制結構 2.1 條件語句 各語言條件語句的語法對比&#xff1a; …

Linux-線程概念與線程控制的常用操作

一.Linux線程概念 1-1.線程是什么 在Linux中&#xff0c;線程是基于Linux原有的進程實現的。本質是輕量級進程(LWP)。在?個程序?的?個執?路線就叫做線程&#xff08;thread&#xff09;。更準確的定義是&#xff1a;線程是“?個進程內部的控制序列”。 我們之前所學習的進…

dfs記憶化搜索刷題 + 總結

文章目錄 記憶化搜索 vs 動態規劃斐波那契數題解代碼 不同路徑題解代碼 最長遞增子序列題解代碼 猜數字大小II題解代碼 矩陣中的最長遞增路徑題解代碼 總結 記憶化搜索 vs 動態規劃 1. 記憶化搜索&#xff1a;有完全相同的問題/數據保存起來&#xff0c;帶有備忘錄的遞歸 2.記憶…

【HTML】驗證與調試工具

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;HTML CSS JavaScript 文章目錄 1. HTML 驗證工具概述1.1 驗證的重要性1.2 常見 HTML 錯誤類型 2. W3C 驗證服務2.1 W3C Markup Validation Service2.2 使用 W3C 驗證器2.3 驗證結果解讀 3. 瀏覽器開發者工具3.1 Chrome DevTools…

認識rand, srand, time函數,生成隨機數

要完成猜數字游戲&#xff0c;首先要生成隨機數&#xff0c;那么該怎么生成隨機數&#xff1f;、 1.rand函數 rand函數是庫函數&#xff0c;使用的時候要使用頭文件stdlib.h c語言中&#xff0c;提供了rand函數來生成隨機數&#xff0c;來看一下函數使用&#xff1a; 但是r…

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多變量時序預測(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多變量時序預測&#xff08;Matlab&#xff09; 目錄 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多變量時序預測&#xff08;Matlab&#xff09;預測效果基本介紹程序設計參考資料 預測效果 基本介紹 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…

Go語言從零構建SQL數據庫引擎(2)

SQL標準與數據庫系統實現差異 在上一節中&#xff0c;我們了解了關系型數據庫的基礎概念。現在&#xff0c;讓我們深入探討SQL語言標準以及不同數據庫系統之間的實現差異。 SQL語言的誕生與演進 想象你經營的咖啡店生意蒸蒸日上&#xff0c;需要一個更強大的系統來管理數據。…

智能導診系統的技術體系組成

智能導診系統的技術體系由基礎支撐技術、核心交互技術、應用場景技術及安全保障技術構成&#xff0c;具體可歸納為以下六個維度&#xff1a; 一、基礎支撐技術 1、AI大模型與深度學習 醫療大模型&#xff1a;如騰訊醫療AI、DeepSeek等&#xff0c;通過海量醫學文獻和病例訓…

QML輸入控件: TextField(文本框)的樣式定制

目錄 引言示例簡介示例代碼與關鍵點示例1&#xff1a;基礎樣式定制示例2&#xff1a;添加圖標示例3&#xff1a;交互式元素&#xff08;清除按鈕&#xff09; 實現要點總結完整工程下載 引言 在Qt Quick應用程序開發中&#xff0c;文本輸入是最常見的用戶交互方式之一。TextFi…

leetcode hot100 多維動態規劃

1??2?? 多維動態規劃&#xff08;區間 DP、狀態機 DP&#xff09; 62. 不同路徑 一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角&#xff08;在下圖…

3.27學習總結 爬蟲+二維數組+Object類常用方法

高精度&#xff1a; 一個很大的整數&#xff0c;以字符串的形式進行接收&#xff0c;并將每一位數存儲在數組內&#xff0c;例如100&#xff0c;即存儲為[1][0][0]。 p2437蜜蜂路線 每一個的路線數前兩個數的路線數相加。 #include <stdio.h> int a[1005][1005]; int …

車載以太網網絡測試-26【SOME/IP-通信方式-2】

目錄 1 摘要2 Method &#xff08;FF/RR&#xff09;、Event、Filed介紹2.1. SOME/IP Method 接口2.1.1 **Fire & Forget (FF)** - 單向調用2.1.2 **Request/Response (RR)** - 請求/響應模式2.1.3 **車載ECU通信實現示例**:2.1.4 **通信序列示例**2.1.5 實現注意事項 2.2 …

把doi直接插入word中,然后直接生成參考文獻

這段代碼通過提取、查詢、替換DOI&#xff0c;生成參考文獻列表來處理Word文檔&#xff0c;可按功能模塊劃分&#xff1a; 導入模塊 import re from docx import Document from docx.oxml.ns import qn from habanero import Crossref導入正則表達式模塊re用于文本模式匹配&a…

[C++] : C++11 右值引用的理解

&#xff08;一&#xff09;什么是左值和右值&#xff1f; 傳統的C語法中就有引用的語法&#xff0c;而C11中新增了的右值引用語法特性&#xff0c;所以從現在開始我們 之前學習的引用就叫做左值引用。無論左值引用還是右值引用&#xff0c;都是給對象取別名。 1.左值 左值是一…

windows服務器切換到linux服務器踩坑點

單節點環境依賴性 單節點問題&#xff0c;影響業務可用性&#xff0c;windows影響后續自動化&#xff0c;健壯性的提升&#xff0c;需要進行linux化 每個服務至少是雙節點&#xff0c;防止單點故障&#xff0c;提升系統的可用性&#xff0c;健壯性。linux化后可以進行docker化…

美顏SDK兼容性挑戰:如何讓美顏濾鏡API適配iOS與安卓?

如何讓美顏濾鏡API同時適配iOS與Android&#xff0c;并確保性能流暢、效果一致&#xff0c;是開發者面臨的一大挑戰。今天&#xff0c;我將與大家一同深度剖析美顏SDK的跨平臺兼容性問題&#xff0c;并分享優化適配方案。 一、美顏SDK兼容性面臨的挑戰 1.1不同平臺的圖像處理框…