1. 程式人生 > >天地圖

天地圖

maker lin timer hit 數據 默認 -a off [0

<!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>

天地圖