地图绘制圆形以及显示半径

3 篇文章 0 订阅
2 篇文章 0 订阅

效果图:

思路是引用高德地图图,通过绘制marker+圆形+折线等组合起来,实现上图效果;

具体代码如下:

 html文件中须引入高德地图如下:

<script type="text/javascript">
	window._AMapSecurityConfig = {
		securityJsCode: 你的key值对应的秘钥,
	}
</script>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的key值&plugin=AMap.Autocomplete"></script>

js文件方法:

let map = new AMap.Map('mapDiv', {
		        layers: [
				    new AMap.TileLayer.Satellite(),
			    ],
			    resizeEnable: true,
			    zoom: 13,
			    center: [116.452122, 39.881176] //地图中心点
           });

var data = {
                longitude:'116.452122',
                latitude:'39.881176',
                radius:'200'
           }
 Circle(data);
function Circle(data){
		var lon = JSON.parse(data.longitude);
		var lat = JSON.parse(data.latitude);
		var position = [];
			position.push(lon,lat);
		// 创建标记icon
		var icon = new AMap.Icon({
			size: new AMap.Size(25, 25),
			image: './img/img001.png',
			imageOffset: new AMap.Pixel(-58, -38),
		})
		// 创建标记marker
		let marker = new AMap.Marker({
			position: position,
			icon: icon ,
			offset: new AMap.Pixel(-12.5, -12.5),
			draggable: true
		});

		// 创建圆形circle
		var circle = new AMap.Circle({
			center: position,  // 圆心位置
			radius: data.radius, // 圆半径
			fillColor: '#5589C380',   // 圆形填充颜色
			strokeColor: '#5589C380', // 描边颜色
			strokeWeight: 1, // 描边宽度
			fillOpacity: 0.6
		});
		
		// 创建折线
		let bounds = circle.getBounds();
		let point_lon = bounds.northeast.lng,
			point_lat = (bounds.northeast.lat + bounds.southwest.lat) / 2;
		let path = [circle.getCenter(),new AMap.LngLat(point_lon, point_lat),];
		// 绘制
		var polyline = new AMap.Polyline({
				path: path,
				strokeWeight: 1.2, 
				strokeColor: '#FFE000',
				strokeStyle: 'dashed',
				strokeDasharray: [5,5]
			});
		
		// 创建纯文本标记(半径值)
		let text_lon = (circle.getCenter().lng + point_lon) / 2;
		let text_lat = point_lat;
		// 绘制
		var text = new AMap.Text({
				text: data.radius + 'm',
			    anchor:'bottom-center', // 设置文本标记锚点
			    style:{
					'background-color': 'transparent',
					'border': 'none',
					'font-size':'12px',
					'color':'#ffffff'
				},
				position: [text_lon, text_lat]
			});
		
		let overlayGroup = new AMap.OverlayGroup([marker, circle, polyline, text]);
		map.add(overlayGroup);
		// map.setFitView([circle]);
		marker.on('dragging', function (event) {
			let position = event.target.getPosition();
			circle.setCenter(position);
			let new_point_lon = circle.getBounds().northeast.lng,
				new_point_lat = (circle.getBounds().southwest.lat + circle.getBounds().northeast.lat) / 2;
			let new_path = [
				circle.getCenter(),
				new AMap.LngLat(new_point_lon, new_point_lat), 
			];
			polyline.setPath(new_path);
			text.setPosition(new AMap.LngLat((circle.getCenter().lng + new_point_lon) / 2, new_point_lat));
		});
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用高德地图 JavaScript API 绘制指定公里数圆形边界的简单示例: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>绘制指定公里数圆形边界</title> <style type="text/css"> #mapContainer { width: 100%; height: 600px; } </style> </head> <body> <div id="mapContainer"></div> <script src="https://webapi.amap.com/maps?v=1.4.15&key=您的密钥"></script> <script> // 初始化地图 var map = new AMap.Map('mapContainer', { center: [116.397428, 39.90923], // 北京市中心点坐标 zoom: 13 // 缩放级别 }); // 绘制指定公里数的圆形边界 function drawBoundary(lng, lat, radius) { // 创建圆形边界 var boundary = new AMap.Circle({ center: [lng, lat], // 中心点坐标 radius: radius * 1000, // 半径(注意:高德地图使用米为单位) strokeColor: "#FF0000", strokeWeight: 2, fillOpacity: 0 }); boundary.setMap(map); } // 示例:绘制以北京市中心点为中心,半径为5公里的圆形边界 drawBoundary(116.397428, 39.90923, 5); </script> </body> </html> ``` 在上面的示例中,我们首先使用 `AMap.Map` 创建了一个地图实例,并设置了地图中心点和缩放级别。接着,我们定义了一个 `drawBoundary` 函数,该函数接受三个参数:中心点经度、中心点纬度和半径,然后使用 `AMap.Circle` 创建一个圆形对象来绘制圆形边界。最后,我们调用 `drawBoundary` 函数来绘制指定公里数的圆形边界。 需要注意的是,上面的示例中使用了 `AMap.Circle` 来绘制圆形边界,使用这种方法绘制出来的圆形边界会比较精确。另外,示例中的半径是以公里为单位的,而 `AMap.Circle` 使用的是以米为单位的半径,因此需要将半径乘以1000来转换为米。如果需要更精确的圆形边界,可以使用更复杂的算法,或者考虑使用高德地图提供的服务来获取更精确的边界信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值