@@ -3,7 +3,7 @@ import _ from 'lodash'
3
3
4
4
const DAYS_OF_WEEK = [ null , 'monday' , 'tuesday' , 'wednesday' , 'thursday' , 'friday' , 'saturday' , 'sunday' ]
5
5
6
- function prepareCsvForExport ( data , analysisMode , route ) {
6
+ function prepareCsvForExport ( data , analysisMode , refSpeedComparisonEnabled , route ) {
7
7
let rows = [ ]
8
8
if ( analysisMode === 'ROUTE' ) {
9
9
rows . push ( {
@@ -12,15 +12,20 @@ function prepareCsvForExport (data, analysisMode, route) {
12
12
'traffic_route_time' : route . trafficRouteTime
13
13
} )
14
14
}
15
+
15
16
rows = rows . concat ( _ . map ( data . features , ( segment ) => {
16
17
var row = {
17
18
'row_type' : 'segment' ,
18
19
'osmlr_id' : segment . properties . osmlr_id
19
20
}
20
- segment . properties . speedByHour . forEach ( ( speedByHour ) => {
21
- let dayOfWeek = DAYS_OF_WEEK [ speedByHour . dayOfWeek ]
22
- row [ `average_speed_on_${ dayOfWeek } _at_hour_${ speedByHour . hourOfDay } ` ] = speedByHour . speedThisHour
23
- } )
21
+ if ( refSpeedComparisonEnabled ) {
22
+ row [ 'percent_diff_from_reference_speed' ] = segment . properties . percentDiff
23
+ } else {
24
+ segment . properties . speedByHour . forEach ( ( speedByHour ) => {
25
+ let dayOfWeek = DAYS_OF_WEEK [ speedByHour . dayOfWeek ]
26
+ row [ `average_speed_on_${ dayOfWeek } _at_hour_${ speedByHour . hourOfDay } ` ] = speedByHour . speedThisHour
27
+ } )
28
+ }
24
29
return row
25
30
} ) )
26
31
let str = convertArrayOfObjectsToCsv ( rows )
@@ -78,25 +83,42 @@ export function convertArrayOfObjectsToCsv (data, columnDelimiter = ',', lineDel
78
83
* @param {Object } date
79
84
* @param {Object } route
80
85
*/
81
- export function exportData ( obj , name = 'untitled' , format = 'geojson' , analysisMode , date , route ) {
86
+ export function exportData ( obj , name = 'untitled' , format = 'geojson' , analysisMode , date , refSpeedComparisonEnabled , route ) {
82
87
if ( ! obj ) return false
83
88
84
89
let blob
85
90
86
- obj . properties . analysisMode = analysisMode
87
- obj . properties . analysisName = name
88
- obj . properties . date = {
91
+ let data = JSON . parse ( JSON . stringify ( obj ) ) // deep clone, so we can modify the data
92
+
93
+ data . properties . analysisMode = analysisMode
94
+ data . properties . analysisName = name
95
+ const days = ( date && date . dayFilter ) ? _ . slice ( DAYS_OF_WEEK , date . dayFilter [ 0 ] + 1 , date . dayFilter [ 1 ] + 1 ) : _ . slice ( DAYS_OF_WEEK , 1 , 8 )
96
+ const hours = ( date && date . hourFilter ) ? _ . range ( date . hourFilter [ 0 ] , date . hourFilter [ 1 ] ) : _ . range ( 0 , 25 )
97
+ data . properties . date = {
89
98
year : date . year ,
90
99
week : parseInt ( date . week , 10 ) ,
91
- days : _ . slice ( DAYS_OF_WEEK , date . dayFilter [ 0 ] + 1 , date . dayFilter [ 1 ] + 1 ) ,
92
- hours : _ . range ( date . hourFilter [ 0 ] , date . hourFilter [ 1 ] + 1 )
100
+ days : days ,
101
+ hours : hours
102
+ }
103
+
104
+ if ( refSpeedComparisonEnabled ) {
105
+ data . features = data . features . map ( ( feature ) => {
106
+ delete feature . properties . speedByHour
107
+ delete feature . properties . speed
108
+ return feature
109
+ } )
110
+ } else {
111
+ data . features = data . features . map ( ( feature ) => {
112
+ delete feature . properties . percentDiff
113
+ return feature
114
+ } )
93
115
}
94
116
95
117
if ( format === 'geojson' ) {
96
- let str = JSON . stringify ( obj , null , 2 )
118
+ let str = JSON . stringify ( data , null , 2 )
97
119
blob = new Blob ( [ str ] , { type : 'application/json;charset=utf-8' } )
98
120
} else if ( format === 'csv' ) {
99
- let str = prepareCsvForExport ( obj , analysisMode , route )
121
+ let str = prepareCsvForExport ( data , analysisMode , refSpeedComparisonEnabled , route )
100
122
blob = new Blob ( [ str ] , { type : 'text/csv;charset=utf-8' } )
101
123
} else {
102
124
throw new Error ( 'exportData() only supports GeoJSON or CSV formats' )
0 commit comments