【vue】移动端H5+腾讯地图,实现地图选取坐标点获取位置信息

H5:地图选取坐标点获取位置信息

前言

本篇主要内容是使用腾讯地图+逆地址解析的方式实现地图选取坐标点获取位置信息,未使用腾讯地图的前端选点组件,如需了解更多腾讯地图API,请关注官网文档

准备工作

1、登录/注册腾讯地图放平台,已登录的直接进入控制台
腾讯地图开放平台

2、创建应用,已有应用的可跳过

创建腾讯地图应用
填写腾讯地图应用信息

3、添加key

添加腾讯地图应用Key信息
填写腾讯地图应用Key信息
注意:key是腾讯开发文档免费获取的,如果您配置了域名,后面调取/渲染地图时,出现跨域或者显示不出来的问题,记得把腾讯地图的域名也加入,一般用到的是 map.qq.com、3gimg.qq.com、mapapi.qq.com,根据自己的实际需求来配置即可。

代码片段

以下使用vue

html

<!--引入的vant样式-->
<link rel="stylesheet" href="./css/vant.min.css">

<!--核心HTML代码-->
 <block v-if="mapStatus">
 	<!--地图-->
 	<div id="container" :style="{width: clientW+'px', height: clientH+'px'}"></div>
 	<div class="my-btn" @click="mapStatus = false">
		<p>返回</p>
	</div>	
 </block>
 <block v-else>
 	<!--页面内容-->
 	<div>
		<div class="item-address">
         <p><span>地址:</span>{{address}}</p>
    	</div>
	</div>
	<div @click="openMap">地图选择地址</div>
 </block>





<!--引入的js样式-->
<script src="./js/jquery.min.js"></script>
<script src="./js/vue.min.js"></script>
<script src="./js/vant.min.js"></script>
<script charset="utf-8" src="https://map.qq.com/api/js?v=2.exp&key=替换为你的key"></script>
<script src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js"></script>
<script src="https://mapapi.qq.com/web/mapComponents/geoLocation/v/geolocation.min.js" type="text/javascript"></script>

css


.my-btn {
        width: 2rem;
        height: 2rem;
        position: fixed;
        right: 2%;
        top: 70%;
        transform: translateY(-70%);
        font-size: .6rem;
        background-color: #fff;
        border-radius: 50%;
        display: flex;
        justify-content: center;
        align-items: center;
        color: #fff;
        font-weight: bold;
        box-sizing: border-box;
        padding: 0;
        background-image: linear-gradient(to right top, #0976F1, #228FF9, #2F9EFE);
        z-index: 999;
    }

js

const app = new Vue({
        el: "#app",
        data: {
            clientW: document.documentElement.clientWidth,
            clientH: document.documentElement.clientHeight,
            mapStatus: false,
            address:'',
            lat: 0,
            lng: 0,
            marker: null,
            mapContent: null
        },
        created: function () {
           
        },
        mounted: function () {
           //页面加载完,先获取用户当前位置
           this.getUserLocation();
        },
        methods: {
        	//获取用户当前位置
            getUserLocation() {
                var geolocation = new qq.maps.Geolocation("替换为你的key", "应用名(注意不是key名称)");
                var options = { timeout: 8000 };
                geolocation.getLocation(this.showPosition, this.showErr, options);
            },
            //成功返回的信息,挑取自己所需要的
            showPosition(position) {
                this.lat = position.lat;
                this.lng = position.lng;
                var location = position.lat + ',' + position.lng;
                //这里的判断 解决微信开发者工具和pc端拿不到地址信息的情况
                if (position.addr == '') {
                    this.addressInfo(location);
                } else {
                    this.address = position.addr;
                }
            },
            //定位失败再请求定位
            showErr() {
                this.getUserLocation();
            },
            //初始化地图
            mapInit() {
                // if (this.lat == 0 || this.lng == 0) {
                //     this.getUserLocation();
                // }
                
                //步骤:定义map变量 调用 qq.maps.Map() 构造函数 获取地图显示容器
                //设置地图中心点
                var myLatlng = new qq.maps.LatLng(this.lat, this.lng);
                var myOptions = {
                    zoom: 18,               //设置地图缩放级别
                    center: myLatlng,      //设置中心点样式
                    mapTypeId: qq.maps.MapTypeId.ROADMAP  //设置地图样式详情参见MapType
                }

                var that = this;
                that.$nextTick(function () {

                    //获取dom元素添加地图信息
                    that.mapContent = new qq.maps.Map(document.getElementById("container"),myOptions);

                    //给定位的当前位置添加图片标注
                    that.marker = new qq.maps.Marker({
                        position: myLatlng,
                        map: that.mapContent,
                        draggable: true, //允许鼠标拖动
                        //content: that.address
                    });

					//监听地图点击事件
                    qq.maps.event.addListener(that.mapContent, 'click', function (event) {
						//我这里使用了vant的消息提示组件,您也可以自己写一个
                        vant.Dialog.confirm({
                            message: '确认选择该地点吗?',
                            showConfirmButton: true,
                            showCancelButton: true,
                            cancelButtonText: '取消'
                        }).then(function (res) {
                            if (!that.marker) {
                                that.marker = new qq.maps.Marker({
                                    position: event.latLng,
                                    map: that.mapContent
                                });
                            }
                            that.marker.setPosition(event.latLng);

                            var longitude = event.latLng.getLat();
                            var latitude = event.latLng.getLng();
                            //console.log("经度:" + longitude + "," + "纬度:" + latitude);
                            var location = longitude + ',' + latitude;
                            that.addressInfo(location);
                           
                        }).catch(function () {
                            // //console.log('用户点击了取消');
                        });
                    })
                });
            },
            //逆地址解析
            addressInfo(location) {
                var that = this;
                $.ajax({
                    type: 'GET',
                    url: `https://apis.map.qq.com/ws/geocoder/v1/?location=${location}&output=jsonp&key=替换为你的key`, //注意遵循此格式
                    dataType: 'jsonp', //注意dataType必须为jsonp
                    success: function (res) {
                        //console.log('地址解析信息', res);
                        if (res.message == "query ok" && res.result) {
                            that.address = res.result.address;
                            that.mapStatus = false;
                        } else {
                            that.mapStatus = false;
                            vant.Toast(res.message + '请联系管理员!');
                        }
                    },
                    error: function (error) {
                       vant.Toast('遇到未知错误!请联系管理员');
                    }
                });
            },
            //打开地图
            openMap() {
                this.mapStatus = true;
                this.mapInit();
            },
        }
    });

更多逆地址解析相关内容,请查阅官方文档地址

注意事项

线上调试开发

以上就是H5腾讯地图选取坐标点获取位置信息的全部内容啦,如果能够帮助到您,欢迎点赞👍+关注💗+收藏⭐️啦❗️❗️❗️,希望我们彼此能在前端的道路上继续加油努力!😆😆😆

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue是一个用于构建用户界面的JavaScript框架,可以轻松地创建交互式的单页应用程序。腾讯地图腾讯推出的一款在线地图服务,提供了地图显示、地搜索、路径规划等功能。 在使用Vue构建网页时,我们可以集成腾讯地图实现地图展示的功能。首先,我们需要在Vue项目中引入腾讯地图JavaScript API,并获取开发者密钥。然后,我们可以在Vue组件中使用腾讯地图的相关方法和事件来展示地图。 例如,我们可以在Vue组件的模板中定义一个div容器来显示地图: ``` <template> <div id="map-container"></div> </template> ``` 接下来,在Vue组件的JavaScript部分,我们可以使用腾讯地图的API来初始化地图,并设置地图的中心和缩放级别: ``` <script> export default { mounted() { // 初始化地图 const map = new qq.maps.Map(document.getElementById("map-container"), { center: new qq.maps.LatLng(39.916527, 116.397128), // 设置地图中心 zoom: 12 // 设置地图缩放级别 }) } } </script> ``` 通过上述代码,我们就可以在Vue网页中嵌入腾讯地图,并且以指定的坐标为中心显示地图。当用户访问该网页时,就能够看到腾讯地图在页面上的展示了。 当然,除了基础的展示功能,我们还可以根据具体需求在Vue组件中添加更多交互逻辑,例如地搜索、标记标注、路径规划等功能,从而实现更丰富的地图体验。总之,利用Vue框架和腾讯地图提供的功能,我们可以很方便地开发出功能强大的地图应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值