Add found object marker.

This commit is contained in:
chteufleur 2018-08-17 15:44:05 +02:00
parent e5709a7112
commit 91efe32482
9 changed files with 106 additions and 22 deletions

View File

@ -47,6 +47,7 @@ import java.util.Observer;
import fr.chteufleur.mytrackingdog.models.beans.MyLocation; import fr.chteufleur.mytrackingdog.models.beans.MyLocation;
import fr.chteufleur.mytrackingdog.models.beans.MyLocationArray; import fr.chteufleur.mytrackingdog.models.beans.MyLocationArray;
import fr.chteufleur.mytrackingdog.models.beans.WayPointLocation;
import fr.chteufleur.mytrackingdog.services.ServiceGps; import fr.chteufleur.mytrackingdog.services.ServiceGps;
public class MainActivity extends AppCompatActivity implements IOrientationConsumer, Observer { public class MainActivity extends AppCompatActivity implements IOrientationConsumer, Observer {
@ -191,17 +192,33 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
private void addMarker() { private void addMarker() {
MyLocation loc = serviceGps.addPointObject(); WayPointLocation loc = serviceGps.addPointObject();
GeoPoint gp = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude()); GeoPoint gp = new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude());
addMarker(gp); addMarker(gp, loc.isFound());
} }
private void addMarker(GeoPoint gp) { private void addMarker(GeoPoint gp, boolean isFound) {
Marker marker = new Marker(map); Marker marker = new Marker(map);
marker.setIcon(getResources().getDrawable(isFound ? R.drawable.ic_marker_blue : R.drawable.ic_marker_red));
marker.setPosition(gp); marker.setPosition(gp);
marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
marker.setTitle("Object"); marker.setTitle("Object");
marker.setDraggable(false); marker.setDraggable(false);
marker.setOnMarkerClickListener(new Marker.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker, MapView mapView) {
if (serviceGps.isDogActivated()) {
GeoPoint gp = marker.getPosition();
WayPointLocation wpl = serviceGps.getPoint(gp.getLatitude(), gp.getLongitude());
if (wpl != null) {
wpl.setFound();
marker.setIcon(getResources().getDrawable(R.drawable.ic_marker_blue));
marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
}
}
return true;
}
});
map.getOverlays().add(marker); map.getOverlays().add(marker);
} }
@ -326,7 +343,11 @@ public class MainActivity extends AppCompatActivity implements IOrientationConsu
updateTrailTrace(); updateTrailTrace();
calculTrailDistance(); calculTrailDistance();
for (MyLocation loc: serviceGps.getListGeoPointObjects()) { for (MyLocation loc: serviceGps.getListGeoPointObjects()) {
addMarker(new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude())); boolean isFound = false;
if (loc instanceof WayPointLocation) {
isFound = ((WayPointLocation) loc).isFound();
}
addMarker(new GeoPoint(loc.getLatitude(), loc.getLongitude(), loc.getAltitude()), isFound);
} }
} }
break; break;

View File

@ -143,6 +143,7 @@ public class ImportGpx extends Gpx {
double lat = Double.parseDouble(latStr); double lat = Double.parseDouble(latStr);
double lon = Double.parseDouble(lonStr); double lon = Double.parseDouble(lonStr);
long time = -1; long time = -1;
boolean isFound = false;
while (parser.next() != XmlPullParser.END_TAG) { while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) { if (parser.getEventType() != XmlPullParser.START_TAG) {
@ -151,11 +152,13 @@ public class ImportGpx extends Gpx {
String name = parser.getName(); String name = parser.getName();
if (name.equals("time")) { if (name.equals("time")) {
time = readTime(parser); time = readTime(parser);
} else if (name.equals("extensions")) {
isFound = readExtensions(parser);
} else { } else {
skip(parser); skip(parser);
} }
} }
return new WayPointLocation(lat, lon, time); return new WayPointLocation(lat, lon, time, isFound);
} }
@ -182,6 +185,33 @@ public class ImportGpx extends Gpx {
return ret; return ret;
} }
private boolean readExtensions(XmlPullParser parser) throws XmlPullParserException, IOException {
boolean ret = false;
parser.require(XmlPullParser.START_TAG, null, "extensions");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("found")) {
ret = readFound(parser);
} else {
skip(parser);
}
}
return ret;
}
private boolean readFound(XmlPullParser parser) throws XmlPullParserException, IOException {
boolean ret = false;
parser.require(XmlPullParser.START_TAG, null, "found");
ret = Boolean.parseBoolean(readText(parser));
parser.require(XmlPullParser.END_TAG, null, "found");
return ret;
}
private String readName(XmlPullParser parser) throws XmlPullParserException, IOException { private String readName(XmlPullParser parser) throws XmlPullParserException, IOException {
String ret; String ret;

View File

@ -2,11 +2,9 @@ package fr.chteufleur.mytrackingdog.models;
import android.util.Log; import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import fr.chteufleur.mytrackingdog.models.beans.MyLocation; import fr.chteufleur.mytrackingdog.models.beans.MyLocation;
import fr.chteufleur.mytrackingdog.models.beans.MyLocationArray; import fr.chteufleur.mytrackingdog.models.beans.MyLocationArray;
import fr.chteufleur.mytrackingdog.models.beans.WayPointLocation;
public class Traces { public class Traces {
@ -21,17 +19,23 @@ public class Traces {
public void addPointTraceur(MyLocation point) { public void addPointTraceur(MyLocation point) {
Log.i(TAG, "add point traceur");
listPointTraceur.add(point); listPointTraceur.add(point);
} }
public void addPointDog(MyLocation point) { public void addPointDog(MyLocation point) {
Log.i(TAG, "add point dog");
listPointDog.add(point); listPointDog.add(point);
} }
public void addPointObject(MyLocation point) { public void addPointObject(WayPointLocation point) {
Log.i(TAG, "add point object ("+point.toString()+")");
listPointObjects.add(point); listPointObjects.add(point);
} }
public WayPointLocation getPoint(double lat, double lon) {
WayPointLocation ret = null;
for (MyLocation ml: listPointObjects) {
if (ml.isEquals(lat, lon) && ml instanceof WayPointLocation) {
ret = (WayPointLocation) ml;
}
}
return ret;
}
public void addCurrentPoint(MyLocation point) { public void addCurrentPoint(MyLocation point) {
if (traceurActivated) { if (traceurActivated) {
addPointTraceur(point); addPointTraceur(point);

View File

@ -102,6 +102,11 @@ public class MyLocation {
ret += "</trkpt>"; ret += "</trkpt>";
return ret; return ret;
} }
public boolean isEquals(double lat, double lon) {
return this.latitude == lat && this.longitude == lon;
}
@Override @Override
public String toString() { public String toString() {
return String.format("lat=%,4f ; lon=%,4f ; time=%s", getLatitude(), getLongitude(), getDate()); return String.format("lat=%,4f ; lon=%,4f ; time=%s", getLatitude(), getLongitude(), getDate());

View File

@ -1,14 +1,32 @@
package fr.chteufleur.mytrackingdog.models.beans; package fr.chteufleur.mytrackingdog.models.beans;
import android.location.Location;
public class WayPointLocation extends MyLocation { public class WayPointLocation extends MyLocation {
public WayPointLocation(Location l) {
super(l); private boolean isFound = false;
public WayPointLocation(MyLocation l) {
this(l.getLatitude(), l.getLongitude(), l.getTime(), false);
}
public WayPointLocation(double lat, double lon, long time, boolean isFound) {
super(lat, lon, time);
this.isFound = isFound;
} }
public WayPointLocation(double lat, double lon, long time) { public boolean isFound() {
super(lat, lon, time); return isFound;
}
public void setFound() {
isFound = true;
}
public void setNotFound() {
isFound = false;
}
public String toWayPoint() {
String ret = "<wpt lat=\""+getLatitude()+"\" lon=\""+getLongitude()+"\">";
ret += "<time>"+getDate()+"</time>";
ret += "<extensions><found>"+isFound+"</found></extensions>";
ret += "</wpt>";
return ret;
} }
} }

View File

@ -146,11 +146,13 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
return traces.isDogActivated(); return traces.isDogActivated();
} }
public MyLocation addPointObject() { public WayPointLocation addPointObject() {
WayPointLocation wpl = null;
if (currentLocation != null) { if (currentLocation != null) {
traces.addPointObject(currentLocation); wpl = new WayPointLocation(currentLocation);
traces.addPointObject(wpl);
} }
return currentLocation; return wpl;
} }
public MyLocationArray getListGeoPointTraceur() { public MyLocationArray getListGeoPointTraceur() {
@ -162,6 +164,9 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
public MyLocationArray getListGeoPointObjects() { public MyLocationArray getListGeoPointObjects() {
return traces.getListPointObjects(); return traces.getListPointObjects();
} }
public WayPointLocation getPoint(double lat, double lon) {
return traces.getPoint(lat, lon);
}
public String getFileName(String prefix) { public String getFileName(String prefix) {
SimpleDateFormat formater = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); SimpleDateFormat formater = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
@ -174,6 +179,7 @@ public class ServiceGps extends Observable implements IServiceGps, LocationListe
public boolean exportDogTraceToGpx() { public boolean exportDogTraceToGpx() {
File file = new File(getFileName(Gpx.DOG_TRACE_NAME)); File file = new File(getFileName(Gpx.DOG_TRACE_NAME));
ExportGpx exportGpx = new ExportGpx(file, Gpx.DOG_TRACE_NAME); ExportGpx exportGpx = new ExportGpx(file, Gpx.DOG_TRACE_NAME);
exportGpx.setObjects(traces.getListPointObjects());
exportGpx.setTrace(traces.getListPointDog()); exportGpx.setTrace(traces.getListPointDog());
return exportGpx.export(); return exportGpx.export();
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B