当前位置: 首页 > article >正文

【uniapp】Google Maps

话不多说 直接上干货 提前申请谷歌地图账号
一、新建地图 使用h5+获取当前定位或者使用三方uniapp插件

 	var coords = ""
    navigator.geolocation.getCurrentPosition(function(position) {
			coords = {
				lat: position.coords.latitude,
				lng: position.coords.longitude
			};
			lats = position.coords.latitude;
			lngs = position.coords.longitude
		});
map = new google.maps.Map(document.getElementById('map'), {
		zoom: zoom,
		center: coords,
		mapId: "your map id",
		animation: 'BOUNCE'
	});

二、画圆

cityCircle = new google.maps.Circle({
	strokeColor: "#FF0000", // 边框颜色
	strokeOpacity: 0.6, // 边框透明度
	strokeWeight: 0.8, // 边框宽度
	fillColor: "#FF0000", // 填充颜色
	fillOpacity: 0.15, // 填充透明度
	map,
	center: {
		lat: lats,
		lng: lngs
	},
	radius: maxValue * 500, //半径
});

三、绘制marker点

  let min = 500;
	let max = 1000;
	let randomNum = Math.floor(Math.random() * (max - min + 1)) + min;
	for (let i = 0; i < 5; i++) {
		var locObj = {
			lat: (lats + (Math.floor(Math.random() * 21) - 15) / randomNum) * 1,
			lng: (lngs - (Math.floor(Math.random() * 21) - 15) / randomNum) * 1,
			title: randomChinese(10)
		}
		const marker = new google.maps.Marker({
			position: locObj,
			title: locObj.title + '-' + i,
			imgUrl: 'https://picsum.photos/450/450?random=' + Math.floor(Math.random() * 100),
			icon: {
				url: "https://maps.gstatic.com/mapfiles/ms2/micons/blue.png",
				scaledSize: new google.maps.Size(50, 50),
			},
			map: map
		});
		markers.push(marker)
	}

四、搜索框

// 创建 Autocomplete 实例
	const input = document.getElementById("search-box");
	const autocomplete = new google.maps.places.Autocomplete(input);
	// 设置 Autocomplete 参数
	autocomplete.setFields(["geometry", "name"]);
	// 添加事件监听器,当用户选择某个地点时,在地图上标记出所选位置
	autocomplete.addListener("place_changed", function() {
		const place = autocomplete.getPlace();
		if (!place.geometry) {
			console.log("返回的地理信息无效!");
			return;
		}
		// 将地图中心点指向用户所选位置,并设置标记
		if (searchmarker) { //去除marker标记点
			searchmarker.setMap(null)
			searchmarker = ""
		}
		map.setCenter(place.geometry.location);
		searchmarker = new google.maps.Marker({
			map: map,
			position: place.geometry.location,
			title: place.name,
		});
	});

五、绘制省市区

const polygonsData = []
	//cityObjArr 请前往dcloud获取相关数据【https://ext.dcloud.net.cn/plugin?id=11873】
	for (var k = 0; k < cityObjArr.length; k++) {
			var obj = {
				polygonCoords: cityObjArr[k],
				color: getRandomColor(),
				strokeWeight: 2,
			}
			polygonsData.push(obj)
		}
	polygonsData.forEach((polygon) => {
		var polygonObj = new google.maps.Polygon({
			paths: polygon.polygonCoords,
			strokeColor: getRandomColor(), // 边界线颜色
			strokeOpacity: 0.8, // 边界线透明度
			strokeWeight: 2, // 边界线厚度
			fillColor: getRandomColor(), // 填充颜色
			fillOpacity: 0.2, // 填充透明度
			map: map,
		});
		newPolygon.push(polygonObj)
	});

六、画路线

const directionsService = new google.maps.DirectionsService();
	var TravelMode = [{
			id: 1,
			name: "DRIVING",
			color: "#ea4335"
		},
		{
			id: 2,
			name: "WALKING",
			color: "#7825fa"
		},
		{
			id: 3,
			name: "BICYCLING",
			color: "#fa6200"
		},
		{
			id: 4,
			name: "TRANSIT",
			color: "#ff00ff"
		}
	]
	for (var i = 0; i < TravelMode.length; i++) {
		startDrawRoute(directionsService, TravelMode[i])
	}
	function startDrawRoute(directionsService, travelMode) {
	// 随机数字而已  动态数字  方便查询效果
	let min = 5000;
	let max = 10000;
	let randomNum = (Math.floor(Math.random() * (max - min + 1)) + min) / 500000;
	// 起点坐标
	const origin = {
		lat: 34.7382820208 + randomNum,
		lng: 113.64360881345 + randomNum
	};
	// 终点坐标
	const destination = {
		lat: 34.78194 + randomNum,
		lng: 113.622512 + randomNum
	};
	var directionsRenderer = new google.maps.DirectionsRenderer({
		map: map,
		suppressMarkers: true, // 关闭默认图标
		polylineOptions: {
			strokeColor: travelMode.color, //设置路线颜色
			strokeWeight: 5 //设置路线宽度
		},
		// draggable: true //允许用户拖动路线
	});
	const request = {
		origin: origin,
		destination: destination,
		travelMode: travelMode.name, //绘制路线的模式
	};
	directionsService.route(request,
		(result, status) => {
			if (status === "OK") {
				directionsRenderer.setDirections(result);
				directionsRenderer.setMap(map);
				// 获取起点和终点的信息并添加标记
				var startMarker = new google.maps.Marker({
					position: result.routes[0].legs[0].start_location,
					map: map,
					icon: {
						url: "https://maps.gstatic.com/mapfiles/ms2/micons/pink.png",
						scaledSize: new google.maps.Size(50, 50),
					},
				});
				drawRouteMarker.push(startMarker)
				var endMarker = new google.maps.Marker({
					position: result.routes[0].legs[0].end_location,
					map: map,
					icon: {
						url: "https://maps.gstatic.com/mapfiles/ms2/micons/orange.png",
						scaledSize: new google.maps.Size(50, 50),
					},
				});
				drawRouteMarker.push(endMarker)
				directionsRendererArr.push(directionsRenderer)
				//显示路线的总距离
				console.log('距离===', directionsRenderer.directions.routes[0].legs[0].distance.text)
				console.log('时间===', directionsRenderer.directions.routes[0].legs[0].duration.text)
				// for (var k = 0; k < directionsRenderer.directions.routes[0].legs[0].steps.length; k++) {
				// 	console.log(directionsRenderer.directions.routes[0].legs[0].steps[k].instructions)
				// }
			} else {
				// console.log(travelMode, "绘制失败===", result)
			}
		}
	);
}

这个时候相信你已经看到了地图【详细代码请前往dcloud插件市场查看marker标记点、省市区颜色标记、输入框搜索、范围选择、信息弹窗等】

祝:学习愉快、工作顺利

温馨提示:源码获取方式 关注【码农园区】 回复   “ google”   

在这里插入图片描述


http://www.kler.cn/a/132740.html

相关文章:

  • 解决 IDEA 修改代码重启不生效的问题
  • FPGA开发-逻辑分析仪的应用-数字频率计的设计
  • torch.stack 张量维度的变化
  • 使用Web Animations API实现复杂的网页动画效果
  • SpringCloud篇(服务网关 - GateWay)
  • 【软件测试】设计测试用例的万能公式
  • js制作动态表单
  • PY32F002B从压缩包到实现串口printf输出
  • 解决:微软在登录时总是弹出需要家长或监护人同意才能使用该账户并且不断循环?
  • spire.pdf盖章(无水印免费无限制)
  • 【MySQL学习】C++外部调用
  • 【LeetCode刷题-双指针】--16.最接近的三数之和
  • 大师学SwiftUI第16章 - UIKit框架集成
  • 【Java 进阶篇】插上翅膀:JQuery 插件机制详解
  • docker中怎么启动容器
  • Nginx(六) Nginx location 匹配顺序及优先级深究(亲测有效)
  • P2239 [NOIP2014 普及组] 螺旋矩阵 题解
  • 机器学习和深度学习领域的算法和模型
  • Java中的集合内容总结——Collection接口
  • 灰度图处理方法
  • WPF异步编程
  • 手动编译GDB
  • 使用CXF调用WSDL(二)
  • ascii 码对照表
  • LeetCode704.二分查找及二分法
  • Filter和ThreadLocal结合存储用户id信息