483483 } ) ;
484484 altitude_graph = draw_graph ( start_time_ms , end_time_ms , time_altitude_data , "Altitude" , "meters" , "ForestGreen" , fill , altitude_graph ) ;
485485 }
486+ if ( events . length > 0 && times . length > 0 )
487+ {
488+ let new_events = events . map ( function ( event , i ) {
489+ let timestamp = event [ "timestamp_ms" ] ;
490+ let time_index = times . findIndex ( function ( val ) { return val == timestamp ; } , timestamp ) ;
486491
487- draw_map ( latitudes , longitudes , map_color , distance_meters ) ;
492+ if ( time_index != - 1 )
493+ {
494+ return [ latitudes [ time_index ] , longitudes [ time_index ] , event [ "event_type" ] ] ;
495+ }
496+ return [ latitudes [ 0 ] , longitudes [ 0 ] , event [ "event_type" ] ] ;
497+ } ) ;
498+ events = new_events ;
499+ }
500+
501+ draw_map ( latitudes , longitudes , map_color , distance_meters , events ) ;
488502
489503 // Show the export section
490504 let section = document . getElementById ( 'export' ) ;
@@ -628,23 +642,57 @@ <h4>Analyze, compare, and split fitness files.<br>Only GPX, TCX, and FIT files a
628642 }
629643
630644 /// @function draw_map
631- function draw_map ( latitudes , longitudes , color , extent_meters )
645+ function draw_map ( latitudes , longitudes , line_color , extent_meters , events )
632646 {
633647 let map_div = document . getElementById ( 'map_canvas' ) ;
634648 map_div . style = "display: block;" ;
635649
636- let projection = new OpenLayers . Projection ( "EPSG:4326" ) ;
637-
638650 let osm_layer = new OpenLayers . Layer . OSM ( "OSM" ) ;
639651 map . addLayer ( osm_layer ) ;
640652
653+ let projection = new OpenLayers . Projection ( "EPSG:4326" ) ;
654+ let project_to = map . getProjectionObject ( ) ; // The map projection (Spherical Mercator)
655+
656+ if ( events . length > 0 )
657+ {
658+ let marker_color_list = [ "red" , "black" ] ;
659+ let marker_layer_name = [ events [ 0 ] [ 2 ] ] ;
660+ let marker_style_array = [ new OpenLayers . StyleMap ( { pointRadius : 6 , fillColor : marker_color_list [ 0 ] , fillOpacity : 0.5 } ) ] ;
661+ let marker_vector_layer = [ new OpenLayers . Layer . Vector ( marker_layer_name [ 0 ] , { styleMap : marker_style_array [ 0 ] } ) ] ;
662+
663+ let j = 0 ;
664+ for ( var i = 1 ; i < events . length ; i ++ )
665+ {
666+ if ( ! marker_layer_name . includes ( events [ i ] [ 2 ] ) )
667+ {
668+ j ++ ;
669+ marker_layer_name . push ( events [ i ] [ 2 ] ) ; // If new layer name found it is created
670+ marker_style_array . push ( new OpenLayers . StyleMap ( { pointRadius : 6 , fillColor : marker_color_list [ j % marker_color_list . length ] , fillOpacity : 0.5 } ) ) ;
671+ marker_vector_layer . push ( new OpenLayers . Layer . Vector ( marker_layer_name [ j ] , { styleMap : marker_style_array [ j ] } ) ) ;
672+ }
673+ }
674+
675+ for ( var i = 0 ; i < events . length ; i ++ )
676+ {
677+ let marker_lat = events [ i ] [ 0 ] ;
678+ let marker_lon = events [ i ] [ 1 ] ;
679+ let feature = new OpenLayers . Feature . Vector (
680+ new OpenLayers . Geometry . Point ( marker_lon , marker_lat ) . transform ( projection , project_to ) , { description : "marker number " + i } ) ;
681+ marker_vector_layer [ marker_layer_name . indexOf ( events [ i ] [ 2 ] ) ] . addFeatures ( feature ) ;
682+ }
683+
684+ for ( var i = 0 ; i < marker_layer_name . length ; i ++ ) {
685+ map . addLayer ( marker_vector_layer [ i ] ) ;
686+ }
687+ }
688+
641689 let points = new Array ( ) ;
642690 latitudes . map ( function ( e , i ) {
643691 points . push ( new OpenLayers . Geometry . Point ( longitudes [ i ] , e ) ) ;
644692 } ) ;
645693
646694 let my_line = new OpenLayers . Geometry . LineString ( points ) . transform ( projection , map . getProjectionObject ( ) ) ;
647- let my_line_style = { strokeColor : color , strokeWidth : 3 , strokeOpacity : 0.75 } ;
695+ let my_line_style = { strokeColor : line_color , strokeWidth : 3 , strokeOpacity : 0.75 } ;
648696 let my_feature = new OpenLayers . Feature . Vector ( my_line , { } , my_line_style ) ;
649697 let my_vector = new OpenLayers . Layer . Vector ( "line test" ) ;
650698
@@ -653,11 +701,11 @@ <h4>Analyze, compare, and split fitness files.<br>Only GPX, TCX, and FIT files a
653701
654702 let lon = longitudes [ 0 ] ;
655703 let lat = latitudes [ 0 ] ;
704+ let lon_lat = new OpenLayers . LonLat ( lon , lat ) . transform ( projection , map . getProjectionObject ( ) ) ;
656705 let zoom = 17.0 - ( extent_meters / 10000.0 ) ;
706+
657707 if ( zoom < 10.0 )
658708 zoom = 10.0 ;
659- let lon_lat = new OpenLayers . LonLat ( lon , lat ) . transform ( projection , map . getProjectionObject ( ) ) ;
660-
661709 map . setCenter ( lon_lat , zoom ) ;
662710 map . render ( map_div ) ;
663711 }
0 commit comments