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

(前端地图)通过天地图API搜索地点并跳转定位

官方接口文档地址:天地图API

我这边用到的技术栈:

发送网络请求 —— axios

前端展示组件 —— ant design ui

框架 —— vue3

逻辑部分 —— typescript+setup

废话不多说,我直接以步骤的形式来说明

步骤一:使用ant组件添加搜索框(提供搜索入口)

<div class="search-box"> <a-input-search v-model:value="searchKeyword" placeholder="请输入地点搜索" enter-button @search="onSearchLocation" /> </div>

搜索框的位置和样式根据需求自行调整

步骤二:去天地图控制台申请key

天地图·应用认证

调用天地图下的API,这个key是必要的

浏览器端 Key:前端 Vue/HTML 用,必须配置域名白名单(本地调试加localhost);不在白名单域名直接拒绝访问

服务端 Key:后端 Java/Python、桌面 GIS 软件用,绑定服务器IP 白名单

步骤三: 配置vite代理,浏览器有同源策略会拦截本地前端直接调用天地图接口,配置vite代理就可以规避这个问题,但是需要注意,这个vite代理仅在本地生效,部署后需要在nginx中反向代理配置。或者有替代方案:就是通过后端接口的方式,来转发天地图请求

在vite.config.js——server——proxy中添加代理:

'/tianditu': { target: 'http://api.tianditu.gov.cn', changeOrigin: true, rewrite: (path) => path.replace(/^\/tianditu/, ''), },

这样配置之后就不会存在跨域问题了

步骤四:逻辑部分(发送接口请求)

//绑定搜索框的值 const searchKeyword = ref(""); //进行搜索 调用天地图搜索API async function onSearchLocation(){ //去除首尾空格 const keyword = searchKeyword.value.trim(); if(!keyword){return} try{ //请求参数 const postStr = JSON.stringify({ keyWord:keyword,//搜索关键词 level:7,//级别 mapBound: "73.4,3.8,135.1,53.6", // 全国范围(包含南海诸岛完整可视) queryType:1, //普通搜索 count:10,//返回结果数量 start:0,//起始位置 }); //这边的config.vecBasemapKey 是我的key,需要替换格式为 tk = xxxxxx const response = await axios.get(`/tianditu/v2/search?${config.vecBasemapKey}`,{ params:{ postStr, type:'query' }, }); //请求成功后进行地图跳转定位 if(response.status === 200){ handleSearchResult(response.data); }else{ return false; } }catch(err){ console.error(err); return false; } }

步骤五:请求成功后获取经纬度,并进行地图定位跳转

function handleSearchResult(data){ const area = data?.area; const poi = data?.pois?.length > 0 ? data.pois[0] : null; if(!area?.lonlat && !poi?.lonlat){return} //这边必须要转为number类型,不然跳转会失败 const [lon, lat] = (area?.lonlat.split(',') || poi?.lonlat.split(',')).map(Number); const view = mapViewStore.mapView; if(!view){return} //我这边是arcgis跳转的函数 view.goTo({ center:[lon, lat], zoom: 12 }) }

我这边用的跳转函数goto()是 arcgis的,如果你们用到的的openlayers,用下面的跳转函数:

//openlayers跳转定位 view.animate({ center: [lon, lat], zoom: 12, duration: 1000 // 动画时长ms,可选 });

好了,这样就实现功能闭环了,通过天地API 来实现地图搜索定位,如果有问题也可以在评论区给予建议修正,感谢!

http://www.jsqmd.com/news/1155532/

相关文章:

  • Codex接入国产大模型实战:用DeepSeek/Qwen替换AI编程助手后端
  • GEO搜索优化服务商哪家好?实体老板踩坑后,认准这家全链路服务商 - 松梢月冷
  • 2026年7月最新亨得利官方钟表服务中心|详细地址与24小时售后电话权威信息声明 - 亨得利官方
  • 重庆主城各区 2026 黄金回收,统一实时金价参考标准 - 奢侈品回收评测
  • 3个步骤轻松实现Unity游戏自动汉化:XUnity.AutoTranslator完全指南
  • 亲身到店探访合肥亨得利官方名表服务中心|全新维修地址及官方热线(2026年7月更新) - 亨得利官方
  • YOLOv8落石滑坡识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置+目标检测)
  • 告别来回拷贝的麻烦:mmap 文件映射的「直通仓库」玩法全解
  • 第 5 章 MTP 多 Token 预测与 FP8 量化底层代码
  • ML模型生产部署:容器化、K8s编排与可观测性实战指南
  • 2026海口爱马仕回收避坑测评|顶奢Hermes变现指南,专业包包回收怎么选 - 每日生活报
  • rocketmq 单消费者多线程消费是如何保证分区内的顺序消息严格按照 FIFO 顺序消费的?
  • OpenClaw 可视化部署完整实操,简化重复办公流程
  • 2026 年海宁汽车维修保养怎么选?天宇汽修13819022727甄选指南 - GrowUME
  • C盘空间不够怎么清理?先分清垃圾、缓存和大文件三类再动手
  • STC15单片机声光报警器实战:PCF8591+AT24C02实现光强阈值掉电保存
  • Draw.io UML 2.5 类图实战:3分钟完成Python类结构可视化(附模板)
  • 基于TPD2015FN与STM32的高性能负载控制系统设计
  • 亨得利官方名表服务中心|最新官方热线及详细地址权威信息公示(2026年7月最新) - 亨得利钟表维修中心
  • Python图像元数据处理:pyexiv2库安装、使用与实战指南
  • 3.3V 单片机系统电源切换电路:4种方案压降与成本实测对比
  • 武汉市汉阳区亨得利官方钟表服务中心电话公示(2026年7月最新) - 亨得利钟表维修中心
  • 无锡剥线机厂家怎么选,这几个实用方法帮你避坑
  • Claude Code 是什么?深度解析社区驱动的 Claude CLI 工具链
  • 扬州2026全屋定制,江都业主私藏的性价比之选 - 设计本
  • 【纪实】古法中医融合现代微创|探访湘乡起蛟中医医院两大核心特色科室
  • 李华渊:从科研试剂到AI中医,一位跨界者的二十年“骑士之旅”
  • NCP1654 PFC控制器实战:CCM模式65kHz升压电路,功率因数提升至0.99
  • 西安主流高考全日制补习学校有哪些?正规机构梯队排名+择校攻略 - 资讯焦点
  • 2026覆盖拱墅上城全域上门!逸程奢侈品回收估价不满意无需成交 - 逸程奢侈品回收中心