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

该文章展示了如何利用高德地图API在网页中创建地图,包括设置卫星图层,添加Marker(标记)、Circle(圆形)和Polyline(折线)来实现特定的效果。通过JavaScript函数动态调整Marker位置,更新Circle和Polyline,以实现地图元素的交互拖动功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:

思路是引用高德地图图,通过绘制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));
		});
}

### 实现 UniApp 中百度地图显示圆形区域 为了在 UniApp 中使用百度地图 API 显示圆形区域,可以按照如下方法操作: 创建一个 `bmap` 组件并引入必要的依赖项。确保项目中已集成百度地图插件,并配置好相应的密钥。 定义绘制圆的方法,在页面加载完成后调用此函数完成初始化工作[^1]。下面是一个完整的代码示例来展示如何实现这一功能: ```html <template> <view class="container"> <!-- 百度地图组件 --> <baidu-map id="myMap" :center="{lng: details.longitude, lat: details.latitude}" :zoom="15"></baidu-map> </view> </template> <script> export default { data() { return { map: null, details: { longitude: 116.404, // 默认经度 latitude: 39.915, // 默认纬度 radius: 1000 // 圆半径(单位:米) } }; }, mounted() { setTimeout(() => { this.initCircle(); }, 200); }, methods: { initCircle() { const BMapGL = window.BMapGL; let point = new BMapGL.Point(this.details.longitude, this.details.latitude); var circleOptions = { center: point, radius: this.details.radius, fillColor: 'yellow', strokeWeight: 1, fillOpacity: 1, strokeOpacity: 0.3 }; var circle = new BMapGL.Circle(point, this.details.radius, circleOptions); this.map.addOverlay(circle); this.map.setViewport(circle.getPath()); } }, onReady() { this.$nextTick(function () { this.map = new BMapGL.Map('myMap'); }); } }; </script> ``` 上述代码片段展示了如何通过 Vue.js 和 UniApp 结合百度地图 JavaScript API 来实现在地图上画出指定位置和大小的黄色填充透明边框的圆形覆盖物。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值