| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 | <template>	<view>		<map			style="width: 100%; height:250px;"			:latitude="latitude"			:longitude="longitude"			:markers="marker"			:scale="scale"			:circles="circles"		>		<!--  :circles="circles" -->		</map>	</view></template><script>	import { geoDistance } from '@/common/util/util.js'	import amap from "@/common/js-sdk/js-amap/amap-wx.js";	// #ifdef H5	import AMap  from "@/common/js-sdk/js-amap/amap-h5.js";	// #endif		export default {		 props:{			compLatitude:{				type:Number,				default:40.009390,				required:false			},			compLongitude:{				type:Number,				default:116.374322,				required:false			}		},		data() {			return {				amapPlugin:null,				wxMapKey:"53324ee357405c4a65f35a1aa05ffaf2",				id:0,			    title: 'map',				distance:0,				address:"",		       latitude: this.compLatitude,  //纬度			    longitude: this.compLongitude,  //经度				scale:16,//地图缩放程度				tipText:'打卡范围',				bgColor:'#00c16f',			    marker: [],			   circles:[{//在地图上显示圆				    latitude: this.compLatitude,				    longitude: this.compLongitude,				    radius:80,//半径					  fillColor:"#ffffffAA",//填充颜色				    color:"#55aaffAA",//描边的颜色				    strokeWidth:1//描边的宽度				}],				resAmap:null			}		},	    created() {			// #ifdef MP-WEIXIN || APP-PLUS	    	this.amapPlugin = new amap.AMapWX({	    	    key: this.wxMapKey	    	});			// #endif						// #ifdef H5			this.initAMap()			// #endif	    },		mounted() {			// #ifdef MP-WEIXIN			  this.getAuthorizeInfo();			// #endif			// #ifdef APP-PLUS			  this.getLocationInfoWx();			// #endif			// #ifdef H5			  //this.getLocationInfo()			// #endif		},		computed:{		  inCircle(){			return this.address && this.distance <= 80		  }		},		methods: {			allowed(){				return this.inCircle			},			getMyAddress(){				return this.address			},			refreshLocation(){				// #ifdef MP-WEIXIN				  this.getAuthorizeInfo();				// #endif				// #ifdef APP-PLUS				  this.getLocationInfoWx();				// #endif				// #ifdef H5				  this.initAMap()				// #endif			},			getAuthorizeInfo(){				//1. uniapp弹窗弹出获取授权(地理,个人微信信息等授权信息)弹窗				var _this=this;				uni.authorize({					scope: "scope.userLocation",					success() { //1.1 允许授权						_this.getLocationInfoWx();					},					fail(){    //1.2 拒绝授权						console.log("你拒绝了授权,无法获得周边信息")						_this.openConfirm();					}				})			},			getLocationInfoWx(){				var that=this;				this.amapPlugin.getRegeo({				    type: 'gcj02', //map 组件使用的经纬度是国测局坐标, type 为 gcj02				    success: function(res) {						console.log("success",res);						that.latitude = res[0].latitude;						that.longitude = res[0].longitude;						that.address = res[0].name + res[0].desc;						that.distance=geoDistance(that.longitude, that.latitude,that.compLongitude,that.compLatitude)						console.log("that.distance",that.distance);						let tipText=(that.distance>80?"未在":"已在")+"打卡范围内";						let bgColor=that.distance>80?"#ff0000":"#00c16f";						let marker={							   id:0,						     latitude:that.latitude,//纬度						     longitude:that.longitude,//经度						       iconPath: '/static/location.png',							   width:35,							   height:35,							   // #ifdef MP-WEIXIN							   label:{//为标记点旁边增加标签							     content:tipText,//文本						        color:'#ffffff',//文本颜色								  fontSize:14,//文字大小								   borderWidth:2,//边框宽度								   borderColor:bgColor,//边框颜色 								   bgColor:bgColor,//背景颜色								  borderRadius:2,//边框圆角  								  padding:5,//文本边缘留白								   textAlign:'center',//文本对齐方式								   x:0,//label的坐标,原点是 marker 对应的经纬度								   y:0,//label的坐标,原点是 marker 对应的经纬度 							    }, 							   // #endif							   // #ifdef APP-PLUS							   callout:{//自定义标记点上方的气泡窗口 点击有效							     content:tipText,//文本							     color:'#ffffff',//文字颜色							     fontSize:14,//文本大小							     //borderRadius:2,//边框圆角							     bgColor:bgColor,//背景颜色							     display:'ALWAYS',//常显								   textAlign:'center'							    },							   // #endif						    }							that.marker=[marker];				    },				    fail: (res) => {				      console.log(JSON.stringify(res));				    }				 });			},			getLocationInfo() {				var _this=this;				uni.showLoading({					title: '获取信息中',					mask:true				});				uni.getLocation({					//type: 'wgs84',					type:'gcj02',					success: function (res) {						console.log('当前位置的经度:' + res.longitude);						console.log('当前位置的纬度:' + res.latitude);					    _this.distance=geoDistance(res.longitude, res.latitude,_this.compLongitude,_this.compLatitude)						let tipText=(_this.distance>80?"未在":"已在")+"打卡范围内";						let bgColor=_this.distance>80?"#ff0000":"#00c16f";						_this.longitude=res.longitude						_this.latitude=res.latitude						let marker={					         latitude: res.latitude,//纬度					         longitude:res.longitude,//经度					         callout:{//自定义标记点上方的气泡窗口 点击有效					    	     content:tipText,//文本					    	     color:'#ffffff',//文字颜色					    	     fontSize:14,//文本大小					    	     borderRadius:2,//边框圆角					    	     bgColor:bgColor,//背景颜色					    	     display:'ALWAYS'//常显					           }					        }							_this.marker=[marker];					},					fail: function (res){						console.log('getLocation==> fail:' + res);						console.log(res);					}				});				uni.hideLoading();			},			 // 当用户第一次拒绝后再次请求授权			openConfirm(){				uni.showModal({					title: '请求授权当前位置',					content: '需要获取您的地理位置,请确认授权',					success: (res)=> {						if (res.confirm) {							uni.openSetting();// 打开地图权限设置						} else if (res.cancel) {							uni.showToast({								title: '你拒绝了授权,无法获得位置信息',								icon: 'none',								duration: 1000							})						}					}				});			},		  // 根据坐标返回地址(逆地理编码)	      /* async getAddress (points) {			  try {			  	this.resAmap = await AMap();			  	this.$nextTick(function() {			  		this.resAmap.plugin('AMap.Geocoder', () => {			  			var geocoder  = new this.resAmap.Geocoder({			  				radius: 1000,						});			  			geocoder.getAddress(points, (status, result) => {							if (status === 'complete' && result.regeocode) {							  this.address = result.regeocode.formattedAddress							}						})			  		});			  	})			  } catch (e) {			  	console.log(e)			  }			}, */			// #ifdef H5			async initAMap() {				try {					uni.showLoading({						title: '定位中...',						mask:true					});					this.resAmap = await AMap();					this.$nextTick(function() {						this.resAmap.plugin('AMap.Geolocation', () => {							var geolocation = new this.resAmap.Geolocation({								enableHighAccuracy: true, //是否使用高精度定位,默认:true								timeout: 10000, //超过10秒后停止定位,默认:5s								buttonPosition: 'RB', //定位按钮的停靠位置								// buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)								zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点												});							geolocation.getCurrentPosition(function(status, result) {								if (status == 'complete') {									onComplete(result)								} else {									onError(result)								}							});											});												//解析定位结果						var _this = this;											function onComplete(data) {							console.log("H5高德定位",data) 							console.log('当前位置的经度:' + data.position.lat);							console.log('当前位置的纬度:' + data.position.lng);							_this.distance=geoDistance(data.position.lng, data.position.lat,_this.compLongitude,_this.compLatitude)							let tipText=(_this.distance>80?"未在":"已在")+"打卡范围内";							let bgColor=_this.distance>80?"#ff0000":"#00c16f";							_this.longitude=data.position.lng							_this.latitude=data.position.lat							_this.address=data.formattedAddress							let marker={							     latitude: _this.latitude,//纬度							     longitude:_this.longitude,//经度							     callout:{//自定义标记点上方的气泡窗口 点击有效								     content:tipText,//文本								     color:'#ffffff',//文字颜色								     fontSize:14,//文本大小								     borderRadius:2,//边框圆角								     bgColor:bgColor,//背景颜色								     display:'ALWAYS'//常显							       }							    }								_this.marker=[marker];								uni.hideLoading();								_this.$tip.success("定位成功")						}											function onError(data) {							console.log(data) // 定位失败的信息						}										})				} catch (e) {					console.log(e)				   _this.$tip.alert("定位失败")			    }			}, 			// #endif					}	}</script><style></style>
 |