欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

天地图

程序员文章站 2022-07-02 08:55:07
...
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8" />
	<title>加载天地图标注</title>
	<script type="text/javascript" src="http://api.tianditu.com/js/maps.js"></script>
<script src="../practice/jquery-1.11.2.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<style type="text/css">
	#mapDiv{
		height:600px;
		margin: 10px;
		border: 1px solid #ccc;
	}
	.opt_station_hover{
		background: rgb(77,103,130);
		font-size: 12px;
		width: 150px;
		height: 47px;
		border-radius: 5px;
	}
	.opt_station_hover_ul{
		list-style: none;
		margin: 0;
		padding: 0;
		line-height: 23px;
		text-indent: 4px;
		color: white;
		position: relative;
	}
	.opt_station_hover_ul li{
		list-style: none;
		margin: 0;
		padding: 0;
		overflow: hidden;
		height: 23px;
	}
	.opt_station_hover img{
		position: absolute;
		left: 50%;
		margin-left: -5px;
	}
	.opt_li_left{
		width: 65px;
		display: bolck;
		float: left;
		text-align: right;
	}

</style>
<body>

	<div id="mapDiv"></div>

	<script type="text/javascript">
		//地址         图片 三张   数据
		var map;
		var timer;//悬停的计时器。
		var lnglats;//点数据。
        var customerWinInfo;//鼠标移动上去显示的信息窗口
        var markers = [];
        var xian=[];

		 var lnglats = [
		 {"B":"23.1","L":"113.3","PName":"1111"},
		 {"B":"23.2","L":"113.4","PName":"2222"},
		{"B":"22.9","L":"113.1","PName":"3333"},
		 {"B":"23.7","L":"113.8","PName":"第四个点"},
		{"B":"23.8","L":"113.5","PName":"第五个点"},
		 {"B":"23.3","L":"113.2","PName":"第六个点"},
		{"B":"23.1","L":"113.7","PName":"7777"},
		{"B":"23.5","L":"113.3","PName":"8888"}];
		//这是页面需要的数据。实际应用中常用ajax获取。坐标点状态。点的类型。点的名字。


		function loadData(){
			$.ajaxSettings.async = false;
			$.getJSON('php/loadIcon.php','', function(json, textStatus) {
				lnglats = json;
			});
			$.ajaxSettings.async = true;
		}

		//加载基本地图和导航
		function loadMap(){
			try {
				map = new TMap("mapDiv"); //初始化地图对象
             	map.centerAndZoom(new TLngLat(113.3893, 23.04954), 10);//设置显示地图的中心点和级别
             	map.enableHandleMouseScroll(); //允许鼠标双击放大地图   
             } catch(err) {
             	alert('天地图加载不成功,请稍候再试!你可以先使用其他功能!');
             }
         }


	  	//鼠标从图标移动出去的时候执行
	  	function onClose() {
	  		clearTimeout(timer);
	  		map.removeOverLay(customerWinInfo);
	  	}


		//把标注点名字画到地图上
		function loadText(){
			var label =[];//标点名字图。
			if (lnglats.length != 0) {
				for (var i = 0; i < lnglats.length; i = i + 1) {
					var config = {
						text:lnglats[i].PName,
						offset:new TPixel(0,10),
						position:new TLngLat(lnglats[i].L,lnglats[i].B)
					};
					xian.push(new TLngLat(lnglats[i].L,lnglats[i].B));
        			label[i]=new TLabel();//创建地图文本对象
        			label[i].setAnchorPer([0.5,0]);//偏移量
        			label[i].setBorderLine (0);
        			map.addOverLay(label[i]);
        			$('.stationByNum').parent().css({
        				"padding":"0"
        			});
        		}
        	}
        }

        //鼠标移动到移动站上面的时候执行
        function onMouseOver(m) {
        	var html = [];
        	var status ='';
        	//status = lnglats[m.id].Status == 1?'在线':'不在线';
        	html.push("	<div class='opt_station_hover' id='device_online'>");
        	html.push("		<ul class='opt_station_hover_ul'>");
        	html.push("			<li><span class='opt_li_left'>名称:</span>"+lnglats[m.id].PName +"</li>");
        	//html.push("			<li><span class='opt_li_left'>在线状态:</span>"+status +"</li>");
        	//html.push("			<img src='A.png'>");
        	html.push("		</ul>");
        	html.push("	</div>");
        	var config = {
        		offset:new TPixel(30,-60),
        		position:m.getLngLat()
        	};
        	customerWinInfo=new TLabel(config);
        	customerWinInfo.setLabel(html.join(''));
        	customerWinInfo.setAnchorPer([0.5,0]);//偏移量
        	customerWinInfo.getObject().style.zIndex = 10000;
        	map.addOverLay(customerWinInfo);
        	$('.opt_station_hover').parent().css({
        		"border":"none",
        		"padding":"0",
        		"background-color":""
        	});
        }

		//绘制多个marker。
		function drawTMakers(lnglats){
			markers.length = 0;
			if (lnglats.length != 0) {
				var     iconurl ='A.png';
				var     iconurl1 = 'A.png';
		       icon = new TIcon(iconurl, new TSize(20, 20), {anchor: new TPixel(12, 12)});//两种图标,根据status判断用哪一种。
		       icon1 = new TIcon(iconurl1, new TSize(20, 20), {anchor: new TPixel(12, 12)});

		       for (var i = 0; i < lnglats.length; i = i + 1) {
		       	if (i == 1) {//这个地方照张图片起点和终点
		       		markers[i]  = drawTMaker(lnglats[i],icon);
		       	} else {
		       		markers[i]  = drawTMaker(lnglats[i],icon1);
		       	}
		       	markers[i].id=i;
		       }
		   }
		}

		//往地图上添加一个marker。传入参数坐标信息lnglat。传入参数图标信息。
		function drawTMaker(lnglat,icon){
			var marker =  new TMarker(new TLngLat(lnglat.L, lnglat.B), {icon: icon});
			map.addOverLay(marker);
			return marker;
		}

         

		//加载mouseover与mouseout事件。 
		//iconMakers是已添加的标注对象。
		//lnglats是每个点的数据对象。通常iconMakers的length等于lnglats的length。
		//eventFn是传入 鼠标移动上去要调用哪个函数。默认是onMouseOver。主要是用于鼠标移动到点上可以显示出不同样式的窗口。
		function addTEvent(iconMakers,lnglats,eventFn){
			var arrLen = lnglats.length;
			var i,eventFn = eventFn || onMouseOver;
			for (var i = 0;  i<arrLen; i++) {
				iconMakers[i].id=i;
				// 绑定事件
				(function() {
					var m = iconMakers[i];
					TEvent.addListener(m, "mouseover",function() {
			               timer = setTimeout(mover, 500);//setTimeout不能带参数,所以用下面的方法处理。
			               function mover() {
			               	eventFn(m);
			               }
			           });
					TEvent.addListener(m, "mouseout", onClose);
				})();
			}
		}
 function huaXian()
 {
 	var line = new TPolyline(xian,{strokeColor:"red", strokeWeight:5, strokeOpacity:1});
	        //向地图上添加线
	    map.addOverLay(line); 
 }
		loadData();//加载数据
		loadMap();//加载地图
		drawTMakers(lnglats);//绘制标注。
		addTEvent(markers,lnglats);//给标注添加事件。
		loadText();//给标注添加名字
		huaXian();
	</script>
</body>
</html>