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.mzph.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不同平台的图像处理框…