vue高德地图的实现 根据经纬度回显地理位

2023-11-12

效果图:

1.首先,下载vue-amap 插件

2.在main.js中引入:

import VueAMap from 'vue-amap'
Vue.use(VueAMap);
VueAMap.initAMapApiLoader({
  key: '你自己的key!!!',
  plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor','AMap.Geocoder','AMap.Geolocation','AMap.MarkerClusterer'],
  // 默认高德 sdk 版本为 1.4.4
  v: '1.4.4'
});

3.在index.html中引入:

<script type="text/javascript" src="https://webapi.amap.com/maps?key=你自己的key!!!&v=1.4.4&plugin=AMap.Geolocation,AMap.Autocomplete,AMap.PlaceSearch,AMap.Scale,AMap.OverView,AMap.ToolBar,AMap.MapType,AMap.PolyEditor,AMap.Geocoder,AMap.CircleEditor"></script> 

代码:

<template>
  <div class="amap-page-container" style="width: 600px; height:300px;margin:30px 10%;">
    <el-amap-search-box
      class="search-box"
      :search-option="searchOption"
      :on-search-result="onSearchResult"
    ></el-amap-search-box>
    <el-amap
      ref="map"
      :vid="workId"
      :amap-manager="amapManager"
      :center="center"
      :zoom="zoom"
      :plugin="plugin"
      :events="events"
      class="amap-demo"
    >
    </el-amap>
    <!-- <p>{{ address }}</p>
    <p>{{ center }}</p> -->
    <div class="footer">
      <Input class="lineinput" v-model.number="lng" disabled></Input>
      <Input class="lineinput" v-model.number="lat" disabled></Input>
      <Input class="lineinput" v-model="address" disabled></Input>
    </div>
    <div class="drawer-footer">
      <Button type="text" @click="cancel">{{ $t("cancel") }}</Button>
      <Button type="primary" @click="findlocation">{{
        $t("sure")
      }}</Button>
    </div>
  </div>
</template>
<script>
import { AMapManager } from "vue-amap";
let amapManager = new AMapManager();
export default {
  props:{
    workId:String
  },
  data() {
    const self = this;
    return {
      locData: {
        longitude: "",
        latitude: "",
        address: "",
        province:"",
        city:"",
        district:""
      },
      searchOption: {
        city: "",//搜索范围 
        citylimit: false, //限制搜索范围
       //city: "", citylimit: false, // 不限制搜索范围搜索,比如想全国搜索				
      },
      lng: "",
      lat: "",
      address: "",
      province:"",
      city:"",
      district:"",
      marker: "",
      amapManager,
      zoom: 12,
      center: [121.59996, 31.197646],
      amapamapDemo:'amapamapDemo',
      events: {
        init: (o) => {
          o.getCity((result) => {
           // console.log(result);
           // this.searchOption.city=result.city            
          });
        },
        moveend: () => {},
        zoomchange: () => {},
        click: (e) => {
          //   console.log(e.lnglat);
          self.lng = e.lnglat.lng;
          self.lat = e.lnglat.lat;
          self.center = [self.lng, self.lat];
          //   console.log(e.lnglat, 1999);

          let o = amapManager.getMap();
          if (!self.marker) {
            self.marker = new AMap.Marker({
              position: e.lnglat,
            });
            self.marker.setMap(o);
          }
          self.marker.setPosition(e.lnglat);
          let geocoder = new AMap.Geocoder({});

          geocoder.getAddress(e.lnglat, function (status, result) {
            if (status === "complete" && result.regeocode) {
              self.address = result.regeocode.formattedAddress;
              self.province=result.regeocode.addressComponent.province
              self.city=result.regeocode.addressComponent.city
              self.district=result.regeocode.addressComponent.district
              if(self.city==""){
                self.city=self.province
              }
              console.log('self',self.province,self.city,self.district);
            //   console.log(self.address, "999地址");
            } else {
              log.error("根据经纬度查询地址失败");
            }
          });
        },
      },
      plugin: [
        "ToolBar",
        {
          pName: "MapType",
          defaultType: 0,
          events: {
            init(o) {
            //   console.log(o);
            },
          },
        },
      ],
      plugin: [
        {
          pName: "Geolocation",
          events: {
            init(o) {
              // o 是高德地图定位插件实例
              o.getCurrentPosition((status, result) => {
                // console.log(JSON.stringify(result));
                if (result && result.position) {
                  self.lng = result.position.lng;
                  self.lat = result.position.lat;
                  self.address = result.formattedAddress;
                  self.center = [self.lng, self.lat];
                  //   console.log(self.center, 99666);
                  let o = amapManager.getMap();
                  if (!self.marker) {
                    self.marker = new AMap.Marker({
                      position: self.center,
                    });
                    self.marker.setMap(o);
                  }
                  self.marker.setPosition(self.center);
                }
              });
            },
          },
        },
      ],
    };
  },
  methods: {
    onSearchResult(pois) {
      console.log('pois',pois);
      if (pois.length > 0) {
        let { lng, lat, name ,location} = pois[0];
        this.searchName=pois[0].name
        let center = [lng, lat];
        this.lng = lng;
        this.lat = lat;
        this.center = [lng, lat];  
        let o = amapManager.getMap();
        if (!this.marker) {
          this.marker = new AMap.Marker({
            position: center,
          });
          this.marker.setMap(o);
        }
        this.marker.setPosition(center);
       // 近来补充  根据经纬度查询地址
        let geocoder = new AMap.Geocoder({});
		let that = this
		geocoder.getAddress(location, function(status, result) {
		console.log(status, result)
	   if (status === "complete" && result.regeocode) {
		 that.address = result.regeocode.formattedAddress;
     that.province=result.regeocode.addressComponent.province
     that.city=result.regeocode.addressComponent.city
     that.district=result.regeocode.addressComponent.district
     if(that.city==""){
      that.city=that.province
     }
      console.log('that',that.province,that.city,that.district);
		} else {
		console.log("根据经纬度查询地址失败");
		}
	   });
      }
    },
     //取消
    cancel() {
      this.lng = "";
      this.lat = "";
      this.address = "";
      this.searchOption.city=""
      // map.clearOverlays();
    },
    findlocation() {
      // console.log('this.lng,this.lat,this.address',this.lng,this.lat,this.address);
      this.locData.longitude=this.lng
      this.locData.latitude=this.lat
      this.locData.address=this.address
      this.locData.province=this.province
      this.locData.city=this.city
      this.locData.district=this.district
      this.$emit("findlocdata", this.locData);
      this.lng = "";
      this.lat = "";
      this.address = "";
      this.searchOption.city=""
      // map.clearOverlays();
    },


  },
};
</script>
<style scoped lang="less">
.search-box {
  position: absolute;
  top: 25px;
  left: 20px;
}
.amap-page-container {
  position: relative;
  /* margin-bottom: 20px; */
}
.footer {
  margin-top: 10px;
  text-align: center;
  width: 600px;
}
.drawer-footer {
  margin-top: 10px;
  text-align: right;
  position: relative;
  border: 0;
}
.lineinput ivu-input-wrapper ivu-input-wrapper-default ivu-input-type-text ivu-input-wrapper-disabled{
  width: 100%!important;
}
/deep/.amap-copyright {
    display: none !important;
}
/deep/.amap-logo {
    display: none!important;
}
</style>

 根据经纬度回显坐标:

<template>
 <div class="myIndexWrap">
  <!-- 根据地址信息显示地图位置 -->
  <div class="addrMapWrapper">
   <div class="addrWrapper">
    <!-- <estimated-info class="showMapBox" :center="displayData" :labelInfo="preMessage"/> -->
    <!-- <estimated-info class="showMapBox"/> -->
    <div class="showMapWrapper">
    <el-amap
    vid="maprun"
    :zoom="zoom"
    :plugin="plugin"
    :events="events"
    :center="center"
    >
    <el-amap-marker vid="marker" :position="center">
    </el-amap-marker>
  </el-amap>
 </div>
   </div>
  </div>
 </div>
</template>
<script>
export default {
  props: {
    center:Array,
  },
 components: {
//   estimatedInfo
 },
 data() {
  return {
    isResue:true,
    geocoder: '',
   //插件集合
   plugin: [
    // 工具条
    {
     pName: "ToolBar",
     positon: "LB"
    },
   ],
   events: {
    
   },
   zoom: 18,
   loaded: false,
   markers:[ ],
  };
 },
 methods:{
     init(map) {
     // 这里通过高德 SDK 完成。
     this.geocoder = new AMap.Geocoder({
      radius: 1000,
      extensions: "all",
      city: "全国"
     });
    },

 },
 computed:{
   
 },
 mounted(){
    this.getMapList()
    this.init()
     
 },
  activated(){
  },
watch: {
 
};
</script>
<style scoped lang="less">
.myIndexWrap {
//  width: 900px;
//  min-width: 1000px;
 height: auto;
 display: flex;
 flex-flow: column;
//  h3 {
//   padding-left: 50px;
//  }
 // 地图标记
 .addrMapWrapper {
  .addrWrapper{
   margin-left: 100px;
  }
 }
}
/deep/.amap-copyright {
    display: none !important;
}
/deep/.amap-logo {
    display: none!important;
}
.showMapWrapper {
 width: 900px;
 height: 400px;
//  border: 1px solid #999;
}
/deep/.amap-copyright {
    display: none !important;
}
/deep/.amap-logo {
    display: none!important;
}
/deep/.amap-marker-label {
    // position: absolute;
    z-index: 2;
    background-color: white;
    white-space: nowrap;
    cursor: default;
    padding: 3px;
    font-size: 12px;
    line-height: 14px;
    border: 0;
}
</style>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue高德地图的实现 根据经纬度回显地理位 的相关文章

  • Angular UI 模式的范围问题

    我无法理解 使用角度 UI 模式的范围 虽然这里不是很明显 但我已经正确设置了模块和所有内容 据我所知 但这些代码示例尤其是我发现错误的地方 index html 其中重要部分 div class btn group div
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 如何在没有 jQuery 的情况下删除 Javascript 中的元素

    我试图通过以下方式从 DOM 中删除 Div a 标签嵌套在其中 我想我正在寻找的是 jQuery 的纯 Javascript 版本 div remove 这是html设置 div a href Click me to remove the
  • VueJS 中数据无法正确显示

    我的 VueJS 代码有一个小问题 在 输出 压缩的 GS1 数字链接 URI 部分中 When there is no result it should have nothing display like this I have remo
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 如何使用 Playwright 使用选择器查找框架 (iframe)

    我有一个小问题 无法找到使用 Microsoft Playwright 框架的答案 根据您可以使用以下代码获取 iframe const frame page frame frame login 但是如何使用选择器来查找 iframe 并与
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • 【GRU回归预测】基于麻雀算法优化门控循环单元SSA-GRU神经网络实现多输入单输出回归预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 信号处理 图像
  • CSS之Sass中的@mixin和@extend,使用详细(Sass中@mixin和@extend的区别)

    简介 mixin 该指令用于定义可重用的代码块 可以在需要的地方进行调用 通过 mixin指令 你可以将一组样式代码封装成一个mixin 并在需要的地方使用 include指令来调用这个mixin 这样可以避免重复编写相同的样式代码 提高代
  • 模拟退火算法 Simulated Annealing(SA)学习笔记

    1 模拟退火算法思想 所谓模拟退火就是模仿物质退火过程 物体温度高时分子运动剧烈 此时我们的算法接受新解的概率拉高 物体温度逐渐趋向平和时 此时我们算法接受新解更新的概率降低 首先物体刚开始处于非晶体状态 左图 我们将固体加温至充分高 固体
  • sync/atomic 库使用小结

    sync atomic 库提供了原子操作的支持 原子操作直接有底层CPU硬件支持 因而一般要比基于操作系统API的锁方式效率高些 本文对 sync atomic 中的基本操作进行一个简单的介绍 原子增值 用于对变量值进行原子增操作 并返回增
  • 聊天机器人和 Rasa 2.0 的新增功能

    目录 聊天机器人和 Rasa 2 0 的新增功能 文件夹和文件层次结构 配置 config yml Pipeline Policies Importers Domain domain yml Training Data Format NLU
  • 码点与代码单元

    码点与代码单元 码点 码点是指与一个编码表中的某个字符对应的代码值 在Unicode标准中 码点采用16进制书写 并加上U 例如U 0041就是拉丁字母A的码点 代码单元 UTF 16编码采用不同长度的编码表示所有Unicode码点 在基本
  • “12306”是如何支撑百万QPS的?

    12306抢票 极限并发带来的思考 每到节假日期间 一二线城市返乡 外出游玩的人们几乎都面临着一个问题 抢火车票 虽然现在大多数情况下都能订到票 但是放票瞬间即无票的场景 相信大家都深有体会 尤其是春节期间 大家不仅使用12306 还会考虑
  • Linux中的五种I/O模型

    概念说明 用户空间和内核空间 现在操作系统都是采用虚拟存储器 那么对32位操作系统而言 它的寻址空间 虚拟存储空间 为4G 2的32次方 操作系统的核心是内核 独立于普通的应用程序 可以访问受保护的内存空间 也有访问底层硬件设备的所有权限
  • OpenCV中对Mat矩阵加、减、乘、除、转置等操作的总结

    1 矩阵加 1 使用重载的 运算符 矩阵的加法是指两个矩阵对于位置的数值相加 使用OpenCv重载的 运算符 假设两个矩阵都为uchar类型 例如 Mat src1 Mat
  • 1.3 DLT645

    一 简介 目前市面的大部分的电表 通信都是遵循该协议 因为物理层使用RS 485 故为半双工通信 主站指终端设备 从站指多功能电能表 数据链路层 默认波特率2400 偶校验 8bit数据 1bit停止位 先传低位 后传高位 D0是字节最低有
  • uiautomator2学习5——一个简单的例子

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 uiautomator2学习5 一个简单的例子 写了个简单的例子 就是打开淘宝搜索钥匙扣的一个简单的代码 如下 import uiautomator2 as u2 d u2
  • Spring框架中IOC容器和Bean的配置

    一 IOC和DI的解释 1 IOC Inversion of Control 反转控制 在应用程序中的组件需要获取资源时 传统的方式是组件主动的从容器中获取所需要的资源 在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式 增加
  • Java基础——Map集合遍历方式

    1 方式一 键找值 先获取Map集合的全部键的Set集合 遍历键的Set集合 然后通过键提取对应值 涉及API 方法名称 说明 Set
  • 【导入file文件转数组】input -> type=‘file‘ -> list

    组件 admin文件 引用xlsx js import HandleImportFile from common xlsx js
  • 读书笔记_《Linux高性能服务器编程》_第 5 章:网络编程基础API

    第 5 章 Linux网络编程基础API 知识要点 socket 地址 API socket 基础 API 网络信息 API 1 socket 地址API 主机字节序和网络字节序 CPU 32位 的累加器一次至少可以装载 4 字节 即一个整
  • C# 常用复习

    Char类型 char a a char b 8 char c L char d char e l char f IsLetter 判断是否是字母 Console WriteLine 判断a是否是字母 Char IsLetter a IsD
  • getaddrinfo简单应用——取得IP地址

    转自 http biancheng dnbcw info linux 265956 html 一个域名可能对应好几个ip地址 a out www baidu com 115 239 210 27 115 239 211 112 getadd
  • 深度学习: Epoch、batchsize、iterations 是什么?

    Epoch 英文 时代 阶段 一波 一轮 一个epoch 表示 所有的数据送入网络中 完成了一次前向计算 反向传播的过程 由于一个epoch 常常太大 分成 几个小的 baches 将所有数据迭代训练一次是不够的 需要反复多次才能拟合 收敛
  • String数组中扩容与填加元素

    String deepCode1 350000 350100 350102 String split deepCode1 split System out println String数组原来的长度为 split length 追加扩容 w
  • vue高德地图的实现 根据经纬度回显地理位

    效果图 1 首先 下载vue amap 插件 2 在main js中引入 import VueAMap from vue amap Vue use VueAMap VueAMap initAMapApiLoader key 你自己的key