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