摄影网站建设松原网站建设

大连爱普生农业科技有限公司 2026/09/09 20:11:33

记录一下,大部分也是ai写的
注意的是,逆地理编码需要用的key是web服务端的,所以得重新申请一个key
意外的是,我在官方的文档里面运行,用我自己的key,不好使。(官方直接调用逆地理编码的那个方法就可以),这个没好使。
但又找到了一个调用地址,调用这个地址用自己的key好使,我没理解为什么。https://restapi.amap.com/v3/geocode/regeo?output=json&location=${lng},${lat}&key=${amapKey}&radius=1000&extensions=all

<template> <el-dialog :close-on-click-modal="false" :visible.sync="dialogVisible" append-to-body title="扫码地图" width="1000px" > <!-- 地图容器 --> <el-amap ref="map" :center="center" :zoom="zoom" class="amap-demo" vid="amapDemo" @click="handleMapClick" @init="handleMapInit" > <!-- 点击位置标记(修复图标配置) --> <el-amap-marker v-if="selectedPosition.lng && selectedPosition.lat" :position="[selectedPosition.lng, selectedPosition.lat]" :draggable="true" @dragend="handleMarkerDragEnd" ></el-amap-marker> </el-amap> <!-- 底部位置信息 --> <div class="position-info"> <span>所选位置:{{ selectedPosition.address || '请点击地图选择位置' }}</span> </div> <!-- 底部按钮 --> <div slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取消</el-button> <el-button :disabled="!selectedPosition.lng" type="primary" @click="handleConfirm">确定</el-button> </div> </el-dialog> </template> <script> export default { name: 'SelectMap', data() { return { zoom: 5, // 放大默认层级 center: [104.937478, 35.439575], // 初始中心点 dialogVisible: false, selectedPosition: { lng: '', lat: '', address: '' }, geocoder: null, // 逆地理编码实例 mapInstance: null, // 地图实例 markerInstance: null // 原生Marker实例(备用方案) } }, methods: { /** * 地图初始化完成 */ handleMapInit(map) { this.mapInstance = map; // 初始化逆地理编码(修复城市编码,设为空表示全国) this.geocoder = new AMap.Geocoder({ city: "", // 改为空,避免城市限制导致解析失败 radius: 1000, extensions: 'all' // 增加扩展参数,获取更全地址信息 }); // 自适应地图大小(解决弹窗初始化地图显示问题) setTimeout(() => { map.resize(); }, 100); }, /** * 点击地图事件(修复核心逻辑) */ handleMapClick(e) { try { const { lng, lat } = e.lnglat; // 更新选中位置的经纬度 this.selectedPosition.lng = lng; this.selectedPosition.lat = lat; // 更新地图中心点 this.center = [lng, lat]; // 逆地理编码获取地址 this.getAddressByLnglat(lng, lat); // 【可选】如果vue-amap的marker仍有问题,改用原生Marker // this.createNativeMarker(lng, lat); } catch (error) { console.error('地图点击事件异常:', error); } }, /** * 标记拖动结束事件 */ handleMarkerDragEnd(e) { const { lng, lat } = e.lnglat; this.selectedPosition.lng = lng; this.selectedPosition.lat = lat; this.getAddressByLnglat(lng, lat); }, /** * 逆地理编码:根据经纬度获取地址(修复权限错误) */ async getAddressByLnglat(lng, lat) { const amapKey = this.$mapConfig.gaodeWebServiceKey const url = `https://restapi.amap.com/v3/geocode/regeo?output=json&location=${lng},${lat}&key=${amapKey}&radius=1000&extensions=all`; try { // 注意:需开启跨域(浏览器端需配置Referer白名单) const res = await fetch(url, { method: 'GET', mode: 'cors' // 跨域模式 }); const data = await res.json(); if (data.status === '1' && data.regeocode) { this.selectedPosition.address = data.regeocode.formatted_address; } else { this.selectedPosition.address = `解析失败:${data.info || data.result}`; console.error('高德API返回错误:', data); } } catch (error) { this.selectedPosition.address = `经纬度:${lng.toFixed(6)}, ${lat.toFixed(6)}`; console.error('网络/跨域错误:', error); } }, /** * 【备用方案】创建原生Marker(避免vue-amap兼容问题) */ createNativeMarker(lng, lat) { // 先移除旧标记 if (this.markerInstance) { this.mapInstance.remove(this.markerInstance); } // 创建新标记(使用高德默认图标) this.markerInstance = new AMap.Marker({ position: [lng, lat], map: this.mapInstance, draggable: true }); // 监听原生标记拖动 this.markerInstance.on('dragend', (e) => { const { lng, lat } = e.lnglat; this.selectedPosition.lng = lng; this.selectedPosition.lat = lat; this.getAddressByLnglat(lng, lat); }); }, /** * 打开地图选择弹窗 */ open(initPosition = {}) { this.dialogVisible = true; // 重置选中位置 this.selectedPosition = { lng: '', lat: '', address: '' }; // 如果有初始定位,设置中心点和选中位置 if (initPosition.lng && initPosition.lat) { this.center = [initPosition.lng, initPosition.lat]; this.selectedPosition.lng = initPosition.lng; this.selectedPosition.lat = initPosition.lat; this.getAddressByLnglat(initPosition.lng, initPosition.lat); } else { // 默认显示全国中心 this.center = [104.937478, 35.439575]; } // 延迟确保地图渲染完成 setTimeout(() => { if (this.mapInstance) { this.mapInstance.resize(); } }, 200); }, /** * 确认选择位置 */ handleConfirm() { this.$emit('confirm', { lng: this.selectedPosition.lng, lat: this.selectedPosition.lat, address: this.selectedPosition.address }); this.dialogVisible = false; } }, beforeDestroy() { // 清理地图实例和标记 if (this.markerInstance) { this.mapInstance.remove(this.markerInstance); } if (this.mapInstance) { this.mapInstance.destroy(); } } } </script> <style lang="scss" scoped> .amap-demo { height: 600px; width: 100%; } .position-info { padding: 12px 15px; background-color: #f5f7fa; border-radius: 4px; margin-top: 10px; span { font-size: 14px; color: #606266; line-height: 1.5; } } .dialog-footer { text-align: right; } </style>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

网站建设多少钱荆门网站建设

AutoHotkey键盘响应性能优化全攻略【免费下载链接】AutoHotkey项目地址: https://gitcode.com/gh_mirrors/autohotke/AutoHotkey性能瓶颈

2026/06/30 12:35:02

网站建设与管理门户网站建设方案

Docker镜像源网易云配置方法简化GLM-4.6V-Flash-WEB部署在AI模型日益复杂、部署需求愈发频繁的今天,一个看似微不足道的网络问题,往往能卡住整个开发流程。

2026/06/30 13:00:34

网站建设心得大良网站建设

从人到人机再到人机环境的发展历程,本质上是人类认知与智能系统从感性主导向理性主导,再向感性与理性深度融合的演进过程,即情理分离到通情达理的过程。这一过程不仅重

2026/06/30 14:06:39

东阳网站建设咸宁网站建设

32位打印驱动宿主的稳定性突围:从WDM到UMDF的实战进阶在今天的企业IT环境中,你是否曾遇到过这样的场景?一台运行着老旧财务系统的Windows 10 x

2026/06/30 13:33:36

滁州网站建设潜江网站建设

YourTTS完整教程:从零开始构建个性化语音助手【免费下载链接】YourTTS项目地址: https://gitcode.com/gh_mirrors/yo/YourTTSYourTT

2026/06/30 13:28:06

网站建设策划方案网站建设报价

法律条文解释助手:梳理复杂法规之间的引用网络在法律实务中,一个看似简单的条款适用问题,往往牵扯出一张错综复杂的引用网络。比如,“初次违法能否免罚

2026/06/30 14:11:09

无锡网站建设海南网站建设

第一章:Open-AutoGLM本地部署数据安全总览在企业级AI应用中,Open-AutoGLM的本地化部署已成为保障敏感数据不出域的核心方案。通过将模型运行环境完全置于内

2026/06/30 13:15:05

昆明网站建设兰州网站建设

Vivado仿真中信号延迟处理的实战指南:从原理到避坑在FPGA设计的世界里,功能正确只是第一步。真正考验工程师功力的地方,在于时序是否稳健、延迟是否可控。你

2026/06/30 11:13:54

海口网站建设忻州网站建设

GKD订阅管理工具完全指南:从零开始打造专属订阅库【免费下载链接】GKD_THS_ListGKD第三方订阅收录名单项目地址: https://gitcode.com/gh_mirrors

2026/06/30 13:19:05

东阳网站建设网站的建设

从零构建智能家居:ESP32与MQTT的实战交响曲你有没有过这样的经历?晚上回家前想提前打开空调,却发现App卡在“正在连接”;或者半夜起床&#

2026/06/30 12:53:04