Merge pull request #9429 from osmandapp/fix_8318

Fix_8318
This commit is contained in:
vshcherb 2020-07-10 16:25:13 +02:00 committed by GitHub
commit 06af1bf71b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 14 deletions

View file

@ -932,7 +932,6 @@ public class GPXUtilities {
sp = new SplitSegment(segment, k - 1, cf);
currentMetricEnd += metricLimit;
prev = sp.get(0);
}
total += currentSegment;
}

View file

@ -46,6 +46,7 @@ import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet;
import net.osmand.plus.views.GPXLayer;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
import net.osmand.util.MapUtils;
import java.util.ArrayList;
import java.util.Collections;
@ -312,18 +313,15 @@ public class TrackDetailsMenu {
}
} else {
float distance = pos * dataSet.getDivX();
double previousSplitDistance = 0;
double totalDistance = 0;
WptPt previousPoint = null;
for (int i = 0; i < segment.points.size(); i++) {
WptPt currentPoint = segment.points.get(i);
if (previousPoint != null) {
if (currentPoint.distance < previousPoint.distance) {
previousSplitDistance += previousPoint.distance;
totalDistance += MapUtils.getDistance(previousPoint.lat, previousPoint.lon, currentPoint.lat, currentPoint.lon);
}
}
double totalDistance = previousSplitDistance + currentPoint.distance;
if (totalDistance >= distance) {
if (previousPoint != null) {
if (currentPoint.distance >= distance || Math.abs(totalDistance - distance) < 0.1) {
if (previousPoint != null && currentPoint.distance >= distance) {
double percent = 1 - (totalDistance - distance) / (currentPoint.distance - previousPoint.distance);
double dLat = (currentPoint.lat - previousPoint.lat) * percent;
double dLon = (currentPoint.lon - previousPoint.lon) * percent;
@ -500,6 +498,9 @@ public class TrackDetailsMenu {
} else {
mapActivity.getMapLayers().getGpxLayer().setTrackChartPoints(trackChartPoints);
}
if (location != null) {
mapActivity.refreshMap();
}
fitTrackOnMap(chart, location, forceFit);
}

View file

@ -57,7 +57,6 @@ import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
@ -70,12 +69,14 @@ import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet;
import net.osmand.plus.measurementtool.NewGpxData;
import net.osmand.plus.myplaces.TrackBitmapDrawer.TrackBitmapDrawerListener;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.views.controls.PagerSlidingTabStrip;
import net.osmand.plus.views.controls.PagerSlidingTabStrip.CustomTabProvider;
import net.osmand.plus.views.controls.WrapContentHeightViewPager;
import net.osmand.plus.views.controls.WrapContentHeightViewPager.ViewAtPositionInterface;
import net.osmand.plus.widgets.IconPopupMenu;
import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import java.io.File;
import java.lang.ref.WeakReference;
@ -525,16 +526,14 @@ public class TrackSegmentFragment extends OsmAndListFragment implements TrackBit
}
} else {
float distance = pos * dataSet.getDivX();
double previousSplitDistance = 0;
double totalDistance = 0;
for (int i = 0; i < segment.points.size(); i++) {
WptPt currentPoint = segment.points.get(i);
if (i != 0) {
WptPt previousPoint = segment.points.get(i - 1);
if (currentPoint.distance < previousPoint.distance) {
previousSplitDistance += previousPoint.distance;
totalDistance += MapUtils.getDistance(previousPoint.lat, previousPoint.lon, currentPoint.lat, currentPoint.lon);
}
}
if (previousSplitDistance + currentPoint.distance >= distance) {
if (currentPoint.distance >= distance || Math.abs(totalDistance - distance) < 0.1) {
wpt = currentPoint;
break;
}