<%@ page contentType="text/html;charset=UTF-8" language="java" %>
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
<%@page isELIgnored="false" %>
|
<%
|
String version ="1.000004";
|
response.setHeader("Cache-Control","no-store");
|
response.setHeader("Pragrma","no-cache");
|
response.setDateHeader("Expires",0);
|
%>
|
<!DOCTYPE html>
|
<head>
|
<meta charset="utf-8" />
|
<title></title>
|
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=rER1sgBIcQxkfNSlm2wmBGZGgEERrooM"></script>
|
<script type="text/javascript" src="/js/jquery.min.js"></script>
|
<script type="text/javascript">
|
if(typeof (JSON) == 'undefined'){
|
$.getScript("js/json2.js");
|
}
|
</script>
|
</head>
|
<style type="text/css">
|
body,
|
html,
|
#mapCanvas{
|
width: 100%;
|
height: 100%;
|
overflow: hidden;
|
margin: 0;
|
z-index: 0;
|
font-size: 14px;
|
font-family: "微软雅黑";
|
}
|
.main_body{
|
border: 0;
|
margin: 0;
|
width: 100%;
|
height: 100%;
|
position: relative;
|
}
|
*{
|
margin:0;
|
padding:0;
|
list-style:none;
|
}
|
.tools_box{
|
position: absolute;
|
height: 120px;
|
width: 400px;
|
right: 1px;
|
top: 20px;
|
z-index: 1;
|
}
|
</style>
|
|
<body>
|
<div class="main_body">
|
<div id="mapCanvas"></div> <!-- 百度地图 -->
|
<!-- 传sensorInfo,regionCode,regionName,monitorPoint,device-->
|
<div id="traceabilityParams" style="display: none;">
|
${requestScope.traceabilityParams}
|
</div>
|
</div>
|
</body>
|
</html>
|
|
<script>
|
var moralMap={};
|
var defaultParam = {
|
minZoom: 12,
|
maxZoom: 20
|
};
|
var mapStyle = {
|
features: ["road", "building", "water", "land"], // 隐藏地图上的poi
|
style: "normal" // 设置地图风格为高端黑
|
};
|
var params = $.parseJSON($("#traceabilityParams").html());
|
moralMap['params'] = params;
|
var sensorInfo=params["sensorInfo"];
|
var regionName=params["regionName"];
|
var longitude=params["device"]["longitude"];
|
var latitude=params["device"]["latitude"];
|
var longitudeSecond=params["deviceSecond"]["longitude"];
|
var latitudeSecond=params["deviceSecond"]["latitude"];
|
var regoinNameNew= regionName.split(" ");
|
var cityName = regoinNameNew.length>1?regoinNameNew[1]:regoinNameNew[0];
|
var map = new BMap.Map("mapCanvas",defaultParam);
|
map.setCurrentCity(cityName);
|
map.setMapStyle(mapStyle);
|
map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
|
var navigation = new BMap.NavigationControl({
|
anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
|
type: BMAP_NAVIGATION_CONTROL_LARGE
|
});
|
map.addControl(navigation); // 增加导航控件
|
var point = new BMap.Point(longitude, latitude);// 设置中心点坐标和地图级别
|
var pointSecond=new BMap.Point(longitudeSecond, latitudeSecond);
|
var distance=parseInt(map.getDistance(point,pointSecond));//两点间距离,单位米
|
map.centerAndZoom(point, 18);
|
var marker = new BMap.Marker(point); // 创建标注
|
map.addOverlay(marker);
|
var polyline = new BMap.Polyline([
|
new BMap.Point(longitude, latitude),
|
new BMap.Point(longitudeSecond, latitudeSecond)
|
],
|
{strokeColor:"blue", strokeWeight:1, strokeOpacity:0.5}
|
);
|
map.addOverlay(polyline);// 画两点间线
|
// 中间画箭头方法
|
function addArrow(polyline,length,angleValue){
|
var linePoint=polyline.getPath();// 线的坐标串
|
var arrowCount=linePoint.length;
|
for(var i =1;i<arrowCount;i++){ // 在拐点处绘制箭头
|
var pixelStart=map.pointToPixel(linePoint[i-1]);
|
var pixelEnd=map.pointToPixel(linePoint[i]);
|
var angle=angleValue;// 箭头和主线的夹角
|
var r=length; // r/Math.sin(angle)代表箭头长度
|
var delta=0; // 主线斜率,垂直时无斜率
|
var param=0; // 代码简洁考虑
|
var pixelTemX,pixelTemY,poMiddleX,poMiddleY;// 临时点坐标
|
var pixelX,pixelY,pixelX1,pixelY1;// 箭头两个点
|
poMiddleX=(pixelEnd.x+pixelStart.x)/2;
|
poMiddleY=(pixelEnd.y+pixelStart.y)/2;
|
if(poMiddleX-pixelStart.x==0){ // 斜率不存在时
|
pixelTemX=poMiddleX;
|
if(poMiddleY>pixelStart.y){
|
pixelTemY=poMiddleY-r;
|
}else{
|
pixelTemY=poMiddleY+r;
|
}
|
// 已知直角三角形两个点坐标及其中一个角,求另外一个点坐标算法
|
pixelX=pixelTemX-r*Math.tan(angle);
|
pixelX1=pixelTemX+r*Math.tan(angle);
|
pixelY=pixelY1=pixelTemY;
|
}else{ // 斜率存在时
|
delta=(poMiddleY-pixelStart.y)/(poMiddleX-pixelStart.x);
|
param=Math.sqrt(delta*delta+1);
|
if((poMiddleX-pixelStart.x)<0){ // 第二、三象限
|
pixelTemX=poMiddleX+ r/param;
|
pixelTemY=poMiddleY+delta*r/param;
|
}else{ // 第一、四象限
|
pixelTemX=poMiddleX- r/param;
|
pixelTemY=poMiddleY-delta*r/param;
|
}
|
// 已知直角三角形两个点坐标及其中一个角,求另外一个点坐标算法
|
pixelX=pixelTemX+ Math.tan(angle)*r*delta/param;
|
pixelY=pixelTemY-Math.tan(angle)*r/param;
|
pixelX1=pixelTemX- Math.tan(angle)*r*delta/param;
|
pixelY1=pixelTemY+Math.tan(angle)*r/param;
|
}
|
var pointArrow=map.pixelToPoint(new BMap.Pixel(pixelX,pixelY));
|
var pointArrow1=map.pixelToPoint(new BMap.Pixel(pixelX1,pixelY1));
|
var pointMiddle=map.pixelToPoint(new BMap.Pixel(poMiddleX,poMiddleY));
|
var Arrow = new BMap.Polyline([pointArrow,pointMiddle,pointArrow1],
|
{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
|
map.addOverlay(Arrow);
|
}
|
};
|
var arrowLength;//两点间箭头长度
|
if(distance<=100){
|
arrowLength=5;
|
}else if(distance>100&&distance<=200){
|
arrowLength=10;
|
}else if(distance>200&&distance<=500){
|
arrowLength=20;
|
}else if(distance>500&&distance<=1000){
|
arrowLength=40;
|
}else if(distance>1000&&distance<=2000){
|
arrowLength=80;
|
}else if(distance>2000&&distance<=3000){
|
arrowLength=120;
|
}else{
|
arrowLength=150;
|
}
|
addArrow(polyline,arrowLength,Math.PI/7);
|
// 设置坐标图标
|
var icon1 = new BMap.Icon("/img/ico00.png",new BMap.Size(50,50));
|
var mark1 = new BMap.Marker(new BMap.Point(longitude,latitude),{icon:icon1});
|
map.addOverlay(mark1);
|
var mark2 = new BMap.Marker(new BMap.Point(longitudeSecond,latitudeSecond),{icon:icon1});
|
map.addOverlay(mark2);
|
|
</script>
|