From b6b10b7d89092147ebd5ae1d3cc318205206ab8a Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Fri, 18 Dec 2020 14:48:03 +0800 Subject: [PATCH] 走航车轨迹区域数据显示 --- src/main/java/com/moral/service/impl/HistoryServiceImpl.java | 14 src/main/webapp/img/sensorLevel.png | 0 src/main/webapp/view/cartrajectoryNew.jsp | 566 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/moral/controller/ScreenController.java | 44 ++++ 4 files changed, 616 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 5521008..e34c786 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -1633,6 +1633,50 @@ } } + @GetMapping("/carTrajectoryNew") + @ApiOperation(value = "���������������������", notes = "���������������������") + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "mac", value = "������mac������������p5dnd7a0392081���", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "startTime", value = "������������(���������2020-03-19-14)", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "endTime", value = "������������(���������2020-03-19-17)", required = true, paramType = "query", dataType = "String") + }) + public ModelAndView carTrajectoryNew(ModelAndView model, HttpServletRequest request) throws Exception { + Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null); + String st = parameters.get("startTime").toString(); + String startYearAndDay = st.substring(0, st.lastIndexOf("-")); + String startHour = st.substring(st.lastIndexOf("-") + 1); + String startTime = startYearAndDay + " " + startHour + ":00:00"; + String et = parameters.get("endTime").toString(); + String endYearAndDay = et.substring(0, st.lastIndexOf("-")); + String endHour = et.substring(et.lastIndexOf("-") + 1); + String endTime = endYearAndDay + " " + endHour + ":00:00"; + parameters.put("startTime", startTime); + parameters.put("endTime", endTime); + String mac = parameters.get("mac").toString(); + if (mac != null && mac.length() != 0) { + List<List<Map<String, Object>>> sensorData = historyService.getCarSensorData(parameters); + Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters); + List<Map<String, Object>> sensorList = new ArrayList<>(); + if (sensorData.size() == 3) { + sensorList = sensorData.get(0); + } + JSONObject params = new JSONObject(); + params.put("sensorInfo", sensorList); + params.put("sensorsMap", sensorsMap); + String paramsJson = params.toJSONString(); + model.addObject("carTrajectoryParams", paramsJson); + model.setViewName("cartrajectoryNew"); + return model; + } else { + StringBuilder msg = new StringBuilder(); + msg.append(" param[0] mac:"); + msg.append(mac); + log.warn(msg); + model.setViewName("403"); + return model; + } + } + @GetMapping("/trajectoryDataShow") @ApiOperation(value = "���������������", notes = "���������������") @ApiImplicitParams(value = { diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java index 08137c7..498bcec 100644 --- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java +++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java @@ -540,8 +540,8 @@ String startTime = parameters.get("startTime").toString(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime startTimeLocalDateTime = LocalDateTime.parse(startTime, dateTimeFormatter); - LocalDateTime today = LocalDateTime.now().truncatedTo(ChronoUnit.DAYS); - LocalDateTime startTimeDay = startTimeLocalDateTime.truncatedTo(ChronoUnit.DAYS); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); + int format = Integer.parseInt(sdf.format(new Date())); int year = startTimeLocalDateTime.getYear(); int month = startTimeLocalDateTime.getMonthValue(); String monthStr = month < 10 ? ("0" + month) : month + ""; @@ -553,17 +553,15 @@ } parameters.put("sensorKeys", sensorKeys); List<Map<String, Object>> listMap = null; - /*if (today.compareTo(startTimeDay) == 0) { - listMap = historyMapper.listGetSensorData(parameters); - }*/ - //if (CollectionUtils.isEmpty(listMap)) { listMap = historyMapper.getCarSensorData(parameters); if (CollectionUtils.isEmpty(listMap)) { if (year <= 2019) { listMap = historyMinutelyMapper.getSensorData(parameters); } else { - parameters.put("yearAndMonth", yearAndMonth); - listMap = historyMinutelyMapper.getSensorData2020(parameters); + if (Integer.parseInt(yearAndMonth) <= format) { + parameters.put("yearAndMonth", yearAndMonth); + listMap = historyMinutelyMapper.getSensorData2020(parameters); + } } } //} diff --git a/src/main/webapp/img/sensorLevel.png b/src/main/webapp/img/sensorLevel.png new file mode 100644 index 0000000..aedd8c9 --- /dev/null +++ b/src/main/webapp/img/sensorLevel.png Binary files differ diff --git a/src/main/webapp/view/cartrajectoryNew.jsp b/src/main/webapp/view/cartrajectoryNew.jsp new file mode 100644 index 0000000..32798c1 --- /dev/null +++ b/src/main/webapp/view/cartrajectoryNew.jsp @@ -0,0 +1,566 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<!DOCTYPE html> +<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> +</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; + } + + #cpm { + width: 300px; + height: 100px; + position: absolute; + background-color: #ffffff; + display: none; + left: 50%; + top: 50%; + margin-left: -150px; + margin-top: -50px; + z-index: 11; + color: #000000; + border: 2px solid #FF7F50; + font-size: 28px; + line-height: 100px; + text-align: center; + } + + .BMap_pop > img { + top: 42px !important; + margin-left: -10px; + } + + .BMap_pop div:nth-child(1) div { + display: none; + } + + .BMap_pop div:nth-child(3) { + display: none; + } + + .BMap_pop div:nth-child(5) { + display: none; + } + + .BMap_pop div:nth-child(7) { + display: none; + } + + .BMap_pop div:nth-child(9) { + top: 35px !important; + border-radius: 5px; + } + + #selectSenor { + position: absolute; + z-index: 1; + left: 30px; + top: 20px; + font-size: 20px; + background: lightgrey; + } + + button { + font-size: 15px; + } + + .sensorLevel { + position: absolute; + z-index: 1; + bottom: 20px; + right: 10px; + width: 100px; + height: 200px; + } + +</style> + +<body> +<div class="main_body"> + <div id="selectSenor"> + <input type="radio" value="e1" name="sensor" checked>PM2.5 + <input type="radio" value="e2" name="sensor">PM10 + <input type="radio" value="e17" name="sensor">TVOC + </div> + + <img src="/img/sensorLevel.png" class="sensorLevel"> + <div id="cpm">���������������������</div> + <div id="mapCanvas"></div> <!-- ������������ --> +</div> +</body> +</html> + +<script type="text/javascript"> + var GPS = { + PI: 3.14159265358979324, + x_pi: 3.14159265358979324 * 3000.0 / 180.0, + delta: function (lat, lon) { + var a = 6378245.0; // a: ������������������������������������������������������������������ + var ee = 0.00669342162296594323; // ee: ��������������������� + var dLat = this.transformLat(lon - 105.0, lat - 35.0); + var dLon = this.transformLon(lon - 105.0, lat - 35.0); + var radLat = lat / 180.0 * this.PI; + var magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + var sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * this.PI); + dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI); + return {'lat': dLat, 'lon': dLon}; + }, + + //WGS-84 to GCJ-02 + gcj_encrypt: function (wgsLat, wgsLon) { + if (this.outOfChina(wgsLat, wgsLon)) + return {'lat': wgsLat, 'lon': wgsLon}; + + var d = this.delta(wgsLat, wgsLon); + return {'lat': wgsLat + d.lat, 'lon': wgsLon + d.lon}; + }, + //GCJ-02 to WGS-84 + gcj_decrypt: function (gcjLat, gcjLon) { + if (this.outOfChina(gcjLat, gcjLon)) + return {'lat': gcjLat, 'lon': gcjLon}; + + var d = this.delta(gcjLat, gcjLon); + return {'lat': gcjLat - d.lat, 'lon': gcjLon - d.lon}; + }, + //GCJ-02 to WGS-84 exactly + gcj_decrypt_exact: function (gcjLat, gcjLon) { + var initDelta = 0.01; + var threshold = 0.000000001; + var dLat = initDelta, dLon = initDelta; + var mLat = gcjLat - dLat, mLon = gcjLon - dLon; + var pLat = gcjLat + dLat, pLon = gcjLon + dLon; + var wgsLat, wgsLon, i = 0; + while (1) { + wgsLat = (mLat + pLat) / 2; + wgsLon = (mLon + pLon) / 2; + var tmp = this.gcj_encrypt(wgsLat, wgsLon) + dLat = tmp.lat - gcjLat; + dLon = tmp.lon - gcjLon; + if ((Math.abs(dLat) < threshold) && (Math.abs(dLon) < threshold)) + break; + + if (dLat > 0) pLat = wgsLat; else mLat = wgsLat; + if (dLon > 0) pLon = wgsLon; else mLon = wgsLon; + + if (++i > 10000) break; + } + return {'lat': wgsLat, 'lon': wgsLon}; + }, + //GCJ-02 to BD-09 + bd_encrypt: function (gcjLat, gcjLon) { + var x = gcjLon, y = gcjLat; + var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi); + var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi); + bdLon = z * Math.cos(theta) + 0.0065; + bdLat = z * Math.sin(theta) + 0.006; + return {'lat': bdLat, 'lon': bdLon}; + }, + //BD-09 to GCJ-02 + bd_decrypt: function (bdLat, bdLon) { + var x = bdLon - 0.0065, y = bdLat - 0.006; + var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi); + var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi); + var gcjLon = z * Math.cos(theta); + var gcjLat = z * Math.sin(theta); + return {'lat': gcjLat, 'lon': gcjLon}; + }, + //WGS-84 to Web mercator + //mercatorLat -> y mercatorLon -> x + mercator_encrypt: function (wgsLat, wgsLon) { + var x = wgsLon * 20037508.34 / 180.; + var y = Math.log(Math.tan((90. + wgsLat) * this.PI / 360.)) / (this.PI / 180.); + y = y * 20037508.34 / 180.; + return {'lat': y, 'lon': x}; + }, + // Web mercator to WGS-84 + // mercatorLat -> y mercatorLon -> x + mercator_decrypt: function (mercatorLat, mercatorLon) { + var x = mercatorLon / 20037508.34 * 180.; + var y = mercatorLat / 20037508.34 * 180.; + y = 180 / this.PI * (2 * Math.atan(Math.exp(y * this.PI / 180.)) - this.PI / 2); + return {'lat': y, 'lon': x}; + }, + // two point's distance + distance: function (latA, lonA, latB, lonB) { + var earthR = 6371000.; + var x = Math.cos(latA * this.PI / 180.) * Math.cos(latB * this.PI / 180.) * Math.cos((lonA - lonB) * this.PI / 180); + var y = Math.sin(latA * this.PI / 180.) * Math.sin(latB * this.PI / 180.); + var s = x + y; + if (s > 1) s = 1; + if (s < -1) s = -1; + var alpha = Math.acos(s); + var distance = alpha * earthR; + return distance; + }, + outOfChina: function (lat, lon) { + if (lon < 72.004 || lon > 137.8347) + return true; + if (lat < 0.8293 || lat > 55.8271) + return true; + return false; + }, + transformLat: function (x, y) { + var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0; + return ret; + }, + transformLon: function (x, y) { + var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x)); + ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0; + return ret; + } + }; + + var params = ${requestScope.carTrajectoryParams}; + var sensorInfo = params["sensorInfo"]; + var map = new BMap.Map("mapCanvas", {enableMapClick: false}); + var mapStyle = { + features: ["road", "building", "water", "land"], // ������������������poi + style: "normal" // ������������������������������ + }; + map.setMapStyle(mapStyle); + + //������������ + var mapType = new BMap.MapTypeControl( + { + mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP], + anchor: BMAP_ANCHOR_TOP_RIGHT + } + ); + map.addControl(mapType); + map.setMapType(BMAP_SATELLITE_MAP);//������������������������������������������ + var navigation = new BMap.NavigationControl({ + anchor: BMAP_ANCHOR_BOTTOM_LEFT, + type: BMAP_NAVIGATION_CONTROL_LARGE + }); + map.addControl(navigation);//������������ + map.enableScrollWheelZoom(true); // ������������������������ + map.addControl(new BMap.ScaleControl()); + if (sensorInfo.length === 0) { + showNoFlightTrajectory(); + } + var trackPoints = [];//��������������������������������������������������������� + var points = []; + //������������ + var size = 50; + var distance = size / 2 / Math.sin(1 * Math.PI / 4); + //������������������ + var sensor = $("input[type='radio']:checked").val(); + for (var i = 0; i < sensorInfo.length; i++) { + if (typeof (sensorInfo[i]["e76"]) == "undefined") { + sensorInfo.splice(i, 1); + i--; + } else { + var lon = parseFloat(sensorInfo[i].e76.substr(0, sensorInfo[i].e76.length - 1)); + var lat = parseFloat(sensorInfo[i].e77.substr(0, sensorInfo[i].e77.length - 1)); + if (lon > 150 || lon < 70 || lat <= 20 || lat > 60) { + sensorInfo.splice(i, 1); + i--; + } + if (i > 1) { + if (sensorInfo[i]["e76"] === sensorInfo[i - 1]["e76"] && sensorInfo[i]["e77"] === sensorInfo[i - 1]["e77"]) { + sensorInfo.splice(i, 1); + i--; + } + } + } + } + + points = getShowPoints(); + + map.centerAndZoom(points, 13);// ������������������������������������ + map.setViewport(points);// ������������������������������������������������������ + drawPolygon(sensor);//��������� + drawLine();//������������ + drawStartAndEnd();//��������������������� + + //������������������ + function showNoFlightTrajectory() { + var point = new BMap.Point(120.987287, 31.391562); + map.centerAndZoom(point, 17); + setTimeout(function () { + document.getElementById("cpm").style.display = 'block'; + }, 250); + } + + //���������������������������������������������distance������ + function getPoint(angle, lng, lat, distance) { + var EARTH_RADIUS = 6378137; + //��������������������������������������� + var ra = distance / EARTH_RADIUS; + // ���������radian��������������������������� + angle = angle / 180 * Math.PI; + lng = lng / 180 * Math.PI; + lat = lat / 180 * Math.PI; + lng = lng + Math.atan2(Math.sin(angle) * Math.sin(ra) * Math.cos(lat), Math.cos(ra) - Math.sin(lat) * Math.sin(lat)); + lat = Math.asin(Math.sin(lat) * Math.cos(ra) + Math.cos(lat) * Math.sin(ra) * Math.cos(angle)); + // ���������������10��������������� + lng = lng * 180 / Math.PI; + lat = lat * 180 / Math.PI; + return new BMap.Point(lng, lat); + } + + //��������������������� + function getColor(senosor, data) { + var color; + switch (sensor) { + case 'e1': + if (data < 35) { + color = '#0FB820'; + } else if (data < 75) { + color = '#B8B002'; + } else if (data < 115) { + color = '#E55F03'; + } else if (data < 150) { + color = '#C9031B'; + } else if (data < 250) { + color = '#C00160'; + } else { + color = '#BC0238'; + } + break; + case 'e2': + if (data < 50) { + color = '#0FB820'; + } else if (data < 150) { + color = '#B8B002'; + } else if (data < 250) { + color = '#E55F03'; + } else if (data < 350) { + color = '#C9031B'; + } else if (data < 420) { + color = '#C00160'; + } else { + color = '#BC0238'; + } + break; + case 'e17': + if (data < 1.5) { + color = '#0FB820'; + } else if (data < 3) { + color = '#B8B002'; + } else if (data < 5) { + color = '#E55F03'; + } else { + color = '#BC0238'; + } + break; + default: + color = '#0FB820'; + break; + } + return color; + } + + //��������������������������������� + function drawPolygon(sensor) { + $.each(points, function (item, point) { + var sw = getPoint(225, point.lng, point.lat, distance); + var ne = getPoint(45, point.lng, point.lat, distance); + var data = point[sensor]; + //������������������������������������ + color = getColor(sensor, data); + var polygon = new BMap.Polygon([ + new BMap.Point(sw.lng, sw.lat),//��������� + new BMap.Point(ne.lng, sw.lat),//��������� + new BMap.Point(ne.lng, ne.lat),//��������� + new BMap.Point(sw.lng, ne.lat)//��������� + ], {strokeWeight: 0.5, strokeOpacity: 0.5, fillColor: color}); + map.addOverlay(polygon); + //���������������label������ + setLabelStyle(data, point); + }); + } + + //��������������������� + function drawLine() { + //������������������������ + var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, { + scale: 0.6,//������������������ + strokeColor: 'white',//������������������������������������ + strokeWeight: 3,//������������ + }); + var icons = new BMap.IconSequence(sy, '100%', '4%', false);//���������true������������������������������ + //������������������������ + var trackLine = new BMap.Polyline(points, { + strokeColor: "red",//������������ + strokeWeight: 4,//������ + strokeOpacity: 0.3,//���������������������������������0 - 1 + enableEditing: false,//���������������������������������false + enableClicking: false,//������������������������������������true + icons: [icons], + }); + map.addOverlay(trackLine); + } + + //��������������������� + function drawStartAndEnd() { + var startIcon = new BMap.Icon("/img/start.png", new BMap.Size(48, 48)); + var startMark = new BMap.Marker(points[0], {icon: startIcon, offset: new BMap.Size(0, -20)}); + map.addOverlay(startMark); + var endIcon = new BMap.Icon("/img/end.png", new BMap.Size(48, 48)); + var endMark = new BMap.Marker(points[points.length - 1], {icon: endIcon, offset: new BMap.Size(0, -20)}); + map.addOverlay(endMark); + } + + //������������>=50m���������points + function getShowPoints() { + points.push(convertPoint(0)); + for (var i = 1; i < sensorInfo.length; i++) { + var flag = true; + var point1 = convertPoint(i); + var sw1 = getPoint(225, point1.lng, point1.lat, distance); + var ne1 = getPoint(45, point1.lng, point1.lat, distance); + for (var j = 0; j < points.length; j++) { + var point2 = points[j]; + var dis = parseInt(map.getDistance(point1, point2)); + if (dis < size) { + flag = false; + } + } + if (flag) { + points.push(point1); + } + } + return points; + } + + //point���������label������ + function setLabelStyle(content, point) { + var label = new BMap.Label("<span class='my-maptip'>" + content + "<br /><span>",//���lable������������ + { + offset: new BMap.Size(-8, -10),//label������������������������label������������������������ + position: point + } + );//label��������� + + var offsetSize = new BMap.Size(0, 0); + var size = "10px"; + if (map.getZoom() <= 16) { + size = "0px"; + } + var labelStyle = { + border: "0", + fontSize: size, + height: "20px", + lineHeight: "20px", + fontFamily: "������������", + backgroundColor: "0.05", + fontWeight: "bold" + }; + label.setStyle(labelStyle); + map.addOverlay(label); + } + + //������������������������ + map.addEventListener("zoomend", function () { + //��������������������������������������� + var zoom = this.getZoom(); + $('span.my-maptip').parent()[zoom <= 16 ? 'hide' : 'show'](); + $('span.my-maptip').parent().css("font-size", 30 - zoom); + }); + + $("#selectSenor").change(function () { + map.clearOverlays() + sensor = $("input[type='radio']:checked").val(); + drawPolygon(sensor); + drawLine(); + drawStartAndEnd(); + }) + + //������������������ + function convertPoint(index) { + var value = sensorInfo[index]; + if (typeof (value.e76) == "undefined") { + showNoFlightTrajectory(); + } + var lon = parseFloat(value.e76.substr(0, value.e76.length - 1)); + var lat = parseFloat(value.e77.substr(0, value.e77.length - 1)); + var m = GPS.gcj_encrypt(lat, lon).lon; + var n = GPS.gcj_encrypt(lat, lon).lat; + lon = GPS.bd_encrypt(n, m).lon; + lat = GPS.bd_encrypt(n, m).lat; + var point = new BMap.Point(lon, lat); + point['e1'] = parseInt(sensorInfo[index]['e1']); + point['e2'] = parseInt(sensorInfo[index]['e2']); + point['e17'] = parseFloat(sensorInfo[index]['e17']).toFixed(2); + return point; + } + + //��������������������� + function getAngle(n, next) { + var ret + var w1 = n.lat / 180 * Math.PI + var j1 = n.lng / 180 * Math.PI + + var w2 = next.lat / 180 * Math.PI + var j2 = next.lng / 180 * Math.PI + + ret = 4 * Math.pow(Math.sin((w1 - w2) / 2), 2) - Math.pow(Math.sin((j1 - j2) / 2) * (Math.cos(w1) - Math.cos(w2)), 2); + ret = Math.sqrt(ret); + + // var temp = Math.sin(Math.abs(j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2)); + var temp = Math.sin((j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2)); + ret = ret / temp; + + ret = Math.atan(ret) / Math.PI * 180; + ret += 90; + + // ������������������������if..else���������������������������������������������,������������ret������ + if (j1 - j2 < 0) { + // console.log('j1<j2') + if (w1 - w2 < 0) { + // console.log('w1<w2') + ret; + } else { + // console.log('w1>w2') + ret = -ret + 180; + } + } else { + // console.log('j1>j2') + if (w1 - w2 < 0) { + // console.log('w1<w2') + ret = 180 + ret; + } else { + // console.log('w1>w2') + ret = -ret; + } + } + return ret; + } +</script> \ No newline at end of file -- Gitblit v1.8.0