先上效果图
html代码:
<body οnlοad="onLoad()">
<div style="position: absolute; float: left; margin-left: 23%; margin-top: 1%; z-index: 500;">
<input type="button" οnclick="vector()" value="矢 量" />
<input type="button" οnclick="satellite()" value="影 像" />
<input type="button" οnclick="hybrid()" value="混 合" />
</div>
<div id="map" οndblclick="ShowInfoWindow()" style="border: 1px solid black; position: absolute;
width: 81%; height: 95%; margin-left: 19%;">
</div>
<span id="info" style="position: absolute; float: left; border: 2px solid black;
width: 18%;"></span>
<div id="div" style="position: absolute; border: 2px solid black; height: 95%; width: 18%;">
<br />
<p>
<label id="lab">
</label>
<br />
<span id="info2" style="position: relative;"></span>
</p>
</div>
</body>
<script src="JScript/jquery1.7.2.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://api.tianditu.com/js/maps.js"></script>
<script type="text/javascript">
var map, zoom = 18, mapdraw, mapclick;
var polygonTool;
var count = 0, geometry = 0;
var polygonPoints = [];
var polygon;
var bool = 0;
var drag = false;
var infoWin;
function onLoad() {
$(function () {
document.onkeydown = killesc;
})
function killesc() {
polygonTool.open();
$("#info2").text("");
$("#lab").text("");
polygonPoints = [];
drag = false;
}
map = new TMap("map");
map.centerAndZoom(new TLngLat(104.06321, 30.65983), zoom);
map.enableHandleMouseScroll();
TEvent.addListener(map, "mousemove", function (p) {
debugger;
var lnglat = map.fromContainerPixelToLngLat(p);
$("#info").text("当前鼠标坐标:" + lnglat.getLng() + " , " + lnglat.getLat());
//当鼠标移动到上下左右 边缘时 地图自动拖动
if (drag == true) {
var bs = map.getBounds(); //获取可视区域
var bssw = bs.getSouthWest(); //可视区域左下角
var bsne = bs.getNorthEast(); //可视区域右上角
var distancelat = bsne.getLat() - bssw.getLat();
var distancelng = bsne.getLng() - bssw.getLng();
if (lnglat.getLat() > (bsne.getLat() - distancelat / 25)) {
map.panBy(new TSize(0, -100));
}
if (lnglat.getLat() < (bssw.getLat() + distancelat / 25)) {
map.panBy(new TSize(0, 100));
}
if (lnglat.getLng() > (bsne.getLng() - distancelng / 30)) {
map.panBy(new TSize(100, 0));
}
if (lnglat.getLng() < (bssw.getLng() + distancelng / 30)) {
map.panBy(new TSize(-100, 0));
}
}
});
var config = {
strokeColor: "blue", //折线颜色
fillColor: "#FFFFFF", //填充颜色。当参数为空时,折线覆盖物将没有填充效果
strokeWeight: "3px", //折线的宽度,以像素为单位
strokeOpacity: 0.5, //折线的透明度,取值范围0 - 1
fillOpacity: 0.5 //填充的透明度,取值范围0 - 1
};
polygonTool = new TPolygonTool(map, config);
polygonTool.open();
polygonTool.setTips("双击结束,右键移动");
polygonTool.showLabel = false;
mapdraw = TEvent.addListener(polygonTool, "draw", onDrawPolygon);
function onDrawPolygon(bounds, line) {
polygon = new TPolygon(bounds, { strokeColor: "blue", strokeWeight: 3, strokeOpacity: 0.5, fillOpacity: 0.5 });
map.addOverLay(polygon);
TEvent.addListener(polygon, "click", onClickPolygon);
polygonTool.close();
}
//单机多边形,显示自定义的信息窗口
function onClickPolygon() {
map.addOverLay(infoWin);
}
//用mouseup 不用click是因为在拖动的时候也会添加点,所有用mouseup可以确定拖动后鼠标添加点的位置
mapclick = TEvent.addListener(map, "mouseup", function (p) {
//将像素坐标转换成经纬度坐标
if (event.button == 2) {
return;
}
if (bool == 1) {
return;
}
drag = true;
var lnglat = map.fromContainerPixelToLngLat(p);
var lng = lnglat.getLng();
var lat = lnglat.getLat();
if (count != geometry) {
geometry = count;
$("#info2").text("");
polygonPoints = [];
}
polygonPoints.push(new TLngLat(lng, lat));
var val = $("#info2").text();
$("#info2").text(val + "\n" + lng + "," + lat);
$("#lab").text("共" + polygonPoints.length + "点");
});
}
//删除多边形,和左边的text
function ClearOverLay() {
map.clearOverLays();
polygonTool.open();
$("#info2").text("");
$("#lab").text("");
bool = 0;
polygonPoints = [];
}
//显示信息窗口
function ShowInfoWindow() {
var area = map.getArea(polygonPoints) / 100;
var html = [];
html.push('<div id="div" style=" height:40px; width:130px;">');
html.push('<table style=" width:100%;height:100%;">');
html.push('<tbody>');
html.push('<tr><td style=" font-size:14px; font-weight:bold;"><center>面积:</center></td><td style=" font-size:14px;">' + area + ' 亩</td></tr>');
html.push('<tr><td colspan=2><a href="#" style=" margin-top:8px; font-size:12px; float:right;" οnclick="ClearOverLay()">删除</a></td></tr>');
html.push('</tbody>');
html.push('</table>');
html.push('</div>');
var lnglat = polygonPoints[polygonPoints.length - 1];
infoWin = new TInfoWindow(lnglat, new TPixel([0, -34]));
infoWin.setLabel(html.join(' '));
map.addOverLay(infoWin);
//防止InfoWindow被卡住
var top = $("#div").offset().top;
if (top < 0) {
map.panBy(new TSize(0, -50 + top));
}
bool = 1;
drag = false;
}
//下面三个方法是切换底图模式
function satellite() {
map.setMapType(TMAP_SATELLITE_MAP);
}
function vector() {
map.setMapType(TMAP_NORMAL_MAP);
}
function hybrid() {
map.setMapType(TMAP_HYBRID_MAP);
}
</script>