|
@@ -1,5 +1,6 @@
|
|
|
import BaseWidget = require('core/BaseWidget.class');
|
|
|
-
|
|
|
+import geometryEngine = require("esri/geometry/geometryEngine");
|
|
|
+import SpatialReference = require("esri/SpatialReference");
|
|
|
import Map = require("esri/map");
|
|
|
import Point = require('esri/geometry/Point');
|
|
|
import GraphicsLayer = require("esri/layers/GraphicsLayer");
|
|
@@ -260,57 +261,125 @@ class VehicleHistoryMonitor extends BaseWidget {
|
|
|
}.bind(this));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- setAngelSymbol(linePath) {
|
|
|
- for (let i = 0; i < linePath.length - 2; i++) {
|
|
|
- let point1 = { x: linePath[i][0], y: linePath[i][1] };
|
|
|
- let point2 = { x: linePath[i + 1][0], y: linePath[i + 1][1] };
|
|
|
- let num = 100000000
|
|
|
- let a = 0;
|
|
|
- let angle=0;
|
|
|
- let draw=true;
|
|
|
- if (point1.x < point2.x && point1.y < point2.y) {
|
|
|
- a = (point2.y * num - point1.y * num) / (point2.x * num - point1.x * num);
|
|
|
- angle = 360 - Math.atan(a) / (2 * Math.PI / 360);
|
|
|
- } else if (point1.x > point2.x && point1.y < point2.y) {
|
|
|
- a = (point2.y * num - point1.y * num) / (point1.x * num - point2.x * num);
|
|
|
- angle = Math.atan(a) / (2 * Math.PI / 360);
|
|
|
- angle = 180+angle;
|
|
|
- } else if (point1.x > point2.x && point1.y > point2.y) {
|
|
|
- a = (point1.y * num - point2.y * num) / (point1.x * num - point2.x * num);
|
|
|
- angle = Math.atan(a) / (2 * Math.PI / 360);
|
|
|
- angle = 180-angle;
|
|
|
- } else if (point1.x < point2.x && point1.y > point2.y) {
|
|
|
- a = (point1.y * num - point2.y * num) / (point2.x * num - point1.x * num);
|
|
|
- angle = Math.atan(a) / (2 * Math.PI / 360);
|
|
|
- angle = angle;
|
|
|
- }else if(point1.x==point2.x){
|
|
|
- if(point1.y<point2.y){
|
|
|
- angle=270
|
|
|
- }else if(point1.y>point2.y){
|
|
|
- angle=90
|
|
|
- }else{
|
|
|
- draw=false;
|
|
|
- }
|
|
|
- }else if(point1.y==point2.y){
|
|
|
- if(point1.x<point2.x){
|
|
|
- angle=0
|
|
|
- }else if(point1.x>point2.x){
|
|
|
- angle=180
|
|
|
- }else{
|
|
|
- draw=false;
|
|
|
+
|
|
|
+ setAngelSymbol(Paths) {
|
|
|
+ Paths.forEach(linePath => {
|
|
|
+ let previousPoint = null;
|
|
|
+ for (let i = 0; i < linePath.length - 2; i++) {
|
|
|
+ let point1 = { x: linePath[i][0], y: linePath[i][1] };
|
|
|
+ let point2 = { x: linePath[i + 1][0], y: linePath[i + 1][1] };
|
|
|
+
|
|
|
+ let num = 100000000
|
|
|
+ let a = 0;
|
|
|
+ let angle = 0;
|
|
|
+ let draw = true;
|
|
|
+ if (point1.x < point2.x && point1.y < point2.y) {
|
|
|
+ a = (point2.y * num - point1.y * num) / (point2.x * num - point1.x * num);
|
|
|
+ angle = 360 - Math.atan(a) / (2 * Math.PI / 360);
|
|
|
+ } else if (point1.x > point2.x && point1.y < point2.y) {
|
|
|
+ a = (point2.y * num - point1.y * num) / (point1.x * num - point2.x * num);
|
|
|
+ angle = Math.atan(a) / (2 * Math.PI / 360);
|
|
|
+ angle = 180 + angle;
|
|
|
+ } else if (point1.x > point2.x && point1.y > point2.y) {
|
|
|
+ a = (point1.y * num - point2.y * num) / (point1.x * num - point2.x * num);
|
|
|
+ angle = Math.atan(a) / (2 * Math.PI / 360);
|
|
|
+ angle = 180 - angle;
|
|
|
+ } else if (point1.x < point2.x && point1.y > point2.y) {
|
|
|
+ a = (point1.y * num - point2.y * num) / (point2.x * num - point1.x * num);
|
|
|
+ angle = Math.atan(a) / (2 * Math.PI / 360);
|
|
|
+ angle = angle;
|
|
|
+ } else if (point1.x == point2.x) {
|
|
|
+ if (point1.y < point2.y) {
|
|
|
+ angle = 270
|
|
|
+ } else if (point1.y > point2.y) {
|
|
|
+ angle = 90
|
|
|
+ } else {
|
|
|
+ draw = false;
|
|
|
+ }
|
|
|
+ } else if (point1.y == point2.y) {
|
|
|
+ if (point1.x < point2.x) {
|
|
|
+ angle = 0
|
|
|
+ } else if (point1.x > point2.x) {
|
|
|
+ angle = 180
|
|
|
+ } else {
|
|
|
+ draw = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (draw) {
|
|
|
+ let symbol = new PictureMarkerSymbol(this.root + "/" + this.config.anglePicture, 20, 20);
|
|
|
+ symbol.setAngle(angle);
|
|
|
+ let graphic = new Graphic(new Point(point1), symbol);
|
|
|
+ if (!previousPoint) {
|
|
|
+ previousPoint = point1;
|
|
|
+ this.angleGraphic.add(graphic);
|
|
|
+ } else {
|
|
|
+ let measure_p = new Polyline({
|
|
|
+ "paths": [[[previousPoint.x, previousPoint.y], [point1.x, point1.y]]],
|
|
|
+ "spatialReference": this.AppX.runtimeConfig.map.spatialReference
|
|
|
+ });
|
|
|
+ measure_p.spatialReference = new SpatialReference(4326);
|
|
|
+ let length = geometryEngine.geodesicLength(measure_p, 'meters');
|
|
|
+ if (length > this.config.distance) {
|
|
|
+ this.angleGraphic.add(graphic);
|
|
|
+ previousPoint = point1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- if(draw){
|
|
|
- let symbol = new PictureMarkerSymbol(this.root + "/" + this.config.anglePicture, 20, 20);
|
|
|
- symbol.setAngle(angle);
|
|
|
- let graphic = new Graphic(new Point(point1), symbol);
|
|
|
- this.angleGraphic.add(graphic);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
setSymbol() {
|
|
@@ -784,21 +853,38 @@ class VehicleHistoryMonitor extends BaseWidget {
|
|
|
}
|
|
|
|
|
|
addWorkerAllPathToMap(result) {
|
|
|
-
|
|
|
var config = this.config.addWorkerAllPathToMap;
|
|
|
+
|
|
|
var allPathGraphicLayer = <GraphicsLayer>this.map.getLayer(this.preLayerId + "car_his_allPathGraphicLayer");
|
|
|
var path = result.result.records;
|
|
|
- var linePath: Array<any> = [];
|
|
|
|
|
|
var arrowLinePoint: Array<any> = [];
|
|
|
|
|
|
var screenSpace = 1.00000;
|
|
|
var map = this.AppX.runtimeConfig.map;
|
|
|
var space = screenSpace * map.getScale();
|
|
|
+ let paths = [];
|
|
|
+ let pathSingle = [];
|
|
|
+ var linePath: Array<any> = [];
|
|
|
for (var i = 0, length = path.length; i < length; i++) {
|
|
|
var pathPoint = [];
|
|
|
pathPoint.push(path[i].locationLongitude);
|
|
|
pathPoint.push(path[i].locationLatitude);
|
|
|
+ if (pathSingle.length == 0) {
|
|
|
+ pathSingle.push(pathPoint);
|
|
|
+ } else {
|
|
|
+ var beginDate = new Date(path[i - 1].gpstime);
|
|
|
+ var endDate = new Date(path[i].gpstime);
|
|
|
+ var diff = endDate.getTime() - beginDate.getTime();
|
|
|
+ var sec = diff / 1000;
|
|
|
+ if (sec < 50) {
|
|
|
+ pathSingle.push(pathPoint);
|
|
|
+ } else {
|
|
|
+ paths.push(pathSingle.slice());
|
|
|
+ pathSingle = [];
|
|
|
+ pathSingle.push(pathPoint);
|
|
|
+ }
|
|
|
+ }
|
|
|
linePath.push(pathPoint);
|
|
|
|
|
|
if (i != 0 && i % 15 == 0) {
|
|
@@ -849,9 +935,9 @@ class VehicleHistoryMonitor extends BaseWidget {
|
|
|
}
|
|
|
}
|
|
|
this.addArrowToMap_New(allPathGraphicLayer, arrowLinePoint);
|
|
|
- this.setAngelSymbol(linePath);
|
|
|
+ this.setAngelSymbol(paths);
|
|
|
var polyline = new Polyline({
|
|
|
- "paths": [linePath],
|
|
|
+ "paths": paths,
|
|
|
"spatialReference": this.map.spatialReference
|
|
|
});
|
|
|
var lineSymbol = new SimpleLineSymbol({
|
|
@@ -887,6 +973,110 @@ class VehicleHistoryMonitor extends BaseWidget {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
addArrowToMap_New(graphicLayer, arrowPoint) {
|
|
|
var picUrl = this.root + this.config.arrow_new;
|
|
|
for (var mark of arrowPoint) {
|