登录百度账号 应用类别选择(浏览器端)

在根目录下的static/html创建Bmap.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
		<style type="text/css">
			body,
			html {
				width: 100%;
				height: 100%;
				margin: 0;
				font-family: "微软雅黑";
				font-size: 14px;
			}

			#l-map {
				height: 100%;
				width: 100%;
			}

			#myPageTop {

				position: absolute;
				top: 5px;
				left: 10px;
				background: #fff none repeat scroll 0 0;
				border: 1px solid #ccc;
				padding: 6px;
				font-family: "Microsoft Yahei", "΢���ź�", "Pinghei";
				font-size: 14px;
			}

			#r-result {
				position: absolute;
				top: 1px;
				right: 10px;
				width: 100%;
			}

			.container {
				width: 130px;
				background-color: #fff;
				position: absolute;
				top: 5px;
				right: 10px;
				border-radius: 10px;
				overflow: hidden;
				padding: 6px;

			}

			.container .row2 {
				margin: 6px 0;
			}

			.container .row3 {
				text-align: center;
			}
		</style>
		<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=你的ak">
		</script>
		<!-- 只对App有效 -->
		<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js">
		</script>
		<title>手动定位</title>
	</head>
	<body>
		<div id="l-map"></div>
		<div class="container">
			<div class="row1">经度: <span class="lng"></span></div>
			<div class="row2">纬度: <span class="lat"></span></div>
			<div class="row3"><button onclick="btn" id="btn">确认</button></div>
		</div>

		<div id="myPageTop">
			<table>
				<tbody>
					<tr>
						<td>
							<label>请输入关键字:</label>
						</td>
					</tr>
					<tr>
						<td>
							<input type="text" size="24" id="suggestId">
						</td>
					</tr>
				</tbody>
			</table>
		</div>

		<!-- <div id="r-result">请输入:<input type="text"  size="20" value="百度" style="width:150px;" /></div> -->
		<div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;"></div>
	</body>
</html>
<script type="text/javascript">
	let dom = document.querySelector('.container .lng')
	let dom2 = document.querySelector('.container .lat')
	let dom3 = document.querySelector('#suggestId')

	setTimeout(() => {
		setLngLat(lng, lat)
		dom3.value = address
	}, 500)


	let btn = document.querySelector('#btn')
	btn.addEventListener('click', function() {
		let resultData = {
			lng: Number(dom.value),
			lat: Number(dom2.value),
			address: dom3.value
		}
		// #ifdef H5
		window.parent.postMessage({
			data:resultData
		})
		// #endif

		// #ifdef APP-PLUS
		uni.postMessage({
			data:resultData
		})
		// #endif 
	});


	var str = location.search.substr(1);
	let strArr = str.split('&')
	let lng = Number(decodeURIComponent(strArr[0].split('=')[1]))
	let lat = Number(decodeURIComponent(strArr[1].split('=')[1]))
	let address = decodeURIComponent(strArr[2].split('=')[1])

	var map = new BMap.Map("l-map");
	let point = new BMap.Point(lng, lat);
	map.centerAndZoom(point, 19); // 初始化地图,设置城市和地图级别。
	map.enableScrollWheelZoom(true);
	map.addControl(new BMap.NavigationControl()); // 地图平移缩放控件,默认位于地图左上方,它包含控制地图的平移和缩放的功能。
	let markerPoint = {
		lng,
		lat
	}
	map.addOverlay(new BMap.Marker(markerPoint)); // 添加标注

	map.addEventListener('touchend', (e) => {
		map.clearOverlays(); // 清除地图上所有覆盖物
		map.addOverlay(new BMap.Marker(e.point)); // 添加标注
		setLngLat(e.point.lng.toFixed(6), e.point.lat.toFixed(6))
	});

	function setLngLat(lng, lat) {
		dom.innerText = lng
		dom2.innerText = lat

		dom.value = lng
		dom2.value = lat
	}
	
	// 以下搜索框功能
	
	// 百度地图API功能
	function G(id) {
		return document.getElementById(id);
	}

	var ac = new BMap.Autocomplete( //建立一个自动完成的对象
		{
			"input": "suggestId",
			"location": map
		});

	ac.addEventListener("onhighlight", function(e) { //鼠标放在下拉列表上的事件
		var str = "";
		var _value = e.fromitem.value;
		var value = "";
		if (e.fromitem.index > -1) {
			value = _value.province + _value.city + _value.district + _value.street + _value.business;
		}
		str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

		value = "";
		if (e.toitem.index > -1) {
			_value = e.toitem.value;
			value = _value.province + _value.city + _value.district + _value.street + _value.business;
		}
		str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
		G("searchResultPanel").innerHTML = str;
	});

	var myValue;
	ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件
		var _value = e.item.value;
		myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
		G("searchResultPanel").innerHTML = "onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;
		setPlace();
	});

	function setPlace() {
		map.clearOverlays(); //清除地图上所有覆盖物
		function myFun() {
			let obj = local.getResults().getPoi(0)
			if (obj) {
				var pp = obj.point; //获取第一个智能搜索的结果
				map.centerAndZoom(pp, 19);
				let marker = new BMap.Marker(pp)
				map.addOverlay(marker); //添加标注
				setLngLat(pp.lng.toFixed(6), pp.lat.toFixed(6))
			} else {
				window.parent.postMessage({
					type: "toast",
					msg: "无经纬度",
				})
			}
		}
		var local = new BMap.LocalSearch(map, { //智能搜索
			onSearchComplete: myFun
		});
		local.search(myValue);
	}
</script>

在vue文件使用web浏览器组件引入

<template>
	<view style="width: 100%; height: calc(100vh - 44px)">
		<!-- 百度地图 -->
		<web-view @message="message" :src="htmlUrl" :update-title="false"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				htmlUrl: ''
			};
		},

		mounted() {},

		onShow() {
			// #ifdef H5
			window.addEventListener("message", this.receiveMessage, false);
			// #endif

		},
		onHide() {},

		onUnload() {
			// #ifdef H5
			window.removeEventListener("message", this.receiveMessage)
			// #endif
		},

		onLoad(e) {
			// 获取从上一级页面的传递过来的经纬度
			let lng = encodeURIComponent(e.lng || '114.24779')
			let lat = encodeURIComponent(e.lat || '22.71991')
			let address = encodeURIComponent(e.address || '')
			this.htmlUrl =
				`/static/html/Bmap.html?lng=${lng}&lat=${lat}&address=${address}`
		},
		methods: {
			// H5端的方法
			receiveMessage(event) {
				let tempData = event.data.data
				if (tempData?.type === 'toast') {
					uni.showToast({
						title: tempData.msg,
						icon: "none"
					})
				}
				console.log("tempData==", tempData);
				if (tempData?.lat && tempData?.lng) {
					// 在这里处理你的逻辑
				}
			},

			// App端的方法
			message(e) {
				let tempData = e.detail.data[0]
				if (tempData?.type === 'toast') {
					uni.showToast({
						title: tempData.msg,
						icon: "none"
					})
				}
				console.log("tempData==", tempData);
				if (tempData?.lng && tempData?.lat) {
					// 在这里处理你的逻辑
				}
			}
		},
	}
</script>


<style lang="scss" scoped>
</style>

效果图

更多推荐