@Override
public void saveData(OutputStream outputStream, FileDataSource source, @Nullable ProgressListener progressListener) throws Exception {
if (source.tracks.size() != 1)
throw new Exception("Only single track can be saved in mtrack format");
Track track = source.tracks.get(0);
if (progressListener != null)
progressListener.onProgressStarted(track.points.size());
CodedOutputStream output = CodedOutputStream.newInstance(outputStream);
output.writeUInt32(FIELD_VERSION, VERSION);
int progress = 0;
for (Track.TrackPoint point : track.points) {
output.writeTag(FIELD_POINT, WireFormat.WIRETYPE_LENGTH_DELIMITED);
output.writeRawVarint32(getSerializedPointSize(point));
output.writeInt32(FIELD_POINT_LATITUDE, point.latitudeE6);
output.writeInt32(FIELD_POINT_LONGITUDE, point.longitudeE6);
output.writeFloat(FIELD_POINT_ALTITUDE, point.elevation);
output.writeFloat(FIELD_POINT_SPEED, point.speed);
output.writeFloat(FIELD_POINT_BEARING, point.bearing);
output.writeFloat(FIELD_POINT_ACCURACY, point.accuracy);
output.writeUInt64(FIELD_POINT_TIMESTAMP, point.time);
if (!point.continuous)
//noinspection ConstantConditions
output.writeBool(8, point.continuous);
progress++;
if (progressListener != null)
progressListener.onProgressChanged(progress);
}
output.writeBytes(FIELD_NAME, ByteString.copyFromUtf8(track.name));
output.writeUInt32(FIELD_COLOR, track.style.color);
output.writeFloat(FIELD_WIDTH, track.style.width);
output.flush();
outputStream.close();
if (progressListener != null)
progressListener.onProgressFinished();
}
TrackManager.java 文件源码
java
阅读 42
收藏 0
点赞 0
评论 0
项目:trekarta
作者:
评论列表
文章目录