fleetmap-reports 1.0.389 → 1.0.392

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetmap-reports",
3
- "version": "1.0.389",
3
+ "version": "1.0.392",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -10,6 +10,7 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
+ "@turf/turf": "^6.5.0",
13
14
  "axios": "^0.21.1",
14
15
  "axios-cookiejar-support": "^1.0.1",
15
16
  "docx": "^7.3.0",
package/src/util/utils.js CHANGED
@@ -64,7 +64,7 @@ function convertToFeature(geofence) {
64
64
  }
65
65
 
66
66
  if(geofence.area.startsWith('CIRCLE')) {
67
- const str = geofence.area.substring('CIRCLE(('.length, geofence.area.length - 2)
67
+ const str = geofence.area.substring('CIRCLE ('.length, geofence.area.length - 1)
68
68
  const coord_list = str.split(',')
69
69
  const coord = coord_list[0].trim().split(' ')
70
70
  const point = turf.point([parseFloat(coord[1]), parseFloat(coord[0])])
@@ -73,6 +73,25 @@ function convertToFeature(geofence) {
73
73
  console.log(point)
74
74
  return point
75
75
  }
76
+
77
+ if(geofence.area.startsWith('LINESTRING')) {
78
+ const str = geofence.area.substring('LINESTRING ('.length, geofence.area.length - 1)
79
+ const coord_list = str.split(',')
80
+ const coordinates = coord_list.map(c => {
81
+ const coord = c.trim().split(' ')
82
+ return [parseFloat(coord[1]), parseFloat(coord[0])]
83
+ })
84
+ return {
85
+ "type": "Feature",
86
+ "properties": {
87
+ "geofence": geofence
88
+ },
89
+ "geometry": {
90
+ "type": "LineString",
91
+ "coordinates": coordinates
92
+ }
93
+ }
94
+ }
76
95
  }
77
96
 
78
97
  function getDates(startDate, endDate) {
@@ -9,6 +9,7 @@ const {getUserPartner} = require("fleetmap-partners")
9
9
  const {devicesToProcess} = require("./util/device")
10
10
  const traccarHelper = require("./util/traccar")
11
11
  const turf = require('turf')
12
+ const {pointToLineDistance} = require("@turf/turf");
12
13
 
13
14
  const fileName = 'ZoneReport'
14
15
 
@@ -147,7 +148,6 @@ async function processDevices(from, to, devices, drivers, geofences, data, tracc
147
148
  return devicesResult
148
149
  }
149
150
 
150
-
151
151
  function getInAndOutEvents(devices, route, userData) {
152
152
  const events = []
153
153
  devices.forEach(d => {
@@ -162,22 +162,12 @@ function getInAndOutEvents(devices, route, userData) {
162
162
  if(g.geometry.type === 'Polygon') {
163
163
  if (turf.inside(p, g)) {
164
164
  if (!entryMap.includes(g)) {
165
- events.push({
166
- type: "geofenceEnter",
167
- position: p.properties.position,
168
- geofenceId: g.properties.geofence.id,
169
- deviceId: d.id
170
- })
165
+ events.push(createEvent('geofenceEnter',d.id,p,g))
171
166
  entryMap.push(g)
172
167
  }
173
168
  } else {
174
169
  if (entryMap.includes(g)) {
175
- events.push({
176
- type: "geofenceExit",
177
- position: p.properties.position,
178
- geofenceId: g.properties.geofence.id,
179
- deviceId: d.id
180
- })
170
+ events.push(createEvent('geofenceExit',d.id,p,g))
181
171
  const index = entryMap.indexOf(g)
182
172
  entryMap.splice(index, 1)
183
173
  }
@@ -186,22 +176,26 @@ function getInAndOutEvents(devices, route, userData) {
186
176
  if(g.geometry.type === 'Point') {
187
177
  if (turf.distance(p, g, 'meters') < g.properties.distance) {
188
178
  if (!entryMap.includes(g)) {
189
- events.push({
190
- type: "geofenceEnter",
191
- position: p.properties.position,
192
- geofenceId: g.properties.geofence.id,
193
- deviceId: d.id
194
- })
179
+ events.push(createEvent('geofenceEnter',d.id,p,g))
180
+ entryMap.push(g)
181
+ }
182
+ } else {
183
+ if (entryMap.includes(g)) {
184
+ events.push(createEvent('geofenceExit',d.id,p,g))
185
+ const index = entryMap.indexOf(g)
186
+ entryMap.splice(index, 1)
187
+ }
188
+ }
189
+ }
190
+ if(g.geometry.type === 'LineString') {
191
+ if (pointToLineDistance(p, g,{units: 'meters'}) < (g.properties.geofence.attributes.polylineDistance || 25)) {
192
+ if (!entryMap.includes(g)) {
193
+ events.push(createEvent('geofenceEnter',d.id,p,g))
195
194
  entryMap.push(g)
196
195
  }
197
196
  } else {
198
197
  if (entryMap.includes(g)) {
199
- events.push({
200
- type: "geofenceExit",
201
- position: p.properties.position,
202
- geofenceId: g.properties.geofence.id,
203
- deviceId: d.id
204
- })
198
+ events.push(createEvent('geofenceExit',d.id,p,g))
205
199
  const index = entryMap.indexOf(g)
206
200
  entryMap.splice(index, 1)
207
201
  }
@@ -214,6 +208,15 @@ function getInAndOutEvents(devices, route, userData) {
214
208
  return events
215
209
  }
216
210
 
211
+ function createEvent(type, deviceId, p, g) {
212
+ return {
213
+ type: type,
214
+ position: p.properties.position,
215
+ geofenceId: g.properties.geofence.id,
216
+ deviceId: deviceId
217
+ }
218
+ }
219
+
217
220
  async function exportZoneReportToPDF(userData, reportData) {
218
221
  console.log('Export to PDF')
219
222