protected abstract void printJS(OutputStream out) throws IOException;
protected abstract CharSequence draw(Trkpt[] pts, String color, String name);
protected void drawTracks(Appendable mapjs) throws IOException {
ColorProvider colorGen = new ColorListColorProvider("#RGB");// new
// RandomColorProvider("#RGB");//
for (Trk trk : data.getTrk()) {
final String trkname = trk.getName();
message(trkname);
Trkseg[] segs = trk.getTrkseg();
final int segCount = segs.length;
for (int iseg = 0; iseg < segCount; iseg++) {
Trkseg seg = segs[iseg];
if (seg.getTrkptCount() < 2) {
continue;
}
/*
* if at least one trkpt has a timestamp we accept only trkpts
* with timestamps
*/
Trkpt[] pts = seg.getTrkpt();
List<Trkpt> withTimeStamp = new Vector<Trkpt>(pts.length);
for (Trkpt pt : pts) {
if (pt.getTime() != null) {
withTimeStamp.add(pt);
}
}
final int nTimestampPts = withTimeStamp.size();
if (nTimestampPts == 1) {
message("Dropping segment with exactly one point with a timestamp.");
continue;
} else if (nTimestampPts != 0) {
if (nTimestampPts != pts.length) {
message("Dropping " + (pts.length - nTimestampPts)
+ " points with missing timestamps.");
}
pts = withTimeStamp
.toArray(new Trkpt[withTimeStamp.size()]);
}
String segname = null;
if (trkname != null) {
segname = trkname;
if (segCount > 1) {
segname = segname + "[" + iseg + "]";
}
}
mapjs.append("//Track: ").append(String.valueOf(segname));
mapjs.append("\n");
mapjs.append(draw(pts, colorGen.getNextColorString(), segname));
}
}
}