commit
1368066253
10 changed files with 84 additions and 52 deletions
|
@ -873,7 +873,7 @@ public class GPXUtilities {
|
||||||
WptPt point = segment.points.get(k);
|
WptPt point = segment.points.get(k);
|
||||||
if (k > 0) {
|
if (k > 0) {
|
||||||
double currentSegment = 0;
|
double currentSegment = 0;
|
||||||
if (!(segment.generalSegment && joinSegments && point.firstPoint)) {
|
if (!(segment.generalSegment && !joinSegments && point.firstPoint)) {
|
||||||
currentSegment = metric.metric(prev, point);
|
currentSegment = metric.metric(prev, point);
|
||||||
secondaryMetricEnd += secondaryMetric.metric(prev, point);
|
secondaryMetricEnd += secondaryMetric.metric(prev, point);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,20 +8,17 @@ import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import net.osmand.GPXUtilities;
|
import net.osmand.GPXUtilities;
|
||||||
import net.osmand.IProgress;
|
|
||||||
import net.osmand.PlatformUtil;
|
|
||||||
import net.osmand.data.LatLon;
|
|
||||||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
||||||
import net.osmand.GPXUtilities.Route;
|
import net.osmand.GPXUtilities.Route;
|
||||||
import net.osmand.GPXUtilities.Track;
|
import net.osmand.GPXUtilities.Track;
|
||||||
import net.osmand.GPXUtilities.TrkSegment;
|
import net.osmand.GPXUtilities.TrkSegment;
|
||||||
import net.osmand.GPXUtilities.WptPt;
|
import net.osmand.GPXUtilities.WptPt;
|
||||||
|
import net.osmand.IProgress;
|
||||||
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||||
import net.osmand.plus.OsmandSettings.MetricsConstants;
|
import net.osmand.plus.OsmandSettings.MetricsConstants;
|
||||||
import net.osmand.plus.activities.SavingTrackHelper;
|
import net.osmand.plus.activities.SavingTrackHelper;
|
||||||
|
@ -39,6 +36,8 @@ import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
public class GpxSelectionHelper {
|
public class GpxSelectionHelper {
|
||||||
|
|
||||||
|
@ -48,6 +47,7 @@ public class GpxSelectionHelper {
|
||||||
private static final String BACKUPMODIFIEDTIME = "backupTime";
|
private static final String BACKUPMODIFIEDTIME = "backupTime";
|
||||||
private static final String COLOR = "color";
|
private static final String COLOR = "color";
|
||||||
private static final String SELECTED_BY_USER = "selected_by_user";
|
private static final String SELECTED_BY_USER = "selected_by_user";
|
||||||
|
|
||||||
private OsmandApplication app;
|
private OsmandApplication app;
|
||||||
@NonNull
|
@NonNull
|
||||||
private List<SelectedGpxFile> selectedGPXFiles = new java.util.ArrayList<>();
|
private List<SelectedGpxFile> selectedGPXFiles = new java.util.ArrayList<>();
|
||||||
|
@ -64,7 +64,7 @@ public class GpxSelectionHelper {
|
||||||
public void clearAllGpxFilesToShow(boolean backupSelection) {
|
public void clearAllGpxFilesToShow(boolean backupSelection) {
|
||||||
selectedGpxFilesBackUp.clear();
|
selectedGpxFilesBackUp.clear();
|
||||||
if (backupSelection) {
|
if (backupSelection) {
|
||||||
for(SelectedGpxFile s : selectedGPXFiles) {
|
for (SelectedGpxFile s : selectedGPXFiles) {
|
||||||
selectedGpxFilesBackUp.put(s.gpxFile, s.modifiedTime);
|
selectedGpxFilesBackUp.put(s.gpxFile, s.modifiedTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -512,7 +512,7 @@ public class GpxSelectionHelper {
|
||||||
}
|
}
|
||||||
if (gpx.error != null) {
|
if (gpx.error != null) {
|
||||||
save = true;
|
save = true;
|
||||||
} else if(obj.has(BACKUP)) {
|
} else if (obj.has(BACKUP)) {
|
||||||
selectedGpxFilesBackUp.put(gpx, gpx.modifiedTime);
|
selectedGpxFilesBackUp.put(gpx, gpx.modifiedTime);
|
||||||
} else {
|
} else {
|
||||||
selectGpxFile(gpx, true, false, true, selectedByUser, false);
|
selectGpxFile(gpx, true, false, true, selectedByUser, false);
|
||||||
|
@ -561,7 +561,7 @@ public class GpxSelectionHelper {
|
||||||
if (s != null) {
|
if (s != null) {
|
||||||
try {
|
try {
|
||||||
JSONObject obj = new JSONObject();
|
JSONObject obj = new JSONObject();
|
||||||
if(Algorithms.isEmpty(s.getKey().path)) {
|
if (Algorithms.isEmpty(s.getKey().path)) {
|
||||||
obj.put(CURRENT_TRACK, true);
|
obj.put(CURRENT_TRACK, true);
|
||||||
} else {
|
} else {
|
||||||
obj.put(FILE, s.getKey().path);
|
obj.put(FILE, s.getKey().path);
|
||||||
|
@ -595,8 +595,11 @@ public class GpxSelectionHelper {
|
||||||
displayed = sf != null;
|
displayed = sf != null;
|
||||||
if (show && sf == null) {
|
if (show && sf == null) {
|
||||||
sf = new SelectedGpxFile();
|
sf = new SelectedGpxFile();
|
||||||
if (dataItem != null && dataItem.getColor() != 0) {
|
if (dataItem != null) {
|
||||||
gpx.setColor(dataItem.getColor());
|
if (dataItem.getColor() != 0) {
|
||||||
|
gpx.setColor(dataItem.getColor());
|
||||||
|
}
|
||||||
|
sf.setJoinSegments(dataItem.isJoinSegments());
|
||||||
}
|
}
|
||||||
sf.setGpxFile(gpx, app);
|
sf.setGpxFile(gpx, app);
|
||||||
sf.notShowNavigationDialog = notShowNavigationDialog;
|
sf.notShowNavigationDialog = notShowNavigationDialog;
|
||||||
|
@ -661,7 +664,6 @@ public class GpxSelectionHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void syncGpxWithMarkers(GPXFile gpxFile) {
|
private void syncGpxWithMarkers(GPXFile gpxFile) {
|
||||||
File gpx = new File(gpxFile.path);
|
|
||||||
MapMarkersHelper mapMarkersHelper = app.getMapMarkersHelper();
|
MapMarkersHelper mapMarkersHelper = app.getMapMarkersHelper();
|
||||||
MapMarkersGroup group = mapMarkersHelper.getMarkersGroup(gpxFile);
|
MapMarkersGroup group = mapMarkersHelper.getMarkersGroup(gpxFile);
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
|
@ -669,22 +671,25 @@ public class GpxSelectionHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class SelectedGpxFile {
|
public static class SelectedGpxFile {
|
||||||
|
|
||||||
public boolean notShowNavigationDialog = false;
|
public boolean notShowNavigationDialog = false;
|
||||||
public boolean selectedByUser = true;
|
public boolean selectedByUser = true;
|
||||||
|
|
||||||
private boolean showCurrentTrack;
|
|
||||||
private GPXFile gpxFile;
|
private GPXFile gpxFile;
|
||||||
private int color;
|
|
||||||
private GPXTrackAnalysis trackAnalysis;
|
private GPXTrackAnalysis trackAnalysis;
|
||||||
private long modifiedTime = -1;
|
|
||||||
private boolean splitProcessed = false;
|
|
||||||
private List<TrkSegment> processedPointsToDisplay = new ArrayList<>();
|
|
||||||
private boolean routePoints;
|
|
||||||
|
|
||||||
|
private List<TrkSegment> processedPointsToDisplay = new ArrayList<>();
|
||||||
private List<GpxDisplayGroup> displayGroups;
|
private List<GpxDisplayGroup> displayGroups;
|
||||||
|
|
||||||
|
private int color;
|
||||||
|
private long modifiedTime = -1;
|
||||||
|
|
||||||
|
private boolean routePoints;
|
||||||
|
private boolean joinSegments;
|
||||||
|
private boolean showCurrentTrack;
|
||||||
|
private boolean splitProcessed = false;
|
||||||
|
|
||||||
public void setGpxFile(GPXFile gpxFile, OsmandApplication app) {
|
public void setGpxFile(GPXFile gpxFile, OsmandApplication app) {
|
||||||
this.gpxFile = gpxFile;
|
this.gpxFile = gpxFile;
|
||||||
if (gpxFile.tracks.size() > 0) {
|
if (gpxFile.tracks.size() > 0) {
|
||||||
|
@ -723,7 +728,7 @@ public class GpxSelectionHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TrkSegment> getPointsToDisplay() {
|
public List<TrkSegment> getPointsToDisplay() {
|
||||||
return processedPointsToDisplay;
|
return joinSegments ? gpxFile.getGeneralTrack().segments : processedPointsToDisplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TrkSegment> getModifiablePointsToDisplay() {
|
public List<TrkSegment> getModifiablePointsToDisplay() {
|
||||||
|
@ -747,6 +752,14 @@ public class GpxSelectionHelper {
|
||||||
this.showCurrentTrack = showCurrentTrack;
|
this.showCurrentTrack = showCurrentTrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isJoinSegments() {
|
||||||
|
return joinSegments;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJoinSegments(boolean joinSegments) {
|
||||||
|
this.joinSegments = joinSegments;
|
||||||
|
}
|
||||||
|
|
||||||
public int getColor() {
|
public int getColor() {
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
|
@ -412,7 +412,13 @@ public class TrackActivity extends TabActivity {
|
||||||
|
|
||||||
public boolean setJoinSegments(boolean joinSegments) {
|
public boolean setJoinSegments(boolean joinSegments) {
|
||||||
if (gpxDataItem != null) {
|
if (gpxDataItem != null) {
|
||||||
return app.getGpxDbHelper().updateJoinSegments(gpxDataItem, joinSegments);
|
boolean updated = app.getGpxDbHelper().updateJoinSegments(gpxDataItem, joinSegments);
|
||||||
|
|
||||||
|
SelectedGpxFile selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(gpxFile.path);
|
||||||
|
if (updated && selectedGpxFile != null) {
|
||||||
|
selectedGpxFile.setJoinSegments(joinSegments);
|
||||||
|
}
|
||||||
|
return updated;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1230,7 +1230,7 @@ public class GpxUiHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Entry> calculateElevationArray(GPXTrackAnalysis analysis, GPXDataSetAxisType axisType,
|
private static List<Entry> calculateElevationArray(GPXTrackAnalysis analysis, GPXDataSetAxisType axisType,
|
||||||
float divX, float convEle, boolean useGeneralTrackPoints) {
|
float divX, float convEle, boolean useGeneralTrackPoints, boolean calcGaps) {
|
||||||
List<Entry> values = new ArrayList<>();
|
List<Entry> values = new ArrayList<>();
|
||||||
List<Elevation> elevationData = analysis.elevationData;
|
List<Elevation> elevationData = analysis.elevationData;
|
||||||
float nextX = 0;
|
float nextX = 0;
|
||||||
|
@ -1252,7 +1252,9 @@ public class GpxUiHelper {
|
||||||
x = e.distance;
|
x = e.distance;
|
||||||
}
|
}
|
||||||
if (x > 0) {
|
if (x > 0) {
|
||||||
nextX += x / divX;
|
if (!(!calcGaps && e.firstPoint && lastEntry != null)) {
|
||||||
|
nextX += x / divX;
|
||||||
|
}
|
||||||
if (!Float.isNaN(e.elevation)) {
|
if (!Float.isNaN(e.elevation)) {
|
||||||
elev = e.elevation;
|
elev = e.elevation;
|
||||||
if (prevElevOrig != -80000) {
|
if (prevElevOrig != -80000) {
|
||||||
|
@ -1383,7 +1385,8 @@ public class GpxUiHelper {
|
||||||
@NonNull GPXTrackAnalysis analysis,
|
@NonNull GPXTrackAnalysis analysis,
|
||||||
@NonNull GPXDataSetAxisType axisType,
|
@NonNull GPXDataSetAxisType axisType,
|
||||||
boolean useRightAxis,
|
boolean useRightAxis,
|
||||||
boolean drawFilled) {
|
boolean drawFilled,
|
||||||
|
boolean calcGaps) {
|
||||||
OsmandSettings settings = ctx.getSettings();
|
OsmandSettings settings = ctx.getSettings();
|
||||||
OsmandSettings.MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
OsmandSettings.MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||||
boolean useFeet = (mc == OsmandSettings.MetricsConstants.MILES_AND_FEET) || (mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS);
|
boolean useFeet = (mc == OsmandSettings.MetricsConstants.MILES_AND_FEET) || (mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS);
|
||||||
|
@ -1393,11 +1396,11 @@ public class GpxUiHelper {
|
||||||
float divX;
|
float divX;
|
||||||
XAxis xAxis = mChart.getXAxis();
|
XAxis xAxis = mChart.getXAxis();
|
||||||
if (axisType == GPXDataSetAxisType.TIME && analysis.isTimeSpecified()) {
|
if (axisType == GPXDataSetAxisType.TIME && analysis.isTimeSpecified()) {
|
||||||
divX = setupXAxisTime(xAxis, analysis.timeSpan);
|
divX = setupXAxisTime(xAxis, calcGaps ? analysis.timeSpan : analysis.timeSpanWithoutGaps);
|
||||||
} else if (axisType == GPXDataSetAxisType.TIMEOFDAY && analysis.isTimeSpecified()) {
|
} else if (axisType == GPXDataSetAxisType.TIMEOFDAY && analysis.isTimeSpecified()) {
|
||||||
divX = setupXAxisTimeOfDay(xAxis, analysis.startTime);
|
divX = setupXAxisTimeOfDay(xAxis, analysis.startTime);
|
||||||
} else {
|
} else {
|
||||||
divX = setupAxisDistance(ctx, xAxis, analysis.totalDistance);
|
divX = setupAxisDistance(ctx, xAxis, calcGaps ? analysis.totalDistance : analysis.totalDistanceWithoutGaps);
|
||||||
}
|
}
|
||||||
|
|
||||||
final String mainUnitY = useFeet ? ctx.getString(R.string.foot) : ctx.getString(R.string.m);
|
final String mainUnitY = useFeet ? ctx.getString(R.string.foot) : ctx.getString(R.string.m);
|
||||||
|
@ -1421,7 +1424,7 @@ public class GpxUiHelper {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
List<Entry> values = calculateElevationArray(analysis, axisType, divX, convEle, true);
|
List<Entry> values = calculateElevationArray(analysis, axisType, divX, convEle, true, calcGaps);
|
||||||
|
|
||||||
OrderedLineDataSet dataSet = new OrderedLineDataSet(values, "", GPXDataSetType.ALTITUDE, axisType);
|
OrderedLineDataSet dataSet = new OrderedLineDataSet(values, "", GPXDataSetType.ALTITUDE, axisType);
|
||||||
dataSet.priority = (float) (analysis.avgElevation - analysis.minElevation) * convEle;
|
dataSet.priority = (float) (analysis.avgElevation - analysis.minElevation) * convEle;
|
||||||
|
@ -1640,7 +1643,8 @@ public class GpxUiHelper {
|
||||||
@NonNull GPXDataSetAxisType axisType,
|
@NonNull GPXDataSetAxisType axisType,
|
||||||
@Nullable List<Entry> eleValues,
|
@Nullable List<Entry> eleValues,
|
||||||
boolean useRightAxis,
|
boolean useRightAxis,
|
||||||
boolean drawFilled) {
|
boolean drawFilled,
|
||||||
|
boolean calcGaps) {
|
||||||
if (axisType == GPXDataSetAxisType.TIME || axisType == GPXDataSetAxisType.TIMEOFDAY) {
|
if (axisType == GPXDataSetAxisType.TIME || axisType == GPXDataSetAxisType.TIMEOFDAY) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1649,10 +1653,10 @@ public class GpxUiHelper {
|
||||||
OsmandSettings.MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
OsmandSettings.MetricsConstants mc = settings.METRIC_SYSTEM.get();
|
||||||
boolean useFeet = (mc == OsmandSettings.MetricsConstants.MILES_AND_FEET) || (mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS);
|
boolean useFeet = (mc == OsmandSettings.MetricsConstants.MILES_AND_FEET) || (mc == OsmandSettings.MetricsConstants.MILES_AND_YARDS);
|
||||||
final float convEle = useFeet ? 3.28084f : 1.0f;
|
final float convEle = useFeet ? 3.28084f : 1.0f;
|
||||||
final float totalDistance = analysis.totalDistance;
|
final float totalDistance = calcGaps ? analysis.totalDistance : analysis.totalDistanceWithoutGaps;
|
||||||
|
|
||||||
XAxis xAxis = mChart.getXAxis();
|
XAxis xAxis = mChart.getXAxis();
|
||||||
float divX = setupAxisDistance(ctx, xAxis, analysis.totalDistance);
|
float divX = setupAxisDistance(ctx, xAxis, calcGaps ? analysis.totalDistance : analysis.totalDistanceWithoutGaps);
|
||||||
|
|
||||||
final String mainUnitY = "%";
|
final String mainUnitY = "%";
|
||||||
|
|
||||||
|
@ -1677,7 +1681,7 @@ public class GpxUiHelper {
|
||||||
|
|
||||||
List<Entry> values;
|
List<Entry> values;
|
||||||
if (eleValues == null) {
|
if (eleValues == null) {
|
||||||
values = calculateElevationArray(analysis, GPXDataSetAxisType.DISTANCE, 1f, 1f, false);
|
values = calculateElevationArray(analysis, GPXDataSetAxisType.DISTANCE, 1f, 1f, false, calcGaps);
|
||||||
} else {
|
} else {
|
||||||
values = new ArrayList<>(eleValues.size());
|
values = new ArrayList<>(eleValues.size());
|
||||||
for (Entry e : eleValues) {
|
for (Entry e : eleValues) {
|
||||||
|
|
|
@ -586,7 +586,7 @@ public class TrackDetailsMenu {
|
||||||
switch (gpxItem.chartTypes[i]) {
|
switch (gpxItem.chartTypes[i]) {
|
||||||
case ALTITUDE:
|
case ALTITUDE:
|
||||||
dataSet = GpxUiHelper.createGPXElevationDataSet(app, chart, analysis,
|
dataSet = GpxUiHelper.createGPXElevationDataSet(app, chart, analysis,
|
||||||
gpxItem.chartAxisType, false, true);
|
gpxItem.chartAxisType, false, true, false);
|
||||||
break;
|
break;
|
||||||
case SPEED:
|
case SPEED:
|
||||||
dataSet = GpxUiHelper.createGPXSpeedDataSet(app, chart, analysis,
|
dataSet = GpxUiHelper.createGPXSpeedDataSet(app, chart, analysis,
|
||||||
|
@ -594,7 +594,7 @@ public class TrackDetailsMenu {
|
||||||
break;
|
break;
|
||||||
case SLOPE:
|
case SLOPE:
|
||||||
dataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart, analysis,
|
dataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart, analysis,
|
||||||
gpxItem.chartAxisType, null, gpxItem.chartTypes.length > 1, true);
|
gpxItem.chartAxisType, null, gpxItem.chartTypes.length > 1, true, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dataSet != null) {
|
if (dataSet != null) {
|
||||||
|
|
|
@ -529,7 +529,7 @@ public class SplitSegmentDialogFragment extends DialogFragment {
|
||||||
TextView distanceOrTimeSpanText = (TextView) convertView.findViewById(R.id.distance_or_time_span_text);
|
TextView distanceOrTimeSpanText = (TextView) convertView.findViewById(R.id.distance_or_time_span_text);
|
||||||
if (position == 0) {
|
if (position == 0) {
|
||||||
distanceOrTimeSpanImageView.setImageDrawable(ic.getIcon(R.drawable.ic_action_track_16, app.getSettings().isLightContent() ? R.color.gpx_split_segment_icon_color : 0));
|
distanceOrTimeSpanImageView.setImageDrawable(ic.getIcon(R.drawable.ic_action_track_16, app.getSettings().isLightContent() ? R.color.gpx_split_segment_icon_color : 0));
|
||||||
float totalDistance = joinSegments && gpxItem.isGeneralTrack() ? analysis.totalDistanceWithoutGaps : analysis.totalDistance;
|
float totalDistance = joinSegments && gpxItem.isGeneralTrack() ? analysis.totalDistance : analysis.totalDistanceWithoutGaps;
|
||||||
distanceOrTimeSpanValue.setText(OsmAndFormatter.getFormattedDistance(totalDistance, app));
|
distanceOrTimeSpanValue.setText(OsmAndFormatter.getFormattedDistance(totalDistance, app));
|
||||||
distanceOrTimeSpanText.setText(app.getString(R.string.distance));
|
distanceOrTimeSpanText.setText(app.getString(R.string.distance));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -12,13 +12,13 @@ import android.support.annotation.Nullable;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.GPXUtilities;
|
||||||
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
|
import net.osmand.GPXUtilities.TrkSegment;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.QuadRect;
|
import net.osmand.data.QuadRect;
|
||||||
import net.osmand.data.RotatedTileBox;
|
import net.osmand.data.RotatedTileBox;
|
||||||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||||
import net.osmand.GPXUtilities;
|
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
|
||||||
import net.osmand.GPXUtilities.TrkSegment;
|
|
||||||
import net.osmand.plus.GpxSelectionHelper;
|
import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
@ -60,9 +60,11 @@ public class TrackBitmapDrawer {
|
||||||
|
|
||||||
public interface TrackBitmapDrawerListener {
|
public interface TrackBitmapDrawerListener {
|
||||||
void onTrackBitmapDrawing();
|
void onTrackBitmapDrawing();
|
||||||
|
|
||||||
void onTrackBitmapDrawn();
|
void onTrackBitmapDrawn();
|
||||||
|
|
||||||
boolean isTrackBitmapSelectionSupported();
|
boolean isTrackBitmapSelectionSupported();
|
||||||
|
|
||||||
void drawTrackBitmap(Bitmap bitmap);
|
void drawTrackBitmap(Bitmap bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +207,10 @@ public class TrackBitmapDrawer {
|
||||||
if (gpxFile.showCurrentTrack) {
|
if (gpxFile.showCurrentTrack) {
|
||||||
sf = app.getSavingTrackHelper().getCurrentTrack();
|
sf = app.getSavingTrackHelper().getCurrentTrack();
|
||||||
} else {
|
} else {
|
||||||
sf = new GpxSelectionHelper.SelectedGpxFile();
|
sf = app.getSelectedGpxHelper().getSelectedFileByPath(gpxFile.path);
|
||||||
|
if (sf == null) {
|
||||||
|
sf = new GpxSelectionHelper.SelectedGpxFile();
|
||||||
|
}
|
||||||
sf.setGpxFile(gpxFile, app);
|
sf.setGpxFile(gpxFile, app);
|
||||||
}
|
}
|
||||||
Bitmap bmp = mapBitmap.copy(mapBitmap.getConfig(), true);
|
Bitmap bmp = mapBitmap.copy(mapBitmap.getConfig(), true);
|
||||||
|
|
|
@ -435,8 +435,10 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit
|
||||||
analysis, GPXDataSetAxisType.DISTANCE, true, true);
|
analysis, GPXDataSetAxisType.DISTANCE, true, true);
|
||||||
}
|
}
|
||||||
if (analysis.hasElevationData) {
|
if (analysis.hasElevationData) {
|
||||||
|
GpxDataItem gpxDataItem = getGpxDataItem();
|
||||||
|
boolean calcGaps = gpxDataItem != null && gpxDataItem.isJoinSegments() && gpxItem.isGeneralTrack() || !gpxItem.isGeneralTrack();
|
||||||
elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, chart,
|
elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, chart,
|
||||||
analysis, GPXDataSetAxisType.DISTANCE, false, true);
|
analysis, GPXDataSetAxisType.DISTANCE, false, true, calcGaps);
|
||||||
}
|
}
|
||||||
if (speedDataSet != null) {
|
if (speedDataSet != null) {
|
||||||
dataSets.add(speedDataSet);
|
dataSets.add(speedDataSet);
|
||||||
|
@ -451,15 +453,17 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GPX_TAB_ITEM_ALTITUDE: {
|
case GPX_TAB_ITEM_ALTITUDE: {
|
||||||
|
GpxDataItem gpxDataItem = getGpxDataItem();
|
||||||
|
boolean calcGaps = gpxDataItem != null && gpxDataItem.isJoinSegments() && gpxItem.isGeneralTrack() || !gpxItem.isGeneralTrack();
|
||||||
OrderedLineDataSet elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, chart,
|
OrderedLineDataSet elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, chart,
|
||||||
analysis, GPXDataSetAxisType.DISTANCE, false, true);
|
analysis, GPXDataSetAxisType.DISTANCE, false, true, calcGaps);
|
||||||
if (elevationDataSet != null) {
|
if (elevationDataSet != null) {
|
||||||
dataSets.add(elevationDataSet);
|
dataSets.add(elevationDataSet);
|
||||||
}
|
}
|
||||||
if (analysis.hasElevationData) {
|
if (analysis.hasElevationData) {
|
||||||
List<Entry> eleValues = elevationDataSet != null && !gpxItem.isGeneralTrack() ? elevationDataSet.getValues() : null;
|
List<Entry> eleValues = elevationDataSet != null && !gpxItem.isGeneralTrack() ? elevationDataSet.getValues() : null;
|
||||||
OrderedLineDataSet slopeDataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart,
|
OrderedLineDataSet slopeDataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart,
|
||||||
analysis, GPXDataSetAxisType.DISTANCE, eleValues, true, true);
|
analysis, GPXDataSetAxisType.DISTANCE, eleValues, true, true, calcGaps);
|
||||||
if (slopeDataSet != null) {
|
if (slopeDataSet != null) {
|
||||||
dataSets.add(slopeDataSet);
|
dataSets.add(slopeDataSet);
|
||||||
}
|
}
|
||||||
|
@ -720,7 +724,7 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
TrackActivity activity = getTrackActivity();
|
TrackActivity activity = getTrackActivity();
|
||||||
if (activity != null && activity.setJoinSegments(!activity.isJoinSegments())) {
|
if (activity != null && activity.setJoinSegments(!activity.isJoinSegments())) {
|
||||||
updateSplitView();
|
updateContent();
|
||||||
for (int i = 0; i < getCount(); i++) {
|
for (int i = 0; i < getCount(); i++) {
|
||||||
View view = getViewAtPosition(i);
|
View view = getViewAtPosition(i);
|
||||||
updateJoinGapsInfo(view, i);
|
updateJoinGapsInfo(view, i);
|
||||||
|
@ -1156,14 +1160,14 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit
|
||||||
((SwitchCompat) view.findViewById(R.id.gpx_join_gaps_switch)).setChecked(joinSegments);
|
((SwitchCompat) view.findViewById(R.id.gpx_join_gaps_switch)).setChecked(joinSegments);
|
||||||
if (analysis != null) {
|
if (analysis != null) {
|
||||||
if (tabType.equals(GPXTabItemType.GPX_TAB_ITEM_GENERAL)) {
|
if (tabType.equals(GPXTabItemType.GPX_TAB_ITEM_GENERAL)) {
|
||||||
float totalDistance = joinSegments && gpxItem.isGeneralTrack() ? analysis.totalDistanceWithoutGaps : analysis.totalDistance;
|
float totalDistance = !joinSegments && gpxItem.isGeneralTrack() ? analysis.totalDistanceWithoutGaps : analysis.totalDistance;
|
||||||
float timeSpan = joinSegments && gpxItem.isGeneralTrack() ? analysis.timeSpanWithoutGaps : analysis.timeSpan;
|
float timeSpan = !joinSegments && gpxItem.isGeneralTrack() ? analysis.timeSpanWithoutGaps : analysis.timeSpan;
|
||||||
|
|
||||||
((TextView) view.findViewById(R.id.distance_text)).setText(OsmAndFormatter.getFormattedDistance(totalDistance, app));
|
((TextView) view.findViewById(R.id.distance_text)).setText(OsmAndFormatter.getFormattedDistance(totalDistance, app));
|
||||||
((TextView) view.findViewById(R.id.duration_text)).setText(Algorithms.formatDuration((int) (timeSpan / 1000), app.accessibilityEnabled()));
|
((TextView) view.findViewById(R.id.duration_text)).setText(Algorithms.formatDuration((int) (timeSpan / 1000), app.accessibilityEnabled()));
|
||||||
} else if (tabType.equals(GPXTabItemType.GPX_TAB_ITEM_SPEED)) {
|
} else if (tabType.equals(GPXTabItemType.GPX_TAB_ITEM_SPEED)) {
|
||||||
long timeMoving = joinSegments && gpxItem.isGeneralTrack() ? analysis.timeMovingWithoutGaps : analysis.timeMoving;
|
long timeMoving = !joinSegments && gpxItem.isGeneralTrack() ? analysis.timeMovingWithoutGaps : analysis.timeMoving;
|
||||||
float totalDistanceMoving = joinSegments && gpxItem.isGeneralTrack() ? analysis.totalDistanceMovingWithoutGaps : analysis.totalDistanceMoving;
|
float totalDistanceMoving = !joinSegments && gpxItem.isGeneralTrack() ? analysis.totalDistanceMovingWithoutGaps : analysis.totalDistanceMoving;
|
||||||
|
|
||||||
((TextView) view.findViewById(R.id.time_moving_text)).setText(Algorithms.formatDuration((int) (timeMoving / 1000), app.accessibilityEnabled()));
|
((TextView) view.findViewById(R.id.time_moving_text)).setText(Algorithms.formatDuration((int) (timeMoving / 1000), app.accessibilityEnabled()));
|
||||||
((TextView) view.findViewById(R.id.distance_text)).setText(OsmAndFormatter.getFormattedDistance(totalDistanceMoving, app));
|
((TextView) view.findViewById(R.id.distance_text)).setText(OsmAndFormatter.getFormattedDistance(totalDistanceMoving, app));
|
||||||
|
|
|
@ -244,11 +244,11 @@ public class RouteStatisticCard extends BaseCard {
|
||||||
List<ILineDataSet> dataSets = new ArrayList<>();
|
List<ILineDataSet> dataSets = new ArrayList<>();
|
||||||
OrderedLineDataSet slopeDataSet = null;
|
OrderedLineDataSet slopeDataSet = null;
|
||||||
OrderedLineDataSet elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, mChart, analysis,
|
OrderedLineDataSet elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, mChart, analysis,
|
||||||
GPXDataSetAxisType.DISTANCE, false, true);
|
GPXDataSetAxisType.DISTANCE, false, true, false);
|
||||||
if (elevationDataSet != null) {
|
if (elevationDataSet != null) {
|
||||||
dataSets.add(elevationDataSet);
|
dataSets.add(elevationDataSet);
|
||||||
slopeDataSet = GpxUiHelper.createGPXSlopeDataSet(app, mChart, analysis,
|
slopeDataSet = GpxUiHelper.createGPXSlopeDataSet(app, mChart, analysis,
|
||||||
GPXDataSetAxisType.DISTANCE, elevationDataSet.getValues(), true, true);
|
GPXDataSetAxisType.DISTANCE, elevationDataSet.getValues(), true, true, false);
|
||||||
}
|
}
|
||||||
if (slopeDataSet != null) {
|
if (slopeDataSet != null) {
|
||||||
dataSets.add(slopeDataSet);
|
dataSets.add(slopeDataSet);
|
||||||
|
|
|
@ -120,11 +120,11 @@ public class SimpleRouteCard extends BaseCard {
|
||||||
List<ILineDataSet> dataSets = new ArrayList<>();
|
List<ILineDataSet> dataSets = new ArrayList<>();
|
||||||
OrderedLineDataSet slopeDataSet = null;
|
OrderedLineDataSet slopeDataSet = null;
|
||||||
OrderedLineDataSet elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, mChart, analysis,
|
OrderedLineDataSet elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, mChart, analysis,
|
||||||
GpxUiHelper.GPXDataSetAxisType.DISTANCE, false, true);
|
GpxUiHelper.GPXDataSetAxisType.DISTANCE, false, true, false);
|
||||||
if (elevationDataSet != null) {
|
if (elevationDataSet != null) {
|
||||||
dataSets.add(elevationDataSet);
|
dataSets.add(elevationDataSet);
|
||||||
slopeDataSet = GpxUiHelper.createGPXSlopeDataSet(app, mChart, analysis,
|
slopeDataSet = GpxUiHelper.createGPXSlopeDataSet(app, mChart, analysis,
|
||||||
GpxUiHelper.GPXDataSetAxisType.DISTANCE, elevationDataSet.getValues(), true, true);
|
GpxUiHelper.GPXDataSetAxisType.DISTANCE, elevationDataSet.getValues(), true, true, false);
|
||||||
}
|
}
|
||||||
if (slopeDataSet != null) {
|
if (slopeDataSet != null) {
|
||||||
dataSets.add(slopeDataSet);
|
dataSets.add(slopeDataSet);
|
||||||
|
|
Loading…
Reference in a new issue