高德地图API-鼠标点击地图获取经纬度坐标(关键操作)

效果图:

 

 有了经纬度坐标,就可以得到城市的:adcode区域编码

 html版本

<!doctype html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"><title>根据ip定位</title><link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/> <style type="text/css">html,body,#container{height:100%;}</style>
</head>
<body><div id="container"></div><div class="info" id="text">请用鼠标在地图上操作试试</div><div class="input-card" style="width:16rem"><h4>地图点击相关事件</h4><div><div class="input-item"><button id="clickOn" class="btn" style="margin-right:1rem;">绑定事件</button><button id="clickOff" class="btn">解绑事件</button></div></div></div><script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=填入高德Web端key&plugin=AMap.CitySearch"></script>
<script type="text/javascript">
var map;
var marker;
var ilon = 114.468668;
var ilat = 38.03703;var map = new AMap.Map("container", {zoom: 13,});// 实例化点标记
marker = new AMap.Marker({icon: "https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",position: [ilon, ilat],offset: new AMap.Pixel(-25, -60)});
map.setZoomAndCenter(13, [ilon, ilat]);
map.add(marker)function showInfoDbClick(e){var text = '您在 [ '+e.lnglat.getLng()+','+e.lnglat.getLat()+' ] 的位置双击了地图!'document.querySelector("#text").innerText = text;
}
function showInfoMove(){var text = '您移动了您的鼠标!'document.querySelector("#text").innerText = text;
}
// 事件绑定
function clickOn(){console.log('绑定成功')  map.on('click', function (e) {map.clearMap();//console.log(e.lnglat);marker = new AMap.Marker({icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',position: [e.lnglat.lng, e.lnglat.lat],offset: new AMap.Pixel(-25, -60)});var text = '您在 [ '+e.lnglat.getLng()+','+e.lnglat.getLat()+' ] 的位置单击了地图!'document.querySelector("#text").innerText = text;console.log(text)map.add(marker);})map.on('dblclick', showInfoDbClick);map.on('mousemove', showInfoMove);}
// 解绑事件
function clickOff(){log.success("解除事件绑定!"); map.off('click', showInfoClick);map.off('dblclick', showInfoDbClick);map.off('mousemove', showInfoMove);
}// 给按钮绑定事件
document.getElementById("clickOn").onclick = clickOn;</script>
</body>
</html>

转化为vue版本:

使用的是web服务API

map.vue

<template>
  <view class="container">
    <view id="map-container" class="map-container"></view>
    <view class="info" id="text">请用鼠标在地图上操作试试</view>
    
    <view class="input-card" style="width:16rem">
   <!--   <text class="title">地图点击相关事件</text> -->
                <view class="showweatherdata" id="weatherdata">
                  <text class="province">省份</text>
                  <text class="city">城市</text>
                  <text class="weather">天气</text>
                  <text class="temperature">气温</text>
                  <text class="winddirection">风向</text>
                  <text class="windpower">风力级别</text>
                  <text class="humidity">空气湿度</text>
                  <text class="reporttime">数据发布时间</text>
                </view>
      
    </view>
    
  </view>
</template>

<script>
export default {
  data() {
    return {
      map: null,
      marker: null,
      ilon: 114.468668,
      ilat: 38.03703,
      weather: {
            province: '',    
            city: '',    
            weather: '',
            temperature: '',
            winddirection: '',
            windpower: '',
            humidity: '',
            reporttime: '',
          }    ,
          
    };
  },
  mounted() {
    this.initMap();
    
  },
  methods: {
    initMap() {
      // 创建AMap实例
      this.map = new AMap.Map("map-container", {
        zoom: 13
      });

      // 创建点标记
      this.marker = new AMap.Marker({
        icon: "https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
        position: [this.ilon, this.ilat],
        offset: new AMap.Pixel(-25, -60)
      });

      // 设置地图中心和缩放级别
      this.map.setZoomAndCenter(13, [this.ilon, this.ilat]);

      // 在地图上添加点标记
      this.map.add(this.marker);

      // 绑定地图事件
      this.map.on("click", this.handleMapClick);
      this.map.on("dblclick", this.handleMapDblClick);
      this.map.on("mousemove", this.handleMapMove);
    },
    handleMapClick(e) {
         console.log('执行了');
      // 处理地图单击事件
      this.map.clearMap();
      this.marker = new AMap.Marker({
        icon: "https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
        position: [e.lnglat.lng, e.lnglat.lat],
        offset: new AMap.Pixel(-25, -60)
      });

      const text = `您在 [ ${e.lnglat.lng},${e.lnglat.lat} ] 的位置单击了地图!`;
      document.querySelector("#text").innerText = text;
      console.log(text);

      this.map.add(this.marker);
      
      // 发送逆地理编码请求
    const location = `${e.lnglat.lng},${e.lnglat.lat}`;
    console.log('adcode是'+location);
     this.reverseGeocode(location);
    },
    
    reverseGeocode(location) {
          const url = `https://restapi.amap.com/v3/geocode/regeo?output=JSON&location=${location}&key=&radius=1000&extensions=base`;
        uni.request({
            url:url,
            success:(res)=>{
                uni.showToast({
                    title:'请求成功',
                    icon:'success'
                });
            const result = res.data;
            console.log('逆地理编码结果:', result);
            const adcode =result.regeocode.addressComponent.adcode
            console.log('adcode 的值:'+ adcode);
            this.Gaode_Weather(adcode);
            },
            fail:(error)=> {
                console.log('请求失败:',error);
                uni.showToast({
                    title:'请求失败',
                    icon:'none'
                });
            }
        })
          
        },
    Gaode_Weather(adcode){
        const url =`https://restapi.amap.com/v3/weather/weatherInfo?city=${adcode}&key=`;
        uni.request({
            url: url,
            success: (res) => {
              const result = res.data;
              if (result.status === "1" && result.count === "1" && result.info === "OK" && result.infocode === "10000") {
                // 确保返回的数据状态是成功的
                console.log('地区天气数据:', result);
                if (result.lives && Array.isArray(result.lives)) {
                  // 遍历 lives 数组
                  result.lives.forEach((live) => {
                    document.querySelector("#weatherdata .province").innerText = `省份:${live.province}`;
                   document.querySelector("#weatherdata .city").innerText = `城市:${live.city}`;
                   document.querySelector("#weatherdata .weather").innerText = `天气:${live.weather}`;
                   document.querySelector("#weatherdata .temperature").innerText = `气温:${live.temperature}`;
                   document.querySelector("#weatherdata .winddirection").innerText = `风向:${live.winddirection}`;
                   document.querySelector("#weatherdata .windpower").innerText = `风力级别:${live.windpower}`;
                   document.querySelector("#weatherdata .humidity").innerText = `空气湿度:${live.humidity}`;
                   document.querySelector("#weatherdata .reporttime").innerText = `数据发布时间:${live.reporttime}`;
                      
                    console.log('天气详情:', live);
                  });
                }
              } else {
                console.error('天气数据请求失败:', result);
              }
            },
            fail: (err) => {
              console.error('请求天气数据失败:', err);
            }
          });
    },    
    handleMapDblClick(e) {
      // 处理地图双击事件
      const text = `您在 [ ${e.lnglat.lng},${e.lnglat.lat} ] 的位置双击了地图!`;
      document.querySelector("#text").innerText = text;
    },
    handleMapMove() {
      // 处理地图鼠标移动事件
      const text = "您移动了您的鼠标!";
      document.querySelector("#text").innerText = text;
    },
    bindEvent() {
      // 绑定地图事件
      this.map.on("click", this.handleMapClick);
      this.map.on("dblclick", this.handleMapDblClick);
      this.map.on("mousemove", this.handleMapMove);
    },
    unbindEvent() {
      // 解绑地图事件
      this.map.off("click", this.handleMapClick);
      this.map.off("dblclick", this.handleMapDblClick);
      this.map.off("mousemove", this.handleMapMove);
    }
  }
};
</script>

<style scoped>

/* 卡片容器样式 */
.showweatherdata {
  display: grid;
  grid-template-columns: repeat(2, 1fr); /* 4列 */
  grid-gap: 10px; /* 网格间距 */
  padding: 20px; /* 内边距 */
  border-radius: 10px; /* 圆角 */
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* 轻微的阴影,模拟卡片效果 */
  margin: 20px; /* 外边距 */
}

/* 文本样式 */
.showweatherdata text {
  font-size: 16px; /* 字体大小 */
  color: #333; /* 字体颜色 */
  line-height: 1.5; /* 行高 */
  margin-bottom: 5px; /* 下边距 */
}

/* 每行的最后一个元素不显示下边距 */
.showweatherdata text:last-child {
  margin-bottom: 0;
}

/* 为每一行添加额外的间距,实现 2 行布局 */
.showweatherdata text:nth-child(-n+8) {
  margin-bottom: 20px; /* 行间距 */
}

/* 绿色调主题颜色 */
.showweatherdata .province,
.showweatherdata .city,
.showweatherdata .weather,
.showweatherdata .temperature,
.showweatherdata .winddirection,
.showweatherdata .windpower,
.showweatherdata .humidity,
.showweatherdata .reporttime {
  color: #2e7d32; /* 主题绿色 */
  border-left: 4px solid #43a047; /* 边框颜色 */
  padding-left: 10px; /* 内边距 */
}

/* 媒体查询,适应小屏幕设备 */
@media (max-width: 768px) {
  .showweatherdata {
    grid-template-columns: repeat(2, 1fr); /* 在小屏幕上改为 2 列 */
  }
}

    
.container {
  position: relative;
  height: 100vh;
  display: flex;
  flex-direction: column;
}

#map-container {
  flex: 1;
}

.info {
  padding: 10px;
  text-align: center;
  background-color: #f0f0f0;
}

.input-card {
  padding: 10px;
  margin-top: 10px;
  background-color: #f9f9f9;
  border-radius: 5px;
}

.title {
  font-size: 16px;
  font-weight: bold;
}

.btn {
  padding: 5px 10px;
  background-color: #409eff;
  color: #fff;
  border: none;
  border-radius: 3px;
  cursor: pointer;
}
</style>

main.js

这个的web端key是

 

import App from './App'
import uView from "@/uni_modules/uview-ui"
import AMapLoader from '@amap/amap-jsapi-loader'

Vue.use(uView)

AMapLoader.load({
  "key": "",
  "version": "2.0"
}).then(() => {
  new Vue({
    render: h => h(App)
  }).$mount('#app')
})
// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
    ...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
}
// #endif

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

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

相关文章

Unity类银河恶魔城学习记录13-1 p142 Save system源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili FileDataHandler.cs using System; using System.IO; using UnityEngine; p…

数据结构学习记录

数据结构 数组 & 链表 相连性 | 指向性 数组可以迅速定位到数组中某一个节点的位置 链表则需要通过前一个元素指向下一个元素&#xff0c;需要前后依赖顺序查找&#xff0c;效率较低 实现链表 // head > node1 > node2 > ... > nullclass Node {constructo…

基于springboot+vue+Mysql的社区维修平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

软件产品许可证书 Licence 全流程研发(使用非对称加密技术,既安全又简单)

本篇博客对应的代码地址&#xff1a; Gitee 仓库地址&#xff1a;https://gitee.com/biandanLoveyou/licence 源代码百度网盘链接: https://pan.baidu.com/s/1_ZhdcENcrk2ZuL11hWDLTQ?pwdbmxi 提取码: bmxi 1、背景介绍 公司是做软件 SAAS 服务的&#xff0c;一般来说软件部…

RabbitMQ项目实战(一)

文章目录 RabbitMQ项目实战选择客户端基础实战 前情提要&#xff1a;我们了解了消息队列&#xff0c;RabbitMQ的入门&#xff0c;交换机&#xff0c;以及核心特性等知识&#xff0c;现在终于来到了激动人心的项目实战环节&#xff01;本小节主要介绍通过Spring Boot RabbitMQ S…

2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(三)

13 测试方案和测量结果 测量一个边长为1米的正方形&#xff0c;取三个顶点分别作为O、A、B点。 在O点上方&#xff0c;用细线悬挂激光笔&#xff0c;激光笔常亮向下指示&#xff0c;静止时激光笔的光点和O点重合。 将两个D8M摄像头子卡插到DE10-Nano开发板上&#xff0c;放…

MySQL Linux环境安装部署

目录 1、mysql安装包下载 2、安装mysql服务 3、启动mysql服务 4、登录mysql服务 1、mysql安装包下载 1、查看centos的版本 cat /etc/redhat-release 2、进入官网地址下载对应系统版本的安装包 地址&#xff1a;MySQL :: Download MySQL Yum Repository 2、安装mysql服务 …

恒峰智慧科技-森林消防便捷泵:轻松应对火灾危机!

在广袤无垠的森林中&#xff0c;绿色是生命的象征&#xff0c;是自然的馈赠。然而&#xff0c;当火魔无情地吞噬这片生命的绿洲时&#xff0c;我们需要一种快速、高效、可靠的消防工具来守护这片绿色。此时&#xff0c;森林消防便捷泵应运而生&#xff0c;成为了守护森林安全的…

Oracle数据库 :查询表结构脚本

查询脚本 &#xff1a; SELECT CASE WHEN a.column_id1 THEN a.TABLE_NAME ELSE END AS 表名, a.column_id AS 序号, a.column_name as 列名, REPLACE(comments, CHR(10), ) as 列说明, a.data_type || ( || a.data_length || ) as 数据类型, a.DATA_LENGTH AS 长度, a.DATA_…

idea中停止运行Vue

在里面敲入Ctrlc 输入y确定即可。

【微服务-Ribbon】什么是负载均衡?微服务中负载均衡有哪些策略呢?

前面几篇文章&#xff0c;我们了解了一下Nacos的单机部署、集群部署以及微服务接入Nacos的步骤。从本篇开始&#xff0c;我们来看一下微服务第二个通用组件-负载均衡&#xff08;Ribbon&#xff09;。 1、Ribbon负载均衡器 负载均衡顾名思义&#xff0c;是指通过软件或者硬件…

电能质量分析仪是什么

TH-6500电能质量分析仪是一种用于记录和分析现场电能质量参数的设备。它能够检测并记录电力系统的电压波动、频率偏差、谐波、三相不平衡等参数&#xff0c;帮助用户了解电力系统的运行状态&#xff0c;及时发现并解决潜在的电能质量问题。 该设备具备多种测量功能&#xff0c…

嵌入式工程师有哪些必备技能,和电子爱好者有很大区别!

要掌握的技能实际上是非常多的。在这里&#xff0c;我来结合自己亲身经历&#xff0c;从技术、思维、项目管理等方面来谈一下我认为嵌入式开发需要掌握的技能。 技术方面 C语言和汇编语言能力 C语言是嵌入式开发最核心的编程语言。在我的初学阶段&#xff0c;我花费了很多时间…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(4)——架构分析 - 核心操作提示词构造

4.4.4.核心操作与提示词构造 &#xff08;1&#xff09;感知 0.根据vision_r参数&#xff0c;获取NPC周边(2*vision_r 1) **2个tile 1.将这些空间信息存储在NPC的空间记忆字典树 2.基于0的范围&#xff0c;获取当前NPC所在arena的所有事件&#xff0c;计算事件源距离NPC的…

我用AI帮我画刘亦菲写真,绘画写真某一天是否可以取代照相馆?

我用AI帮我画刘亦菲写真&#xff0c;绘画写真某一天是否可以取代照相馆&#xff1f; 最近我试了用FaceChain人物写真生成来测试帮我绘图&#xff0c;为了不翻车&#xff0c;我在网上随便找了刘亦菲的日常照片10多张左右作为训练原图。 真随便找的 生成效果有多种选择 下面…

【问题处理】银河麒麟操作系统实例分享,服务器操作系统VNC远程问题分析

1.服务器环境以及配置 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 0518-server 2.问题现象描述 服务器通过vncserver:1.service服务启动的vnc服务后&#xff0c;普通用户用vnc连接时&#xff0c;锁屏后&#xff0c;然后输入登陆密码会报密码错误&…

备考2024年小学生古诗文大会:吃透历年真题和知识点(持续讲题)

对上海小学生的小升初和各种评优争章来说&#xff0c;语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛&#xff0c;小学生古诗文大会和汉字小达人通常是必不可少的&#xff0c;因为这两个针对性强&#xff0c;而且具有很强的上海本地特色。 根据往…

【nnUNetv2进阶】六、nnUNetv2 魔改网络-小试牛刀-加入注意力机制CBAM

nnUNet是一个自适应的深度学习框架&#xff0c;专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点&#xff1a; 自适应框架&#xff1a;nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等&#xff0c;从而避免了繁琐的手工调参过程。 自动化流程&a…

Shopee虾皮批量上传全球产品指南

当shopee虾皮需要大量上架新产品时&#xff0c;批量工具可以更好的提升效率。通过本指南&#xff0c;你将了解如何批量上传全球商品&#xff0c;本指南适用于所有站点。 一、什么是批量上传&#xff1f; 您可以通过【中国卖家中心>>全球商品>>批量上传】功能&…

一文教您理解Playwright是如何实现动态等待的

使用过Playwright的同学都会有这样的感受&#xff0c;Playwright对UI页面中元素的识别非常稳定&#xff0c;这离不开其强大的动态等待机制&#xff01;简单的解释就是&#xff0c;Playwright在对UI页面中的任何元素操作之前&#xff0c;都需要做出一些列的校验工作来确保能够稳…