Skip to content

Commit

Permalink
Marker uses Position.
Browse files Browse the repository at this point in the history
  • Loading branch information
dennisguse committed Feb 21, 2025
1 parent 9434f7e commit e1b5e9f
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 94 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,9 @@ public static TrackData createTestingTrack(Track.Id trackId) {
stats.setTotalDistance(Distance.of(0));
stats.setTotalTime(Duration.ofMillis(0));
List<Marker> markers = List.of(
new Marker("Marker 1", "Marker description 1", "Marker category 3", "", trackId, trackPoints.get(1), null),
new Marker("Marker 2", "Marker description 2", "Marker category 3", "", trackId, trackPoints.get(4), null),
new Marker("Marker 3", "Marker description 3", "Marker category 3", "", trackId, trackPoints.get(5), null)
new Marker(trackId, trackPoints.get(1), "Marker 1", "Marker description 1", "Marker category 3", "", null),
new Marker(trackId, trackPoints.get(4), "Marker 2", "Marker description 2", "Marker category 3", "", null),
new Marker(trackId, trackPoints.get(5), "Marker 3", "Marker description 3", "Marker category 3", "", null)
);

return new TrackData(track, trackPoints, markers);
Expand Down Expand Up @@ -151,7 +151,7 @@ public static Marker createMarkerWithPhoto(Context context, Track.Id trackId, Tr
stats.setTotalDistance(Distance.of(0));
stats.setTotalTime(Duration.ofMillis(0));

return new Marker("Marker name", "Marker description", "Marker category", "", trackId, trackPoint, photoUri);
return new Marker(trackId, trackPoint, "Marker name", "Marker description", "Marker category", "", photoUri);
}

public static List<TrackPoint> getTrackPoints(ContentProviderUtils contentProviderUtils, Track.Id trackId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public void setUp() throws TimeoutException {
Distance sensorDistance = Distance.of(10); // recording distance interval

sendLocation(trackPointCreator, "2020-02-02T02:02:03Z", 3, 14, 10, 13, 15, 10, 1f);
contentProviderUtils.insertMarker(new Marker("Marker 1", "Marker 1 desc", "Marker 1 category", null, trackId, service.getLastStoredTrackPointWithLocation(), null));
contentProviderUtils.insertMarker(new Marker(trackId, service.getLastStoredTrackPointWithLocation(), "Marker 1", "Marker 1 desc", "Marker 1 category", null, null));

// A sensor-only TrackPoint
trackPointCreator.setClock("2020-02-02T02:02:04Z");
Expand All @@ -155,7 +155,7 @@ public void setUp() throws TimeoutException {
mockSensorData(trackPointCreator, 5f, Distance.of(2), 69f, 3f, 50f, null); // Distance will be added to next TrackPoint

sendLocation(trackPointCreator, "2020-02-02T02:02:17Z", 3, 14.001, 10, 13, 15, 10, 0f);
contentProviderUtils.insertMarker(new Marker("Marker 2", "Marker 2 desc", "Marker 2 category", null, trackId, service.getLastStoredTrackPointWithLocation(), null));
contentProviderUtils.insertMarker(new Marker(trackId, service.getLastStoredTrackPointWithLocation(), "Marker 2", "Marker 2 desc", "Marker 2 category", null, null));

trackPointCreator.setClock("2020-02-02T02:02:18Z");
trackPointCreator.getSensorManager().sensorDataSet = new SensorDataSet(trackPointCreator);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -385,23 +385,39 @@ public Marker createMarker(Cursor cursor) {
int bearingIndex = cursor.getColumnIndexOrThrow(MarkerColumns.BEARING);
int photoUrlIndex = cursor.getColumnIndexOrThrow(MarkerColumns.PHOTOURL);

Track.Id trackId = new Track.Id(cursor.getLong(trackIdIndex));
Marker marker = new Marker(trackId, Instant.ofEpochMilli(cursor.getLong(timeIndex)));

Double latitude = null;
Double longitude = null;
Altitude.WGS84 altitude = null;
Distance horizontalAccuracy = null;
Float bearing = null;
if (!cursor.isNull(longitudeIndex) && !cursor.isNull(latitudeIndex)) {
marker.setLongitude(((double) cursor.getInt(longitudeIndex)) / 1E6);
marker.setLatitude(((double) cursor.getInt(latitudeIndex)) / 1E6);
latitude = (((double) cursor.getInt(latitudeIndex)) / 1E6);
longitude = (((double) cursor.getInt(longitudeIndex)) / 1E6);
}
if (!cursor.isNull(altitudeIndex)) {
marker.setAltitude(Altitude.WGS84.of(cursor.getFloat(altitudeIndex)));
altitude = Altitude.WGS84.of(cursor.getFloat(altitudeIndex));
}
if (!cursor.isNull(accuracyIndex)) {
marker.setAccuracy(Distance.of(cursor.getFloat(accuracyIndex)));
horizontalAccuracy = Distance.of(cursor.getFloat(accuracyIndex));
}
if (!cursor.isNull(bearingIndex)) {
marker.setBearing(cursor.getFloat(bearingIndex));
bearing = cursor.getFloat(bearingIndex);
}

Position position = new Position(
Instant.ofEpochMilli(cursor.getLong(timeIndex)),
latitude,
longitude,
horizontalAccuracy,
altitude,
null,
bearing,
null);

Track.Id trackId = new Track.Id(cursor.getLong(trackIdIndex));
Marker marker = new Marker(trackId, position);

if (!cursor.isNull(idIndex)) {
marker.setId(new Marker.Id(cursor.getLong(idIndex)));
}
Expand All @@ -420,6 +436,8 @@ public Marker createMarker(Cursor cursor) {
if (!cursor.isNull(photoUrlIndex)) {
marker.setPhotoUrl(Uri.parse(cursor.getString(photoUrlIndex)));
}


return marker;
}

Expand Down Expand Up @@ -532,8 +550,8 @@ ContentValues createContentValues(@NonNull Marker marker) {
values.put(MarkerColumns.CATEGORY, marker.getCategory());
values.put(MarkerColumns.ICON, marker.getIcon());
values.put(MarkerColumns.TRACKID, marker.getTrackId().id());
values.put(MarkerColumns.LONGITUDE, (int) (marker.getLongitude() * 1E6));
values.put(MarkerColumns.LATITUDE, (int) (marker.getLatitude() * 1E6));
values.put(MarkerColumns.LONGITUDE, (int) (marker.getPosition().longitude() * 1E6));
values.put(MarkerColumns.LATITUDE, (int) (marker.getPosition().latitude() * 1E6));
values.put(MarkerColumns.TIME, marker.getTime().toEpochMilli());
if (marker.hasAltitude()) {
values.put(MarkerColumns.ALTITUDE, marker.getAltitude().toM());
Expand Down
101 changes: 23 additions & 78 deletions src/main/java/de/dennisguse/opentracks/data/models/Marker.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

package de.dennisguse.opentracks.data.models;

import android.location.Location;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
Expand All @@ -25,9 +24,10 @@
import androidx.annotation.Nullable;

import java.time.Instant;
import java.util.Objects;

/**
* NOTE: A marker is indirectly (via it's location) assigned to one {@link TrackPoint} with trackPoint.hasLocation() == true.
* NOTE: A marker is indirectly (via it's location) assigned to one {@link TrackPoint} via trackPoint.time.
*
* @author Leif Hendrik Wilden
* @author Rodrigo Damazio
Expand All @@ -42,34 +42,27 @@ public final class Marker {
private String icon = "";
private Track.Id trackId;

private final Instant time;
private Double latitude;
private Double longitude;
@Deprecated //Not needed
private Distance accuracy;
private Altitude altitude;
private Float bearing;
//Some data might not be used.
private final Position position;

private Uri photoUrl = null;

public Marker(@Nullable Track.Id trackId, Instant time) {
this.trackId = trackId;
this.time = time;
}

public Marker(@Nullable Track.Id trackId, @NonNull TrackPoint trackPoint) {
this.trackId = trackId;

this.time = trackPoint.getTime();

if (!trackPoint.hasLocation())
throw new RuntimeException("Marker requires a trackpoint with a location.");

setTrackPoint(trackPoint);
this.position = trackPoint.getPosition();
}

@Deprecated
public Marker(String name, String description, String category, String icon, @NonNull Track.Id trackId, @NonNull TrackPoint trackPoint, Uri photoUrl) {
public Marker(@Nullable Track.Id trackId, @NonNull Position position) {
this.trackId = trackId;
Objects.requireNonNull(position);
this.position = position;
}

public Marker(@Nullable Track.Id trackId, @NonNull TrackPoint trackPoint, String name, String description, String category, String icon, Uri photoUrl) {
this(trackId, trackPoint);
this.name = name;
this.description = description;
Expand All @@ -78,17 +71,8 @@ public Marker(String name, String description, String category, String icon, @No
this.photoUrl = photoUrl;
}

//TODO Is somehow part of the initialization process. Can we at least limit visibility?
public void setTrackPoint(TrackPoint trackPoint) {
this.latitude = trackPoint.getLatitude();
this.longitude = trackPoint.getLongitude();
if (trackPoint.hasHorizontalAccuracy()) this.accuracy = trackPoint.getHorizontalAccuracy();
if (trackPoint.hasAltitude()) this.altitude = trackPoint.getAltitude();
if (trackPoint.hasBearing()) this.bearing = trackPoint.getBearing();
}

/**
* May be null if the it was not loaded from the database.
* May be null if the Marker was not loaded from the database.
*/
@Nullable
public Id getId() {
Expand All @@ -100,7 +84,7 @@ public void setId(Id id) {
}

public Instant getTime() {
return time;
return position.time();
}

public String getName() {
Expand Down Expand Up @@ -144,79 +128,40 @@ public void setTrackId(@NonNull Track.Id trackId) {
this.trackId = trackId;
}

public boolean hasLocation() {
return latitude != null || longitude != null;
}

public Position getPosition() {
Location location = new Location("");
location.setTime(time.toEpochMilli());
if (hasLocation()) {
location.setLatitude(latitude);
location.setLongitude(longitude);
}
if (hasBearing()) {
location.setBearing(bearing);
}
if (hasAccuracy()) {
location.setAccuracy((float) accuracy.toM());
}
if (hasAltitude()) {
location.setAltitude(altitude.toM());
}
return Position.of(location);
return position;
}

public double getLatitude() {
return latitude;
}

public void setLatitude(double latitude) {
this.latitude = latitude;
return position.latitude();
}

public double getLongitude() {
return longitude;
}

public void setLongitude(double longitude) {
this.longitude = longitude;
return position.longitude();
}

public boolean hasAccuracy() {
return accuracy != null;
return position.hasHorizontalAccuracy();
}

public Distance getAccuracy() {
return accuracy;
}

public void setAccuracy(Distance accuracy) {
this.accuracy = accuracy;
return position.horizontalAccuracy();
}

public boolean hasAltitude() {
return altitude != null;
return position.hasAltitude();
}

public Altitude getAltitude() {
return altitude;
}

public void setAltitude(Altitude altitude) {
this.altitude = altitude;
return position.altitude();
}

public boolean hasBearing() {
return bearing != null;
return position.hasBearing();
}

public Float getBearing() {
return bearing;
}

public void setBearing(float bearing) {
this.bearing = bearing;
return position.bearing();
}

public Uri getPhotoUrl() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ public LiveData<Marker> createNewMarker(Track.Id trackId, TrackPoint trackPoint)
String name = getApplication().getString(R.string.marker_name_format, nextMarkerNumber + 1);
String icon = getApplication().getString(R.string.marker_icon_url);

Marker marker = new Marker(name, "", "", icon, trackId, trackPoint, null);
Marker marker = new Marker(trackId, trackPoint, name, "", "", icon, null);

if (markerData == null) {
markerData = new MutableLiveData<>();
Expand Down

0 comments on commit e1b5e9f

Please sign in to comment.