Fit rect to map when adding segment
This commit is contained in:
parent
aa641516c9
commit
2bfdea04f3
3 changed files with 66 additions and 52 deletions
|
@ -932,6 +932,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
|||
getMapLayers().getContextMenuLayer().enterAddGpxPointMode(newGpxPoint);
|
||||
} else if (toShow instanceof NewGpxLine) {
|
||||
NewGpxLine newGpxLine = (NewGpxLine) toShow;
|
||||
QuadRect qr = newGpxLine.getRect();
|
||||
mapView.fitRectToMap(qr.left, qr.right, qr.top, qr.bottom, (int) qr.width(), (int) qr.height(), 0);
|
||||
openAddingNewGpxLine(newGpxLine);
|
||||
} else {
|
||||
mapContextMenu.show(latLonToShow, mapLabelToShow, toShow);
|
||||
|
|
|
@ -15,6 +15,7 @@ import android.view.View;
|
|||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.QuadRect;
|
||||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||
import net.osmand.plus.GPXUtilities;
|
||||
import net.osmand.plus.GPXUtilities.GPXFile;
|
||||
|
@ -111,7 +112,8 @@ public class TrackActivity extends TabActivity {
|
|||
|
||||
public void addLine() {
|
||||
GPXFile gpxFile = getGpx();
|
||||
NewGpxLine newGpxLine = new NewGpxLine(gpxFile);
|
||||
QuadRect rect = getRect();
|
||||
NewGpxLine newGpxLine = new NewGpxLine(gpxFile, rect);
|
||||
WptPt pointToShow = gpxFile != null ? gpxFile.findPointToShow() : null;
|
||||
if (pointToShow != null) {
|
||||
LatLon location = new LatLon(pointToShow.getLatitude(), pointToShow.getLongitude());
|
||||
|
@ -127,6 +129,59 @@ public class TrackActivity extends TabActivity {
|
|||
}
|
||||
}
|
||||
|
||||
public QuadRect getRect() {
|
||||
double left = 0, right = 0;
|
||||
double top = 0, bottom = 0;
|
||||
if (getGpx() != null) {
|
||||
for (GPXUtilities.Track track : getGpx().tracks) {
|
||||
for (GPXUtilities.TrkSegment segment : track.segments) {
|
||||
for (WptPt p : segment.points) {
|
||||
if (left == 0 && right == 0) {
|
||||
left = p.getLongitude();
|
||||
right = p.getLongitude();
|
||||
top = p.getLatitude();
|
||||
bottom = p.getLatitude();
|
||||
} else {
|
||||
left = Math.min(left, p.getLongitude());
|
||||
right = Math.max(right, p.getLongitude());
|
||||
top = Math.max(top, p.getLatitude());
|
||||
bottom = Math.min(bottom, p.getLatitude());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (WptPt p : getGpx().points) {
|
||||
if (left == 0 && right == 0) {
|
||||
left = p.getLongitude();
|
||||
right = p.getLongitude();
|
||||
top = p.getLatitude();
|
||||
bottom = p.getLatitude();
|
||||
} else {
|
||||
left = Math.min(left, p.getLongitude());
|
||||
right = Math.max(right, p.getLongitude());
|
||||
top = Math.max(top, p.getLatitude());
|
||||
bottom = Math.min(bottom, p.getLatitude());
|
||||
}
|
||||
}
|
||||
for (GPXUtilities.Route route : getGpx().routes) {
|
||||
for (WptPt p : route.points) {
|
||||
if (left == 0 && right == 0) {
|
||||
left = p.getLongitude();
|
||||
right = p.getLongitude();
|
||||
top = p.getLatitude();
|
||||
bottom = p.getLatitude();
|
||||
} else {
|
||||
left = Math.min(left, p.getLongitude());
|
||||
right = Math.max(right, p.getLongitude());
|
||||
top = Math.max(top, p.getLatitude());
|
||||
bottom = Math.min(bottom, p.getLatitude());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return new QuadRect(left, top, right, bottom);
|
||||
}
|
||||
|
||||
protected void setGpxDataItem(GpxDataItem gpxDataItem) {
|
||||
this.gpxDataItem = gpxDataItem;
|
||||
}
|
||||
|
@ -351,13 +406,19 @@ public class TrackActivity extends TabActivity {
|
|||
|
||||
public static class NewGpxLine {
|
||||
private GPXFile gpxFile;
|
||||
private QuadRect rect;
|
||||
|
||||
public NewGpxLine(GPXFile gpxFile) {
|
||||
public NewGpxLine(GPXFile gpxFile, QuadRect rect) {
|
||||
this.gpxFile = gpxFile;
|
||||
this.rect = rect;
|
||||
}
|
||||
|
||||
public GPXFile getGpxFile() {
|
||||
return gpxFile;
|
||||
}
|
||||
|
||||
public QuadRect getRect() {
|
||||
return rect;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -698,56 +698,7 @@ public class TrackSegmentFragment extends OsmAndListFragment {
|
|||
}
|
||||
|
||||
private QuadRect getRect() {
|
||||
double left = 0, right = 0;
|
||||
double top = 0, bottom = 0;
|
||||
if (getGpx() != null) {
|
||||
for (Track track : getGpx().tracks) {
|
||||
for (TrkSegment segment : track.segments) {
|
||||
for (WptPt p : segment.points) {
|
||||
if (left == 0 && right == 0) {
|
||||
left = p.getLongitude();
|
||||
right = p.getLongitude();
|
||||
top = p.getLatitude();
|
||||
bottom = p.getLatitude();
|
||||
} else {
|
||||
left = Math.min(left, p.getLongitude());
|
||||
right = Math.max(right, p.getLongitude());
|
||||
top = Math.max(top, p.getLatitude());
|
||||
bottom = Math.min(bottom, p.getLatitude());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (WptPt p : getGpx().points) {
|
||||
if (left == 0 && right == 0) {
|
||||
left = p.getLongitude();
|
||||
right = p.getLongitude();
|
||||
top = p.getLatitude();
|
||||
bottom = p.getLatitude();
|
||||
} else {
|
||||
left = Math.min(left, p.getLongitude());
|
||||
right = Math.max(right, p.getLongitude());
|
||||
top = Math.max(top, p.getLatitude());
|
||||
bottom = Math.min(bottom, p.getLatitude());
|
||||
}
|
||||
}
|
||||
for (Route route : getGpx().routes) {
|
||||
for (WptPt p : route.points) {
|
||||
if (left == 0 && right == 0) {
|
||||
left = p.getLongitude();
|
||||
right = p.getLongitude();
|
||||
top = p.getLatitude();
|
||||
bottom = p.getLatitude();
|
||||
} else {
|
||||
left = Math.min(left, p.getLongitude());
|
||||
right = Math.max(right, p.getLongitude());
|
||||
top = Math.max(top, p.getLatitude());
|
||||
bottom = Math.min(bottom, p.getLatitude());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return new QuadRect(left, top, right, bottom);
|
||||
return getTrackActivity().getRect();
|
||||
}
|
||||
|
||||
private List<GpxDisplayGroup> getOriginalGroups() {
|
||||
|
|
Loading…
Reference in a new issue