Пример #1
0
// 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()
}