当前位置: 首页 > news >正文

高德地图地理编码 逆地理编码全解析:地址和坐标的双向转换实战

一、为什么需要地理编码和逆地理编码?

在开发中,我们经常会遇到两类核心需求:

  • 地理编码(Address to Coordinates):给定一个地址,获取它对应的经纬度,用于地图标注、导航定位等。

  • 逆地理编码(Coordinates to Address):给定经纬度,获取对应的详细地址,方便展示给用户看,提升用户体验。

这两者互为补充,构成了地图开发中地址与坐标转换的基础能力。


✅ 使用npm安装
npm install axios✅ 使用yarn安装
yarn add axios✅ 使用pnpm安装
pnpm add axios
import axios from 'axios';
const AMapKey = '你的key';✅“Web服务API”类型(支持REST接口)

二、逆地理编码实现:经纬度转地址

export const getAddressFromCoords = async (lng: number, lat: number): Promise<string> => {console.log('传入的经纬度', lng, lat)const url = `https://restapi.amap.com/v3/geocode/regeo?output=json&location=${lng},${lat}&key=${AMapKey}`;try {const res = await axios.get(url);console.log('逆地理接口响应:', res.data)if (res.data.status === '1') {return res.data.regeocode.formatted_address;} else {console.error('高德逆地理编码失败:', res.data.info);return '未知位置';}} catch (err) {console.error('请求高德接口出错:', err);return '位置获取失败';}
}

三、地理编码实现:地址转经纬度

export const geocodeAddress = async (addr:string): Promise<[number, number]> => {console.log('传入的地址', addr)const url=`https://restapi.amap.com/v3/geocode/geo?address=${addr}&output=json&key=${AMapKey}`try {const res = await axios.get(url);console.log('地理编码接口响应:', res.data)if (res.data.status === '1' && res.data.geocodes && res.data.geocodes.length > 0) {const locationStr: string = res.data.geocodes[0].location; // 格式是 "经度,纬度"const [lng, lat] = locationStr.split(',').map(Number);return [lng, lat];} else {console.error('地址转经纬度失败:', res.data.info || '无有效返回');return [0, 0]; // 返回默认经纬度或抛错看需求}} catch (err) {console.error('请求高德接口出错:', err);return [0, 0];}
}

核心逻辑解析:

  • 通过地址拼接请求URL,调用高德地理编码接口

  • 判断返回状态和结果有效性

  • 从结果中提取经纬度字符串,拆分成数字数组返回

  • 出错时返回默认坐标 [0,0](可自行定制)


四、使用场景示例

  • 地图选点:用户输入地址自动定位坐标(调用地理编码)

  • 坐标回显:设备上传经纬度,页面显示详细地址(调用逆地理编码)

  • 位置搜索:支持地址搜索和坐标定位两种方式


五、总结

通过上述两个方法,你可以实现地址和经纬度的双向转换,满足大部分地图业务需求。后续可结合缓存、异步节流等策略,优化体验和性能。


🌲喜欢这篇文章,记得点赞收藏关注,持续输出更多前端地图技术分享!

http://www.dtcms.com/a/320515.html

相关文章:

  • HarmonyOS 设备自动发现与连接全攻略:从原理到可运行 Demo
  • 深入理解 robots.txt:网站与搜索引擎的 “沟通协议”
  • DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛
  • 控制建模matlab练习12:线性状态反馈控制器-①系统建模
  • Ideogram:优秀的在线AI绘画平台
  • 人工智能基础知识笔记十五:文本分块(Chunk)
  • 芯伯乐XBL6019 60V/5A DC-DC升压芯片的优质选择
  • 新手向:Python实现图片转ASCII艺术
  • Custom SRP - Directional Shadows
  • 【0基础3ds Max】主工具栏介绍(上)
  • 论文reading学习记录7 - daily - ViP3D
  • 3D TOF 视觉相机:工业视觉的破局者,重塑视觉感知的未来
  • Cesium 模型3dtiles压平,任意多面压平,无闪烁
  • ETL流程详解:从概念到实战案例一次讲透
  • 宝龙地产债务化解解决方案二:基于资产代币化与轻资产转型的战略重构
  • OpenAI 最新开源模型 gpt-oss (Windows + Ollama/ubuntu)本地部署详细教程
  • 适用于在线3D测量和检测的3D激光轮廓仪
  • DMETL简单介绍、安装部署和入门尝试
  • MySQL definer does not exist 问题分析
  • 【Qt开发】常用控件(二) -> enabled
  • Prometheus监控平台部署
  • java分布式定时任务
  • 使用 Setup Project 打包
  • 在嵌入式操作系统中,TerminateTask函数
  • Java 使用 SSHJ 执行 SSH 命令和 SFTP 文件上传和下载
  • 亚麻云之平步轻云
  • GDB中thread apply all命令使用指南
  • 正确使用 JetBrains
  • Upscayl – 免费开源的 AI 图像放大工具,跨平台使用
  • FastAPI的BackgroundTasks如何玩转生产者-消费者模式?