Merge remote-tracking branch 'origin/follow-route' into follow-route
This commit is contained in:
@@ -112,15 +112,6 @@ public class Location implements Parcelable {
|
||||
return long1 + "," + lat1;
|
||||
}
|
||||
|
||||
/**
|
||||
* calculates the distance to the other location.
|
||||
* @param other the other location
|
||||
* @return the distance between the locations in meters
|
||||
*/
|
||||
public double getDistance(Location other) {
|
||||
return getDistance(this.getLat(),this.getLong(),other.getLat(),other.getLong());
|
||||
}
|
||||
|
||||
/**
|
||||
* calculates the distance between two coordinates
|
||||
* @param lat1 the first latitude
|
||||
@@ -145,8 +136,12 @@ public class Location implements Parcelable {
|
||||
|
||||
// Radius of earth in kilometers. Use 3956
|
||||
// for miles
|
||||
double r = 6371;
|
||||
|
||||
// if(miles) {
|
||||
// double r = 3956;
|
||||
// }
|
||||
// else {
|
||||
double r = 6371;
|
||||
// }
|
||||
// calculate the result
|
||||
double distance = c * r;
|
||||
|
||||
|
||||
@@ -66,7 +66,6 @@ public class Route implements Parcelable {
|
||||
}
|
||||
|
||||
public float getTotalDistance() {
|
||||
//TODO calculate total distance according to all locations in list
|
||||
return totalDistance;
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,9 @@ public enum RouteHandler {
|
||||
}
|
||||
|
||||
public void followRoute(Route route) {
|
||||
if (isFollowingRoute) {
|
||||
StaticData.INSTANCE.addTimeWalked(System.currentTimeMillis()-startedTime);
|
||||
}
|
||||
this.currentRoute = route;
|
||||
setFollowingRoute(true);
|
||||
startedTime = System.currentTimeMillis();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.a1.nextlocation.fragments;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
@@ -27,6 +28,7 @@ public class RouteDetailFragment extends Fragment {
|
||||
private Route route;
|
||||
private TextView routeDetailText;
|
||||
private TextView routeName;
|
||||
private TextView totalDistance;
|
||||
private ImageButton imageButton;
|
||||
|
||||
@Override
|
||||
@@ -35,6 +37,7 @@ public class RouteDetailFragment extends Fragment {
|
||||
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_route_detail, container, false);
|
||||
@@ -48,6 +51,10 @@ public class RouteDetailFragment extends Fragment {
|
||||
this.routeDetailText = view.findViewById(R.id.reoute_detail_tekst);
|
||||
this.routeDetailText.setText(this.route.getDescription());
|
||||
|
||||
this.totalDistance = view.findViewById(R.id.total_distance);
|
||||
String distance_tekst = getResources().getString(R.string.total_distance_route);
|
||||
this.totalDistance.setText(distance_tekst + " " + calculateRoute(this.route.getLocations()) + "m");
|
||||
|
||||
this.imageButton = view.findViewById(R.id.route_detail_back_button);
|
||||
this.imageButton.setOnClickListener(v -> {
|
||||
RouteFragment routeFragment = new RouteFragment();
|
||||
@@ -57,8 +64,6 @@ public class RouteDetailFragment extends Fragment {
|
||||
Button startButton = view.findViewById(R.id.start_route_button);
|
||||
startButton.setOnClickListener(this::startRoute);
|
||||
|
||||
calculateRoute(this.route.getLocations());
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -71,24 +76,28 @@ public class RouteDetailFragment extends Fragment {
|
||||
RouteHandler.INSTANCE.followRoute(route);
|
||||
Toast.makeText(requireContext(),"Route started!",Toast.LENGTH_SHORT).show();
|
||||
((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, new HomeFragment()).addToBackStack(null).commit();
|
||||
|
||||
}
|
||||
|
||||
//Calculates the route total distance
|
||||
/**
|
||||
* Calculates the distance between points
|
||||
* @param route the route that is calculated
|
||||
* @return the total distance of a route
|
||||
*/
|
||||
public double calculateRoute(List<Location> route){
|
||||
ArrayList<Location> routeArraylist = new ArrayList<>(route);
|
||||
double totalDistance = 0;
|
||||
Location firstLocation;
|
||||
Location secondLocation;
|
||||
System.out.println("Total locations: " + routeArraylist.size());
|
||||
//Cycles through the arraylist
|
||||
for(int i = 0; i < routeArraylist.size() - 1; i++) {
|
||||
firstLocation = routeArraylist.get(i);
|
||||
secondLocation = routeArraylist.get(i+1);
|
||||
System.out.println("locations distance calculated: " + (i+1) + " and " + (i+2) + "\nThe added distance is: " + Location.getDistance(firstLocation.getLat(), firstLocation.getLong(), secondLocation.getLat(), secondLocation.getLong()));
|
||||
//Calculates the distance between points
|
||||
totalDistance += Location.getDistance(firstLocation.getLat(), firstLocation.getLong(), secondLocation.getLat(), secondLocation.getLong());
|
||||
// totalDistance += firstLocation.getDistance(secondLocation);
|
||||
System.out.println("Distance nu: " + totalDistance);
|
||||
}
|
||||
System.out.println("Total Distance: " + totalDistance);
|
||||
return totalDistance;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import android.text.format.DateUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -44,7 +45,13 @@ public class StatisticFragment extends Fragment {
|
||||
double dist = StaticData.INSTANCE.getDistanceTraveled()/1000;
|
||||
distance.setText("" + String.format("%.1f",dist) + " km");
|
||||
locs.setText("" + StaticData.INSTANCE.getLocationsVisited());
|
||||
timeText.setText("" + StaticData.INSTANCE.getTimeWalkedRoute());
|
||||
|
||||
long seconds = StaticData.INSTANCE.getTimeWalkedRoute() / 1000;
|
||||
long p1 = seconds % 60;
|
||||
long p2 = seconds / 60;
|
||||
long p3 = p2 % 60;
|
||||
p2 = p2 / 60;
|
||||
timeText.setText(p2 + ":" + p3 + ":" + p1);
|
||||
|
||||
|
||||
this.couponList = CouponListManager.INSTANCE.getCouponList();
|
||||
|
||||
@@ -101,31 +101,7 @@ public class DirectionsResult {
|
||||
|
||||
JsonArray segments = properties.getAsJsonArray("segments");
|
||||
|
||||
for (JsonElement element : segments) {
|
||||
JsonObject segment = element.getAsJsonObject();
|
||||
|
||||
setDistance(segment.get("distance").getAsDouble());
|
||||
setDuration(segment.get("duration").getAsDouble());
|
||||
|
||||
JsonArray steps = segment.getAsJsonArray("steps");
|
||||
|
||||
for (JsonElement j : steps) {
|
||||
|
||||
DirectionsStep step = gson.fromJson(j, DirectionsStep.class);
|
||||
double lat;
|
||||
double longl;
|
||||
|
||||
// kinda stinky but it works
|
||||
for (int i = 0; i < 2; i++) {
|
||||
lat = this.wayPointCoordinates[step.getWay_points().get(i)][0];
|
||||
longl = this.wayPointCoordinates[step.getWay_points().get(i)][1];
|
||||
step.getWaypoints()[i] = new GeoPoint(lat, longl);
|
||||
}
|
||||
|
||||
addStep(step);
|
||||
Log.d(TAG, "parse: added step" + step);
|
||||
}
|
||||
}
|
||||
parseSegments(segments,gson);
|
||||
|
||||
startAndEndPoint[0] = this.getSteps().get(0).getWaypoints()[0];
|
||||
startAndEndPoint[1] = this.getSteps().get(this.getSteps().size()-1).getWaypoints()[1];
|
||||
@@ -133,8 +109,8 @@ public class DirectionsResult {
|
||||
}
|
||||
|
||||
/**
|
||||
* parses the given json string into this object. This method is used for when you want to
|
||||
* @param json
|
||||
* parses the given json string into this object. This method is used for when you have requested directions from the API for a {@link com.a1.nextlocation.data.Route route object}
|
||||
* @param json the json string
|
||||
*/
|
||||
public void parseRoute(String json) {
|
||||
|
||||
@@ -162,33 +138,54 @@ public class DirectionsResult {
|
||||
|
||||
JsonArray segments = route.getAsJsonArray("segments");
|
||||
|
||||
for (JsonElement e : segments) {
|
||||
JsonObject segment = e.getAsJsonObject();
|
||||
parseSegments(segments,gson);
|
||||
|
||||
setDistance(segment.get("distance").getAsDouble());
|
||||
setDuration(segment.get("duration").getAsDouble());
|
||||
|
||||
JsonArray steps = segment.getAsJsonArray("steps");
|
||||
|
||||
for (JsonElement j : steps) {
|
||||
|
||||
DirectionsStep step = gson.fromJson(j, DirectionsStep.class);
|
||||
double lat;
|
||||
double longl;
|
||||
|
||||
// kinda stinky but it works
|
||||
for (int i = 0; i < 2; i++) {
|
||||
lat = this.wayPointCoordinates[step.getWay_points().get(i)][0];
|
||||
longl = this.wayPointCoordinates[step.getWay_points().get(i)][1];
|
||||
step.getWaypoints()[i] = new GeoPoint(lat, longl);
|
||||
}
|
||||
|
||||
addStep(step);
|
||||
Log.d(TAG, "parse: added step" + step);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* parses different segments, and the steps in it using {@link DirectionsResult#parseSteps(JsonArray, Gson) the method for parsing steps}
|
||||
* @param segments the segments to parse
|
||||
* @param gson the gson object to use
|
||||
*/
|
||||
private void parseSegments(JsonArray segments, Gson gson) {
|
||||
//unfold the individual segments
|
||||
for (JsonElement e : segments) {
|
||||
JsonObject segment = e.getAsJsonObject();
|
||||
|
||||
setDistance(segment.get("distance").getAsDouble());
|
||||
setDuration(segment.get("duration").getAsDouble());
|
||||
|
||||
JsonArray steps = segment.getAsJsonArray("steps");
|
||||
|
||||
parseSteps(steps,gson);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* parses the given steps into this object, transforms them into a {@link DirectionsStep} object.
|
||||
* @param steps the steps to parse
|
||||
* @param gson the gson object to use
|
||||
*/
|
||||
private void parseSteps(JsonArray steps, Gson gson) {
|
||||
for (JsonElement j : steps) {
|
||||
|
||||
// parse everything into a directionsstep
|
||||
DirectionsStep step = gson.fromJson(j, DirectionsStep.class);
|
||||
double lat;
|
||||
double longl;
|
||||
|
||||
// kinda stinky but it works
|
||||
for (int i = 0; i < 2; i++) {
|
||||
lat = this.wayPointCoordinates[step.getWay_points().get(i)][0];
|
||||
longl = this.wayPointCoordinates[step.getWay_points().get(i)][1];
|
||||
step.getWaypoints()[i] = new GeoPoint(lat, longl);
|
||||
}
|
||||
|
||||
addStep(step);
|
||||
Log.d(TAG, "parse: added step" + step);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user