高德地图创建自定义覆盖物

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>添加自定义点覆盖物</title>
<style>
body{ margin:0; padding:0;font:12px/16px Verdana,Helvetica,Arial,sans-serif;}
/* 定义自定义点样式 */
div.marker{height:40px;width:120px;background:url(http://pages.haozu.ajkcdn.com/20110909/img/map/marker.png) left top no-repeat;white-space:nowrap;}
div.marker span{ display:inline-block;height:28px;line-height:28px;margin:0 10px;color:#FFF;background:url(http://pages.haozu.ajkcdn.com/20110909/img/map/marker_bg_170x28.gif) right top no-repeat;padding-right:10px;}

/* 修改背景URL */
div.change{display:inline-block;background-image:url(http://pages.haozu.ajkcdn.com/20110909/img/map/marker-h.png);}
div.change span{background-image:url(http://pages.haozu.ajkcdn.com/20110909/img/map/marker-h-l.gif);}
</style>
<link rel="stylesheet" href="/Public/Css/demo.Default.css" type="text/css" />
<script language="javascript" src="http://webapi.amap.com/maps?v=1.2【&key=Your Key】"></script>
<script language="javascript">
var mapObj,tool,view,scale;
function mapInit(){
	mapObj = new AMap.Map("map",{
		center:new AMap.LngLat(116.392936,39.919479)
	});
	mapObj.plugin(["AMap.ToolBar","AMap.OverView,AMap.Scale"],function(){
		//加载工具条
		tool = new AMap.ToolBar({
			direction:false,
			ruler:false,
			autoPosition:false//禁止自动定位
		});
		mapObj.addControl(tool);
		//加载鹰眼
		view = new AMap.OverView({visible:false});
		mapObj.addControl(view);
		//加载比例尺
		scale = new AMap.Scale();
		mapObj.addControl(scale);
	});
}
function addCustomMarker(){
	//自定义覆盖物dom 元素
	var m = document.createElement("div");
	m.className = "marker";
	var n = document.createElement("span");
	n.innerHTML = "Amap";
	m.appendChild(n);
	
	var marker1 = new AMap.Marker({
		map:mapObj,
		position:new AMap.LngLat(116.373881,39.907409), //基点位置
		offset:new AMap.Pixel(0,-40), //相对于基点的偏移位置
		//draggable:true,  //是否可拖动
		content:m   //自定义覆盖物内容
	});
	
	
	//mouseover,换个皮肤
	AMap.event.addListener(marker1,'mouseover',function(){
		n.innerHTML = "高德地图"; //修改内容
		m.className = "marker change";//增加样式
	});
	
	
	//mouseout,换回皮肤
	AMap.event.addListener(marker1,'mouseout',function(){
		n.innerHTML = "Amap"; //修改内容
		m.className = "marker";
	});
	
}
</script>
</head>
<body onLoad="mapInit()">
<div id="map" style="width:659px;height:400px;border:#F6F6F6 solid 1px;"></div>
<a href="javascript:addCustomMarker()">添加自定义点覆盖物</a>
</body>
</html>

 

### 实现 Vue 中高德地图自定义覆盖物 #### 初始化 AMap 对象并配置基础参数 为了在 Vue 项目中集成高德地图并实现自定义覆盖物,首先需要确保已经成功引入了高德地图 SDK 并完成了基本的地图实例化操作。 ```javascript import { onMounted, ref } from 'vue'; // 引入高德地图JS API window._AMapSecurityConfig = { securityJsCode: "your-security-code" }; const mapRef = ref(null); onMounted(() => { const script = document.createElement('script'); script.src = `https://webapi.amap.com/maps?v=2.0&key=${process.env.VUE_APP_AMAP_KEY}`; document.head.appendChild(script); }); ``` #### 创建自定义覆盖物组件 通过继承 `AMapOverlay` 类可以构建个性化的图形元素。下面是一个简单的多边形绘制案例: ```typescript class CustomPolygon extends AMap.Overlay { constructor(options) { super(); this.options = options; this.initOptions(this.options); // 设置默认样式和其他属性 } draw() { let path = this.getPath(); // 获取路径坐标集合 var context = this.getContext(); context.beginPath(); for (let i = 0; i < path.length; ++i) { if (!path[i]) continue; if (i === 0) { context.moveTo(path[i].lng, path[i].lat); } else { context.lineTo(path[i].lng, path[i].lat); } } context.closePath(); context.strokeStyle = '#FFA500'; // 边框颜色设置为橙色 context.stroke(); context.fillStyle = "#FFFFCC"; // 填充颜色设为淡黄色 context.fillOpacity = 0.5; // 半透明效果 context.fill(); } } ``` 此部分代码展示了如何基于给定的经纬度列表创建一个多边形,并应用特定的颜色和透明度[^1]。 #### 将自定义覆盖物添加到地图上 一旦完成上述类定义,在适当的地方调用其构造函数并将新对象加入至地图容器内即可显示出来。 ```javascript function addCustomPolygon(mapInstance, lnglats) { let polygon = new CustomPolygon({ path: lnglats, bubble: true, cursor: 'pointer' }); polygon.setMap(mapInstance); } addCustomPolygon(mapRef.value, [ [120.198476, 30.265], [120.198476, 30.26], [120.199476, 30.26], [120.199476, 30.265] ]); ``` 这段脚本负责接收一组地理坐标作为输入参数,进而生成对应的视觉表现形式附着于指定的地图视图之上[^2]。 #### 数据预处理与适配 实际开发过程中可能遇到后台返回的数据结构不符合前端展示需求的情况,这时就需要对获取的信息进行必要的转换工作以匹配预期格式。例如将 JSON 数组转化为适合用来描绘区域轮廓的形式——即一系列由经度纬度组成的点序列[^3]。 ```javascript function transformDataForMap(rawData){ return rawData.map(item=>{ return item.coordinates.map(coordinate=>({lng:coordinate[0], lat:coordinate[1]})); }) } ``` 该辅助函数接受来自服务器端未经加工过的原始资料集合作为入口参数,经过映射运算后输出调整过后的版本供后续逻辑单元消费使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值