根据输入的详细地址解析经纬度

在这里插入图片描述

摘要:

今天遇到一个需求:就是做客户导入的时候因为导入的客户地址的时候没有经纬度的,但是同步的时候需要经纬度的,所以还是要根据客户提供的详细地址解析出来对应的经纬度!回填到对应的经纬度的表单之中进行客户的同步功能!

在这里插入图片描述

<template><div><el-input v-model="formData.detailAddress" placeholder="请输入详细地址" @input="fetchCoordinates" /><p>经度: {{ coordinates.lng }}</p><p>纬度: {{ coordinates.lat }}</p></div>
</template><script lang="ts">
import { ref, reactive } from 'vue';export default {setup() {const formData = reactive({detailAddress: ''});const coordinates = reactive({lng: '',lat: ''});const fetchCoordinates = async () => {if (formData.detailAddress) {try {const encodedAddress = encodeURIComponent(formData.detailAddress);const apiKey = 'YOUR_API_KEY'; // 替换为你的 API 密钥const response = await fetch(`https://api.map.com/geocode/json?address=${encodedAddress}&key=${apiKey}`);//const response = await fetch(`https://restapi.amap.com/v3/geocode/geo?key=${apiKey}&address=${encodedAddress}`);if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}const data = await response.json();console.log('Response data:', data); // 输出响应数据if (data.status === 'OK') {coordinates.lng = data.results[0].geometry.location.lng;coordinates.lat = data.results[0].geometry.location.lat;} else {console.error('地理编码失败', data);}} catch (error) {console.error('请求失败', error);}}};return {formData,coordinates,fetchCoordinates};}
};
</script>

代码功能解释
模板部分:

  • 使用 el-input 组件绑定 formData.detailAddress,并设置 @input 事件监听器,当用户输入地址时调用
    fetchCoordinates 方法。 显示解析后的经纬度。

脚本部分:

  • 使用 reactive 创建响应式对象 formData 和 coordinates。
  • 定义 fetchCoordinates 方法,该方法在用户输入地址时被调用。
  • 在 fetchCoordinates 方法中,检查 formData.detailAddress 是否有值,如果有值则发起地理编码请求。
  • 添加了对 response.ok 的检查,确保请求成功后再解析 JSON 数据。
  • 请求成功后,解析返回的 JSON 数据,提取经纬度并更新 coordinates 对象。
  • 如果请求失败或地理编码失败,记录详细的错误信息。
  • 添加了 console.log 语句,输出响应数据,帮助调试。

控制流图:

在这里插入图片描述
详细解释

  • A[用户输入详细地址]: 用户在输入框中输入详细地址。
  • B[调用 fetchCoordinates 方法]: 输入框的 @input 事件触发,调用 fetchCoordinates 方法。
  • C{地址是否为空?}: 检查 formData.detailAddress 是否为空。
  • D[结束]: 如果地址为空,结束流程。
  • E[发起地理编码请求]: 发起地理编码请求。
  • F{请求是否成功?}: 检查请求是否成功。
  • G[记录请求失败错误]: 如果请求失败,记录错误信息。
  • H[解析返回数据]: 解析返回的 JSON 数据。
  • I{解析是否成功?}: 检查解析是否成功。
  • J[记录解析失败错误]: 如果解析失败,记录错误信息。
  • K[更新经纬度]: 更新 coordinates 对象中的经纬度。
  • L[显示经纬度]: 在页面上显示解析后的经纬度。

调试建议:

  • 检查 API 地址:确保
    https://api.map.com/geocode/json?address=KaTeX parse error: Expected 'EOF', got '&' at position 17: …encodedAddress}&̲key={apiKey}
    是正确的。
  • 检查 API 密钥:确保 YOUR_API_KEY 替换为你实际的 API 密钥。
  • 查看网络请求:使用浏览器的开发者工具(如 Chrome DevTools)查看网络请求的详细信息,包括请求头和响应体。
  • 日志输出:在代码中添加更多的 console.log 语句,输出请求和响应的详细信息,帮助定位问题。
  • API 文档:查阅 API 提供方的文档,确保请求参数和格式正确。
<el-form-item label="详细地址" prop="detailAddress" label-width="120px"><el-input v-model="formData.detailAddress" placeholder="请输入详细地址" @input="fetchCoordinates" />
</el-form-item>
<el-form-item label="坐标" prop="splon" label-width="120px"><el-input disabled oninput="value = value.replace(/[^0-9.-]/g,'')" v-model="formData.splon" class="!w-115px !mr-2px" clearable placeholder="请选择经度" /><el-input disabled oninput="value = value.replace(/[^0-9.-]/g,'')" v-model="formData.splat" class="!w-115px" clearable placeholder="请选择纬度" /><el-button text type="primary" size="small" @click="openChooseMap">选择坐标</el-button>
</el-form-item>
const fetchCoordinates = async () => {if (formData.value.detailAddress) {try {const encodedAddress = encodeURIComponent(formData.value.detailAddress);const apiKey = 'YOUR_API_KEY';const response = await fetch(`https://restapi.amap.com/v3/geocode/geo?key=${apiKey}&address=${encodedAddress}`);if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}const data = await response.json();console.log('Response data:', data); // 输出响应数据if (data.status == '1' || data.statusCode == 200) {const location = data.geocodes[0].location;formData.value.splon = location.split(',')[0];formData.value.splat = location.split(',')[1];} else {// console.error('解析地址失败:', data);}} catch (error) {console.error('请求失败', error);}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/460097.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

upload-labs靶场Pass-21

upload-labs靶场Pass-21 本关上传方法众多&#xff0c;但是应该考察的是数组后缀绕过&#xff0c;所以我的上传围绕此展开 1.分析源码 $is_upload false; // 初始化上传状态为false $msg null; // 初始化消息变量为null// 检查是否有文件上传 if(!empty($_FILES[upload_fi…

Flutter实战短视频课程

1、课程导学 一套代研运行多蜡 体州一致&#xff0c;目胜能优昇 未来大趋势 不改交原生项目的基础上&#xff0c;扩展Flutter能力 Flutter原生灵话切涣 0入侵 最简单、最通用 最新Flutter 3,x新特性讲解 大量flutter官方组件和api学习 最常用的第三方库使用及原理解析 自研组…

Python中的数据可视化:Matplotlib基础与高级技巧

Python中的数据可视化&#xff1a;Matplotlib基础与高级技巧 数据可视化是数据分析和数据科学中不可或缺的一部分。通过图表&#xff0c;我们可以更直观地观察数据的分布和趋势。Matplotlib作为Python最基础、也是最广泛使用的绘图库之一&#xff0c;不仅支持多种常用图表&…

无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划

着重介绍通过对三维 PCD 点云进行处理生成 2D 栅格地图 PGM&#xff0c;而后将该 PGM 地图充分运用到无人系统路径规划之中&#xff0c;使得无人机能够依据此规划合理避开飞行路线上可能出现的障碍物。&#xff08;解决如何使用PGM的问题&#xff09; Hybrid A*算法 参考博客…

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程&#xff1b; 例如&#xff1a;&#xff08;方程1&#xff09;。 在线性代数的第一讲中&#xff0c;我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…

浮动+flex布局

一.浮动 1.介绍 2.效果 <style> .one{ width: 100px; height: 100px; background-color: red; float: left; } .two{ width: 200px; height: 200px; background-color: blue; float: right; } </style> </head> <body> <div class"one&quo…

没有对象来和我手撕红黑树吧

1. 红黑树的介绍 红黑树也是一种自平衡的二叉搜索树&#xff0c;在每一个节点增加了一个存储位来表示节点的颜色&#xff0c;可以是红色也可以是黑色&#xff0c;通过约束颜色来维持树的平衡&#xff0c;具有以下的性质&#xff1a; 每个节点不是红色就是黑色根节点为黑色如果…

深入理解gPTP时间同步过程

泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…

rom定制系列------红米note8_miui14安卓13定制修改固件 带面具root权限 刷写以及界面预览

&#x1f49d;&#x1f49d;&#x1f49d;红米note8机型代码&#xff1a;ginkgo。高通芯片。此固件官方最终版为稳定版12.5.5安卓11的版本。目前很多工作室需要高安卓版本的固件来适应他们的软件。并且需要root权限。根据客户要求。修改固件为完全root。并且修改为可批量刷写的…

MicroServer Gen8再玩 OCP万兆光口+IT直通之二

这个接上一篇&#xff0c;来个简单测试。 一、测试环境 PC端&#xff1a;Win10&#xff0c;网卡&#xff1a;万兆光纤&#xff08;做都做了&#xff0c;都给接上&#xff09;&#xff0c;硬盘使用N年的三星SSD 840 交换机&#xff1a;磊科GS10&#xff0c;带两个万兆口 Gen…

怎么理解ES6 Proxy

Proxy 可以理解成&#xff0c;在目标对象之前架设一层 “拦截”&#xff0c;外界对该对象的访问&#xff0c;都必须先通过这层拦截&#xff0c;因此提供了一种机制&#xff0c;可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理&#xff0c;用在这里表示由它来 “代理…

揭秘代码界的新挑战:低代码平台,为何让程序员头疼不已?

我最近在网上看到一个很有趣的话题&#xff1a;为什么程序员大多讨厌低代码&#xff1f;好家伙&#xff0c;这一下子就将低代码推到了程序员的对立面&#xff0c;两者直接到了水火不容的地步。 其实低代码倒也不是什么新鲜事物&#xff0c;它是一种只需用很少甚至不需要代码即可…

APP如何提升关键词排名?

提升关键词排名是ASO&#xff08;App Store Optimization&#xff09;策略中的关键环节&#xff0c;以下是一些有效的方法来提高App在应用商店中的关键词排名&#xff1a; 1. **关键词研究**&#xff1a; - 使用专业的ASO工具进行关键词研究&#xff0c;找出与你的App相关且…

ClickHouse 3节点集群安装

ClickHouse 简介 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 官方网站&#xff1a;https://clickhouse.com/ 项目地址&#xff1a;https://github.com/ClickHouse/ClickHouse 横向扩展集群介绍 此示例架构旨在提供可扩展性。它包括三个节点&#xff…

基于springboot的在线投票系统,比赛实时投票平台的实现

1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a;windows 7…

UE4安卓打aab包时,同时存在“gradle”、“arm64/gradle”两个Gradle工程的原因

两个Gradle工程的现象 在出安卓aab包时&#xff0c;观察到存在以下两个Gradle工程&#xff1a; 1、Intermediate\Android\arm64\gradle &#xff08;称为arm64的Gradle&#xff09; 2、Intermediate\Android\gradle&#xff08;称为根下的Gradle&#xff09; 它们存在一些小…

在IDEA中运行Mybatis后发现取出的password值为null

问题&#xff1a; 解决方案&#xff1a;修改sql文如下&#xff08;取别名&#xff09; Select("select id,name,pwd as password from user where id #{id}") 重新运行即可

股票基础交易规则!最小变动数量规则!最大数量限制规则!

股票基础交易规则系列 数量规则 01 最小变动数量规则 沪深主板、创业板&#xff1a;单笔申报数量应当为100股或其整数倍。 科创板&#xff1a;单笔申报数量应当不小于200股&#xff0c;1股递增。 北交所&#xff1a;单笔申报数量应当不小于100股&#xff0c;1股递增。 举例…

Selenium自动化测试框架详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 设计思路 本文整理归纳以往的工作中用到的东西&#xff0c;现汇总成基础测试框架提供分享。 框架采用python3 selenium3 PO yaml ddt unittest等技术编写…

ChangeCLIP环境配置

看到有个现成的dockerfile&#xff0c;先试试 ok首先需要root权限的用户 才能用docker&#xff0c;其次要外网&#xff0c;要不然有些东西好像下载不了 &#xff08;失败&#xff09; 那就直接配吧 我看12服务器上有个openmmlab的环境&#xff0c;先基于这个环境吧 # 用lx账…