uniapp 引入腾讯地图并且进行定位


首先:https://lbs.qq.com/miniProgram/plugin/pluginGuide/routePlan 这是腾讯地图地址

 

 

 

 

 

 

 安装一波( 这是为了防止出现腾讯地图跨域问题 )

npm i --save vue-jsonp

在 main.js 文件

// 引入腾讯地图
import {VueJsonp} from 'vue-jsonp'
Vue.use(VueJsonp)

  

manifest.json 文件开始配置

复制进去就行

搜索:usingComponents

"plugins": {
            "routePlan": {
            "version": "1.0.12",
            "provider": " 小程序的APPID "
            }
        },
        "permission": {
            "scope.userLocation": {
                "desc": "位置信息效果展示"
            }
        }

 

配置上自己的小程序appid

 

 

配置上去腾讯地图创建的key

 

 

 

 

 

最后,在应用的文件

<!-- :polyline="polyline" --> //点 连城线,需要的可以自己配置
		<map style="width: 100%; height: 300px;" :circles="circles" :scale="scale"
			:latitude="latitude" :longitude="longitude" :markers="covers">
			<!-- <cover-view class="cover-view" @click="onControltap"></cover-view> -->
		</map>

  

 

data定义 显示默认定位

// title: 'map',
				latitude: 22.571164, // 默认的经纬度
				longitude: 113.926937,
				covers: [{
						// 开始的经纬度
						latitude: 22.573164, //纬度
						longitude: 113.926937, //经度
						// #ifdef APP-PLUS
						iconPath: '../../../static/image/location@3x.png', //显示的图标
						// #endif
						// #ifndef APP-PLUS
						iconPath: '../../../static/location.png', //显示的图标
						// #endif
						// title: '阿打算', //标注点名
						label: {
							//为标记点旁边增加标签
							// content: '文本1', //文本
							color: '#F76350', //文本颜色
							// anchorX: 0, //label的坐标,原点是 marker 对应的经纬度
							// anchorY: -80, //label的坐标,原点是 marker 对应的经纬度
							bgColor: '#fff', //背景色
							padding: 5, //文本边缘留白
							borderWidth: 1, //边框宽度
							borderColor: '#D84C29', //边框颜色
							textAlign: 'right' //文本对齐方式。
						},
						callout: {
							content: '当前所在',
							color: '#F76350',
							fontSize: 12
						}
					},
					{
						// 圆圈所在的点 =》 终点
						latitude: 22.57147,
						longitude: 113.92663,
						// #ifdef APP-PLUS
						iconPath: '../../../static/image/location@3x.png', //显示的图标
						// #endif
						// #ifndef APP-PLUS
						iconPath: '../../../static/location.png', //显示的图标
						// #endif
						// iconPath: '../../static/image/personal_center.png',
						// title: '阿迪达斯',
						// x: 39.9,
						// y: 116.399,
						label: {
							// content: '打卡范围',
							color: '#F76350',
							bgColor: '#fff',
							padding: 5,
							borderRadius: 4
						},
						callout: {
							content: '打卡范围',
							color: '#F76350',
							fontSize: 12
						}
					}
				],
				scale: 15, //地图层级
				// controls: [{
				// 	//在地图上显示控件,控件不随着地图移动
				// 	id: 1, //控件id
				// 	// iconPath: '../../static/image/equipment_deployment_two.png', //显示的图标
				// 	position: {
				// 		//控件在地图的位置
				// 		left: 15,
				// 		top: 15,
				// 		width: 50,
				// 		height: 50
				// 	}
				// }],
				//在地图上显示圆
				circles: [{
					latitude: 22.57147,
					longitude: 113.92663,

					fillColor: '#AACCEE32', //填充颜色
					color: '#AACCEE', //描边的颜色
					radius: 100, //半径
					strokeWidth: 2 //描边的宽度
				}],
				// polyline: [{ //根据点画线
				// 	//指定一系列坐标点,从数组第一项连线至最后一项 => 第一个输入开始点, 第二个输入结束点
				// 	// points: [{ latitude: 22.57147, longitude: 113.92663 }, { latitude: 22.57091694019413, longitude: 113.9270532131195 }],
				// 	points: [],
				// 	color: '#0000AA', //线的颜色
				// 	width: 2, //线的宽度
				// 	dottedLine: true, //是否虚线
				// 	arrowLine: true //带箭头的线 开发者工具暂不支持该属性
				// }]

  

 

 

methods 方法 /=

//坐标转腾讯地图坐标
			bMapTransQQMap(lng, lat) {
				let locationObj = lat + ',' + lng;
				let url = 'https://apis.map.qq.com/ws/coord/v1/translate';
				var that = this
				this.$jsonp(url, {
					key: 'KKSBZ-53WRP-GBSD7-LE373-SGAQO-6UB7I',
					locations: locationObj,
					type: 1,
					output: 'jsonp'
				}).then(res => {

					that.latitude = res.locations[0].lat
					that.longitude = res.locations[0].lng

					that.covers[0].latitude = res.locations[0].lat
					that.covers[0].longitude = res.locations[0].lng
					//判断是否在规定打卡距离以内
					that.GetDistance(that.covers[0].latitude, that.covers[0].longitude, that.covers[1].latitude,
						that.covers[1].longitude)

				})

			},
			//获取当前位置 =》 由于腾讯地图获取定位会飘,因此采用原生获取定位的方法。目前项目应用中属于最准确的一个,没有之一。
			getAddress() {
				if (navigator.geolocation) {
					var that = this
					var timer = navigator.geolocation.watchPosition(
						function(ev) { //step3:用经纬度描述具体位置
							// alert(parseFloat(ev.coords.longitude));
							// alert(parseFloat(ev.coords.latitude));
							that.bMapTransQQMap(parseFloat(ev.coords.longitude), parseFloat(ev.coords.latitude))
						},
						function(err) {
							alert('定位超时,请稍后再试!')
							// alert(err.code)
							// alert(err.message)
							//清除多次地理位置定位
							navigator.geolocation.clearWatch(timer);
						}, {
							/*数据收集 :  json的形式
							 enableHighAcuracy  :  更精确的查找,默认false
							 timeout  :指定获取地理位置的超时时间,默认不限时,单位为毫秒
							 maximumAge :最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
							 */
							enableHighAccuracy: true,
							maximumAge: 2000
						})
				} else {
					alert('您的浏览器不支持geolocation定位!,请更换浏览器');
				}
			},
			
			// 方法定义 lat,lng  计算距离
			GetDistance(lat1, lng1, lat2, lng2) {
				var radLat1 = lat1 * Math.PI / 180.0;
				var radLat2 = lat2 * Math.PI / 180.0;
				var a = radLat1 - radLat2;
				var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
				var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
					Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
				s = s * 6378137.0; // EARTH_RADIUS;
				s = Math.round(s * 10000) / 10000;
				this.dakajuli = parseFloat(s)
			},

  

 

 

腾讯地图坐标转换API: https://lbs.qq.com/service/webService/webServiceGuide/webServiceTranslate

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM