百度地图地理围栏

最近公司需要开发车辆管理系统,毫无疑问会用到地图定位等相关。其中最先需要解决的问题就是电子围栏,初步思路是在地图预先设置电子围栏,根据车辆安装的GPS定位是否在电子围栏里面,进行预警和判断。

在网上找了一圈百度地图的API和相关博客终于发现了GeoUtils.js 

进行下面之前事先准备好GeoUtils.js文件,并在html中引用

 1、圆形区域

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
	<title>判断点是否在矩形区域内</title>

	<script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.js"></script>
	<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak={你的AK}"></script>
	<script type="text/javascript" src="js/GeoUtils.js"></script>


</head>

<body>
	<!--百度地图容器-->
	<div style="width:100%;height:100%;position: absolute;" id="map"></div>

</body>
<script type="text/javascript">
	//创建地图
	var map = new BMap.Map("map");
	var point = new BMap.Point(118.658953, 37.425953); //设置地图的中心
	map.centerAndZoom(point, 17); //设置地图的层级
	map.addControl(new BMap.MapTypeControl()); //设置地图的类型控件
	map.enableScrollWheelZoom(true);	//滚轮滑动缩放地图
	
	

	//添加多边形地理围栏
	var polygon = new BMap.Polygon([
		new BMap.Point(118.658067, 37.426795),
		new BMap.Point(118.660304, 37.426931),
		new BMap.Point(118.660196, 37.425162),
		new BMap.Point(118.658031, 37.425398)
	], {
		strokeColor: "blue",
		strokeWeight: 2,
		strokeOpacity: 0.5
	}); //创建多边形
	map.addOverlay(polygon);




	//判断用户是否在地理围栏内
	/* 
	var geolocation = new BMap.Geolocation();
	var dingwei = setInterval(function () {
		geolocation.getCurrentPosition(function (r) {
			if (this.getStatus() == BMAP_STATUS_SUCCESS) {
				map.panTo(r.point);
				if (BMapLib.GeoUtils.isPointInPolygon(r.point, polygon)) {
					console.log("在监控方位内")
				} else {
					console.log("你已经逃离监控区域")
				}
			}
		}, {
			enableHighAccuracy: true
		})
	}, 2000);
	*/


	//鼠标点击获取坐标
	map.addEventListener("click", function (e) {

		var lng = e.point.lng;
		var lat = e.point.lat;

		console.log("lng:" + lng)
		console.log("lat" + lat)


		var myPoint = new BMap.Point(lng, lat)
		if (BMapLib.GeoUtils.isPointInPolygon(myPoint, polygon)) {
			console.log("在监控方位内")
		} else {
			console.log("你已经逃离监控区域")
		}

	})



	//判断某个点是否在区域内
	// 	var myPoint = new BMap.Point(118.658031, 37.425398)
	// 	if(BMapLib.GeoUtils.isPointInPolygon(myPoint,polygon)){
	// 		console.log("在监控方位内")
	// 	}else{
	// 		console.log("你已经逃离监控区域")
	// 	}
</script>

</html>

2、矩形区域

<!DOCTYPE html>
<html>

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
	<title>判断点是否在圆形区域内</title>
	<style type="text/css">
		body,
		html,
		#allmap {
			width: 100%;
			height: 100%;
			overflow: hidden;
			margin: 0;
			font-family: "微软雅黑";
		}
	</style>
	<script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.js"></script>
	<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的AK"></script>
	<script type="text/javascript" src="js/GeoUtils.js"></script>


	<title>圆形区域判断</title>
</head>

<body>
	<button id="btn">button</button>
	<div id="allmap"></div>
</body>


<script type="text/javascript">
	//创建地图
	var map = new BMap.Map("allmap");
	var point = new BMap.Point(118.658953, 37.425953); // 创建点坐标  
	map.centerAndZoom(point, 17); // 初始化地图,设置中心点坐标和地图级别。  

	// 百度地图API功能  
	map.addControl(new BMap.NavigationControl()); // 添加平移缩放控件  
	map.addControl(new BMap.ScaleControl()); // 添加比例尺控件  
	map.addControl(new BMap.OverviewMapControl()); //添加缩略地图控件  
	map.enableScrollWheelZoom(); //启用滚轮放大缩小  
	map.addControl(new BMap.MapTypeControl()); //添加地图类型控件  


	//创建一个圆
	var circle = new BMap.Circle(new BMap.Point(118.658953, 37.425953), 200, {
		fillColor: "blue",
		strokeWeight: 1,
		fillOpacity: 0.3,
		strokeOpacity: 0.3
	});

	
	map.addOverlay(circle);
	
	
	//点击获取坐标点的经纬度 判断是否在圆形内
	map.addEventListener("click", function (e) {

		var lng = e.point.lng;
		var lat = e.point.lat;

		console.log("lng:" + lng)
		console.log("lat" + lat)

		var myPoint = new BMap.Point(lng, lat);

		//判断点是否在圆形内
		if (BMapLib.GeoUtils.isPointInCircle(myPoint, circle)) {
			console.log("在圆形区域内")
		} else {
			console.log("不在圆形区域内")
		}

	})
</script>
</html>

注意:获取地图点击的坐标点不能使用

$("#allmap").click(function(e){
   alert("点击地图")
})

会报错,获取不到

var lng = e.point.lng;
var lat = e.point.lat;

猜你喜欢

转载自blog.csdn.net/qq_17058993/article/details/81480890