JS基于天地图覆盖物保存到本地(业务库)的方法

天地图保存覆盖物到业务库,实现覆盖物自定义保存和查询,编辑也是同理。

一.、基本思路
首先利用地图工具画图,每次有拐点的时候都会点击地图,因此我们使用记录单击地图的方式获取多边形的点集,用于记录多边形的范围集。
接下来将获取的点保存到数组(其他存储无所谓),供我们存储本地或者业务库使用。
二、实现过程

  1. 通过调用天地图的画图工具(圆、线、点、多边形等)实现地图覆盖物的采集。
    参考天地图的例子,使用天地图工具进行绘制
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>天地图-工具集合</title>
    <script type="text/javascript" src="http://api.tianditu.gov.cn/api?v=4.0&tk=87106642dd50a20c3ef6148a8a901db3"></script>
    <style type="text/css">
        body, html {
            width: 100%;
            height: 100%;
            margin: 0;
            font-family: "微软雅黑";
        }

        #mapDiv {
            height: 400px;
            width: 100%;
        }

        p,input {
            margin-top: 10px;
            margin-left: 5px;
            font-size: 14px;
        }
    </style>
    <script>
        var map, zoom = 12, handler;
        function onLoad() {
            //初始化地图对象
            map = new T.Map("mapDiv");
            //设置显示地图的中心点和级别
            map.centerAndZoom(new T.LngLat(116.40969, 39.94940), zoom);
            //允许鼠标双击放大地图
            map.enableScrollWheelZoom();
            
            var config = {
                showLabel: true,
                color: "blue", weight: 3, opacity: 0.5, fillColor: "#FFFFFF", fillOpacity: 0.5
            };
            //创建标注工具对象
            polygonTool = new T.PolygonTool(map, config);
        }

        function openPolygonTool() {
            if (handler) handler.close();
            handler = new T.PolygonTool(map);
            handler.open();
        }

		/*
		   画线完成以后注册点击事件
		*/
        function openPolylineTool() {
			var points=[];//存放坐标
			
            if (handler) handler.close();
            handler = new T.PolylineTool(map);
			  handler.open();
			//注册工具画线完成事件
			map.addEventListener('click',function(p){
				 points.push(p.lnglat);  
			})
			
			console.log(points);
          
        }

        function openMarkerTool() {
            if (handler) handler.close();
            handler = new T.MarkTool(map, {follow: true});
            handler.open();
        }

        function openRectangleTool() {
            if (handler) handler.close();
            handler = new T.RectangleTool(map, {follow: true});
            handler.open();
        }
        function openCircleTool() {
            if (handler) handler.close();
            handler = new T.CircleTool(map, {follow: true});
            handler.open();
        }

        function getLayerCount() {
            return map.getOverlays().length;

        }

    </script>
</head>
<body onLoad="onLoad()">
<div id="mapDiv"></div>
<p>本例演示多种覆盖物工具</p>
<div>
    <input type="button" value="点工具" onClick='openMarkerTool() '/>
    <input type="button" value="多边形工具" onClick='openPolygonTool() '/>
    <input type="button" value="线工具" onClick='openPolylineTool() '/>
    <input type="button" value="矩形工具" onClick='openRectangleTool() '/>
    <input type="button" value="画圆工具" onClick='openCircleTool() '/>
    <input type="button" value="获取图层个数" onClick='alert(getLayerCount()) '/>
    <input type="button" value="清除所有" onClick='map.clearOverLays()'/>
</div>
</body>
</html>

这里我使用的是画线,保存线的点集,定义一个存储点集的数组

/*
   画线完成以后注册点击事件
*/
function openPolylineTool() {
	var points=[];//存放坐标
	
    if (handler) handler.close();
    handler = new T.PolylineTool(map);
	  handler.open();
	//注册工具画线完成事件
	map.addEventListener('click',function(p){
		 points.push(p.lnglat);  
	})
	
	console.log(points);
  
}

每次执行鼠标点击时都会将当前的坐标存入数组。
3. 保存点到本地或者数据库
将获取的数组全部存储到本地库,或者缓存中,因为我这是做demo,只是将点集打印到控制台了,然后将数据存到json文件了

   [{
		"line1": "线路1",
		"LonLat": [{
			"lat": "39.93133",
			"lng": "116.36684"
		}, {
			"lat": "39.93205",
			"lng": "116.39071"
		}, {
			"lat": "39.93205",
			"lng": "116.39946"
		}, {
			"lat": "39.93133",
			"lng": "116.39989"
		}, {
			"lat": "39.92382",
			"lng": "116.40032"
		}],
		"color": "#CD6600"
	},
	{
		"line2": "线路2",
		"LonLat": [{
			"lat": "39.94798",
			"lng": "116.41105"
		}, {
			"lat": "39.94831",
			"lng": "116.42547"
		}, {
			"lat": "39.94673",
			"lng": "116.42753"
		}, {
			"lat": "39.93199",
			"lng": "116.42753"
		}, {
			"lat": "39.93195",
			"lng": "116.42778"
		}, {
			"lat": "39.92303",
			"lng": "116.42826"
		}, {
			"lat": "39.92308",
			"lng": "116.42008"
		}],
		"color": "#EE2C2C"
	},
	{
		"line3": "线路3",
		"LonLat": [{
			"lat": "39.94771",
			"lng": "116.38753"
		}, {
			"lat": "39.93955",
			"lng": "116.38779"
		}, {
			"lat": "39.93863",
			"lng": "116.38993"
		}, {
			"lat": "39.93172",
			"lng": "116.39006"
		}],
		"color": "#66CD00"
	},
	{
		"line4": "线路4",
		"LonLat": [{
				"lat": "39.92294",
				"lng": "116.39847"
			}, {
				"lat": "39.92307",
				"lng": "116.41997"
			}, {
				"lat": "39.92754",
				"lng": "116.41989"
			}, {
				"lat": "39.9286",
				"lng": "116.41963"
			}, {
				"lat": "39.93064",
				"lng": "116.41967"
			}, {
				"lat": "39.94837",
				"lng": "116.41924"
			}

		],
		"color": "#F4A460"
	}
]
  1. 查询覆盖物
    根据本地存储的点集进行绘制覆盖物,我使用的是json文件存储的数据,因此通过调用json路径获取经纬度信息。
//创建线性覆盖物
	function CreateLine() {
		var points1 = []; //多边形点
		var points2 = []; //多边形点
		var points3 = []; //多边形点
		var points4 = []; //多边形点
		$.getJSON('../data/points.json', function(data) {
			//	console.log(data);
			for (var i = 0; i < data[0].LonLat.length; i++) {
				points1.push(new T.LngLat(data[0].LonLat[i].lng, data[0].LonLat[i].lat));
			}
			for (var i = 0; i < data[1].LonLat.length; i++) {
				points2.push(new T.LngLat(data[1].LonLat[i].lng, data[1].LonLat[i].lat));
			}
			for (var i = 0; i < data[2].LonLat.length; i++) {
				points3.push(new T.LngLat(data[2].LonLat[i].lng, data[2].LonLat[i].lat));
			}
			for (var i = 0; i < data[3].LonLat.length; i++) {
				points4.push(new T.LngLat(data[3].LonLat[i].lng, data[3].LonLat[i].lat));
			}

			//创建面对象
			var polygon1 = new T.Polyline(points1, {
				weight: 4,
				color: data[0].color,
				opacity: "1"
			});

			//向地图上添加面
			map.addOverLay(polygon1);

		});
	}

到此为止完成了基于天地图的覆盖物存储到绘制的实现,这个功能在实际中有很好的应用价值,例如绘制电子围栏、工作区域,活动范围等功能

效果图
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
清除百度地图上指定的覆盖物可以通过以下步骤实现: 1. 首先,确保已经加载了百度地图API,并创建了地图实例。 2. 在地图上绘制了覆盖物后,为了清除指定的覆盖物,需要为每个覆盖物添加一个唯一的标识符(通常是一个字符串)。 3. 在需要清除指定覆盖物的时候,通过调用API提供的方法,查找并获取需要清除的覆盖物对象。 4. 调用获取到的覆盖物对象的`remove()`方法,将其从地图中移除。 以下是一个示例代码,演示了如何清除指定的覆盖物。 ```javascript // 创建地图实例 var map = new BMap.Map("map-container"); // 添加覆盖物,并为其设置唯一标识符 var marker1 = new BMap.Marker(new BMap.Point(116.404, 39.915)); marker1.myId = "marker1"; map.addOverlay(marker1); var marker2 = new BMap.Marker(new BMap.Point(116.417, 39.909)); marker2.myId = "marker2"; map.addOverlay(marker2); // 清除指定的覆盖物 function removeOverlayById(id) { var overlays = map.getOverlays(); for (var i = 0; i < overlays.length; i++) { if (overlays[i].myId === id) { map.removeOverlay(overlays[i]); break; } } } // 调用清除覆盖物方法 removeOverlayById("marker1"); ``` 以上代码示例中,我们通过为每个覆盖物对象设置了`myId`属性,代表它们的唯一标识符。然后,通过遍历地图上所有覆盖物对象的方式,找到需要清除的覆盖物对象,并调用地图实例的`removeOverlay()`方法进行清除。 希望以上回答对您有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值