// allMarkers returns the URL fragment containing all the markers of the specified GPS records to be appended // to a static maps URL. // // Static maps documentation: // https://developers.google.com/maps/documentation/staticmaps/ func allMarkers(records []*ds.GPS) string { // Returned string will be around 1 KB, allocated reasonable buffer: b := bytes.NewBuffer(make([]byte, 0, 1280)) // MARKERS var prev *ds.GPS for idx, r := range records { if !r.Track() { prev = r continue } // Determine color. Default marker color: blue; // First records after a Start event: green // Last records before a Stop event: red clr := "blue" if prev != nil && prev.Evt() == ds.EvtStop { clr = "red" } // Check next if idx < len(records)-1 && records[idx+1].Evt() == ds.EvtStart { clr = "green" } fmt.Fprintf(b, "&markers=color:%s|label:%c|%f,%f", clr, r.Label, r.GeoPoint.Lat, r.GeoPoint.Lng) prev = r } // PATHS i := 0 for _, r := range records { if !r.Track() { i = 0 continue } if i == 0 { b.WriteString("&path=") } else if i > 0 { b.WriteString("|") } fmt.Fprintf(b, "%f,%f", r.GeoPoint.Lat, r.GeoPoint.Lng) i++ } return b.String() }