百度GL地图实现选点获取经纬度并且地址逆解析

 

index.html引入

    <script src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=你的ak"></script>

 组件使用

            <el-input:disabled="['详情'].includes(title)"v-model="formData.site"placeholder=""><template slot="append"><el-buttontype="primary"icon="iconfont if-ditudingwei":disabled="['详情'].includes(title)"style="color: #1492ff"@click="choosePosition">选择</el-button></template></el-input><positionDialog @on-response="getPosition" ref="positionDialog" />import positionDialog from "@/components/Map/positionDialog/positionDialog.vue";components: {positionDialog},getPosition(e) {console.log(e);this.$set(this.formData, "longitude", e.lng);this.$set(this.formData, "latitude", e.lat);},choosePosition() {let passData = {data: JSON.parse(JSON.stringify({lng: this.formData.longitude,lat: this.formData.latitude,})),type: "地图选点",};this.$refs.positionDialog.showDialog(passData);},

positionDialog组件封装

<template><el-dialogwidth="1000px"v-dialog-drag:title="title":visible.sync="dialogVisible":before-close="hideDialog"append-to-body><div class="wrap-box"><!-- 搜索显示框 --><el-form v-if="!hasNoSearch" class="formWrap" label-width="90px"><el-col :span="12"><el-form-itemlabel="搜索 : "prop="keyword"style="position: relative"><el-input id="search" v-model="keyword" @input="searchPositionList"></el-input><div class="wrap-search" v-if="searchList.length > 0"><divclass="wrap-search-item"v-for="(item, index) in searchList":key="index"@click="selectAddress(item)"><div style="width: 80%">{{ item }}</div><div style="width: 20%; text-align: right"><i class="iconfont if-biaodancaozuo-fabu"></i></div></div></div></el-form-item><!-- <label>搜索:<el-input v-model="keyword"><el-buttonslot="append"icon="el-icon-search"></el-button></el-input></label> --></el-col><el-col :span="6"><el-form-item label="经度: " prop="lng"><el-input v-model="formData.lng"></el-input></el-form-item><!-- <label>经度:<el-input v-model="formData.lng" /></label> --></el-col><el-col :span="6"><el-form-item label="纬度: " prop="lat"><el-input v-model="formData.lat" /></el-form-item></el-col></el-form><!-- 地图盒子 --><div id="allmap"></div></div><span slot="footer" class="dialog-footer"><el-button @click="hideDialog">取 消</el-button><el-button type="primary" @click="submitForm">确 定</el-button></span></el-dialog>
</template><script>
export default {name: "positionDialog",components: {},props: {hasNoSearch: {type: Boolean,defalut: false, //是否有搜索框},hasNoChoosePosition: {type: Boolean,defalut: false, //是否可以改变选择的坐标点},},data() {return {dialogVisible: false,title: "",keyword: "",location: "",mapCenter: {lng: 103.653534,lat: 30.998257,},formData: {},mapZoom: 13,map: null,marker: null, //坐标点searchInput: null, //搜索searchList: [],};},methods: {// 选择检索的列表项selectAddress(value) {this.keyword = value;this.getAddress(value);},// 解析地址getAddress(e) {let that = this;let myGeo = new BMapGL.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野myGeo.getPoint(e,function (point) {if (point) {console.log(point);point = {lng: point.lng.toFixed(6),lat: point.lat.toFixed(6),};that.$set(that.formData, "lng", point.lng);that.$set(that.formData, "lat", point.lat);that.map.centerAndZoom(new BMapGL.Point(point.lng, point.lat), 14); //设置中心点that.setMarker(point.lng, point.lat); //设置坐标点that.searchList = [];}},"");},searchPositionList(e) {let that = this;let option = {onSearchComplete: function (results) {// 判断状态是否正确if (local.getStatus() == BMAP_STATUS_SUCCESS) {var list = [];for (var i = 0; i < results.getCurrentNumPois(); i++) {// console.log(results.getPoi(i));list.push(results.getPoi(i).address);}that.searchList = list;}},// pageCapacity: 5,};var local = new BMapGL.LocalSearch(this.map, option);local.search(e);},showDialog(data) {console.log("showDialog", data);this.title = data.type;this.formData = data.data;if (this.formData.lng && this.formData.lat) {this.mapCenter.lng = this.formData.lng;this.mapCenter.lat = this.formData.lat;}this.dialogVisible = true;this.initMap();},setMarker(lng, lat) {if (this.marker) {this.map.removeOverlay(this.marker);this.marker = null;}setTimeout(() => {let point = new BMapGL.Point(lng, lat); //创建点this.marker = new BMapGL.Marker(point); // 创建标注this.map.addOverlay(this.marker);console.log(lng, lat);}, 100);},hideDialog() {console.log("hideDialog");this.formData = {};this.keyword = "";this.dialogVisible = false;},getClickInfo(e) {console.log("地图点击", e);},submitForm() {if (!this.formData.lng || !this.formData.lat) {this.$message.error("请选择位置");} else {this.$emit("on-response", this.formData);this.hideDialog();}},initMap() {let that = this;this.$nextTick(() => {// 按住鼠标右键,修改倾斜角和角度this.map = new BMapGL.Map("allmap"); // 创建Map实例this.map.centerAndZoom(new BMapGL.Point(this.mapCenter.lng, this.mapCenter.lat),12); // 初始化地图,设置中心点坐标和地图级别// this.searchInput = new BMapGL.Autocomplete({//   //建立一个自动完成的对象//   input: "search",//   location: this.map,// });this.setMarker(this.mapCenter.lng, this.mapCenter.lat);this.map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放this.map.setHeading(64.5); //设置高度this.map.setTilt(0); //设置角度var geoc = new BMapGL.Geocoder();if (!this.hasNoChoosePosition) {this.map.addEventListener("click", function (e) {console.log(e);// let pt = {//   lng: e.latlng.lng.toFixed(6),//   lat: e.latlng.lat.toFixed(6),// };let pt = e.latlngthat.$set(that.formData, "lat", pt.lat);that.$set(that.formData, "lng", pt.lng);// that.$set(that.mapCenter, "lat", pt.lat);// that.$set(that.mapCenter, "lng", pt.lng);that.setMarker(pt.lng, pt.lat);geoc.getLocation(pt, function (rs) {console.log(rs, "res")var addComp = rs.addressComponents;that.keyword =addComp.province +addComp.city +addComp.district +addComp.street +addComp.streetNumber;});});}});},},created() {},mounted() {// this.initMap();},
};
</script><style lang="scss" scoped>
::v-deep .el-dialog__body {padding: 10px 0 0 !important;
}
#allmap {height: 500px;width: 100%;overflow: hidden;
}
.wrap-box {position: relative;.formWrap {position: absolute;top: 10px;left: 10px;z-index: 99999;}.wrap-search {position: absolute;z-index: 9999;width: 100%;background-color: #fff;box-shadow: 1px 1px 4px #f0f0f0;max-height: 300px;// width: 250px;overflow-y: auto;&-item {width: 100%;padding: 10px 10px;display: flex;justify-content: space-between;align-items: center;cursor: pointer;&:hover {background-color: #f0f0f0;}}}
}
</style>

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

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

相关文章

vue项目启动npm install和npm run serve时出现错误Failed to resolve loader:node-sass

1.常见问题 问题1&#xff1a;当执行npm run serve时&#xff0c;出现Failed to resolve loader: node-sass&#xff0c;You may need to install it 解决方法&#xff1a; npm install node-sass4.14.1问题2&#xff1a;当执行npm run serve时&#xff0c;出现以下错误 Fa…

【学习】软件测试自动化,是未来的趋势还是当前的必需

在当今快速迭代的软件开发周期中&#xff0c;速度和质量成为了企业生存的关键。随着DevOps实践的普及和持续集成/持续部署&#xff08;CI/CD&#xff09;流程的标准化&#xff0c;软件测试自动化已经从未来的趋势转变为当前的必要性。本文将探讨自动化测试的现状、必要性以及其…

Docker基本管理和虚拟化

一、docker的发展历史 https://www.cnblogs.com/rongba/articles/14782624.htmlhttps://www.cnblogs.com/rongba/articles/14782624.html 二、docker的概述 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行…

JAVASE基础语法(异常、常用类)

一、异常 1.1 什么是异常 异常就是指不正常。是指代码在运行过程中可能发生错误&#xff0c;导致程序无法正常运行。 package com.atguigu.exception;public class TestException {public static void main(String[] args) {int[] arr {1,2,3,4,5};System.out.println(&quo…

iOS - 多线程的安全隐患

文章目录 iOS - 多线程的安全隐患1. 卖票案例2. 多线程安全隐患的解决方案2.1 iOS中的线程同步方案2.2 同步方案的使用2.2.1 OSSpinLock2.2.1.1 使用方法&#xff1a;2.2.1.2 案例 2.2.2 os_unfair_lock2.2.2.1 使用方法&#xff1a;2.2.2.2 案例 2.2.3 pthread_mutex2.2.3.1 使…

OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…

mongodb 安装问题

1. mongodb启动时显示 Illegal instruction (core dumped) mongodb 5.0之后(包括5.0) 开始使用需要使用 AVX 指令集 2.启动时报错 ERROR: child process failed, exited with 1 通过指令 bin/mongod --repair 查看报错信息 根据报错信息进行修改 3. 配置服务器添加节点时…

图像处理之模板匹配(C++)

图像处理之模板匹配&#xff08;C&#xff09; 文章目录 图像处理之模板匹配&#xff08;C&#xff09;前言一、基于灰度的模板匹配1.原理2.代码实现3.结果展示 总结 前言 模板匹配的算法包括基于灰度的匹配、基于特征的匹配、基于组件的匹配、基于相关性的匹配以及局部变形匹…

TDSQL手动调整备份节点或冷备节点

一、背景描述 近期TDSQL数据库备份不稳定&#xff0c;有些set实例的备份任务未自动发起。经排查分析&#xff0c;存在多个set实例容量已经超过TB级别&#xff0c;且冷备节点都是同一台。因此&#xff0c;需要手动将当前备份节点改到其他备节点&#xff0c;开启增量备份&#x…

uniapp app权限说明弹框2024.4.23更新

华为上架被拒绝 用uni-app开发的app&#xff0c;上架华为被拒&#xff0c;问题如下&#xff1a; 您的应用在运行时&#xff0c;未见向用户告知权限申请的目的&#xff0c;向用户索取&#xff08;电话、相机、存储&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。…

李沐57_长短期记忆网络LSTM——自学笔记

LSTM 1.忘记门&#xff1a;将值朝着0减少 2.输入门&#xff1a;决定不是忽略掉输入数据 3.输出门&#xff1a;决定是不是使用隐状态 !pip install --upgrade d2l0.17.5 #d2l需要更新首先加载时光机器数据集。 import torch from torch import nn from d2l import torch a…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 1 - 2节&#xff09; P1《课程介绍》 开场白&#xff0c;HarmonyOS 的一个简介&#xff0c;话不多说&#xff0c;直接看图吧&…