diff --git a/app/build.gradle b/app/build.gradle index 9d6f2cc..84fdfce 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,6 +26,9 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + repositories { + maven { url "https://jitpack.io" } + } } dependencies { @@ -47,6 +50,9 @@ dependencies { //osm implementation 'org.osmdroid:osmdroid-android:6.1.8' + //osm bonus pack + implementation 'com.github.MKergall:osmbonuspack:6.6.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } \ No newline at end of file diff --git a/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java index a415247..8e33968 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/RouteFragment.java @@ -42,5 +42,6 @@ public class RouteFragment extends Fragment { public void onDirectionsAvailable(DirectionsResult result) { Log.d(TAG, "onDirectionsAvailable: got result! " + result); + } } \ No newline at end of file diff --git a/app/src/main/java/com/a1/nextlocation/json/DirectionsResult.java b/app/src/main/java/com/a1/nextlocation/json/DirectionsResult.java index e52caba..0282174 100644 --- a/app/src/main/java/com/a1/nextlocation/json/DirectionsResult.java +++ b/app/src/main/java/com/a1/nextlocation/json/DirectionsResult.java @@ -1,5 +1,7 @@ package com.a1.nextlocation.json; +import android.util.Log; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; @@ -7,13 +9,18 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import org.osmdroid.util.GeoPoint; + +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class DirectionsResult { + private static final String TAG = DirectionsResult.class.getCanonicalName(); private List steps = new ArrayList<>(); private double distance; private double duration; + private double[][] wayPointCoordinates; public List getSteps() { return steps; @@ -46,8 +53,21 @@ public class DirectionsResult { public void parse(String json) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); - JsonObject features = JsonParser.parseString(json).getAsJsonObject().get("features").getAsJsonArray().get(0).getAsJsonObject(); - JsonObject segment = features.get("properties").getAsJsonObject().getAsJsonArray("segments").get(0).getAsJsonObject(); + JsonObject feature = JsonParser.parseString(json).getAsJsonObject().get("features").getAsJsonArray().get(0).getAsJsonObject(); + JsonObject properties = feature.get("properties").getAsJsonObject(); + JsonArray wayPointCoordinates = feature.get("geometry").getAsJsonObject().getAsJsonArray("coordinates"); + this.wayPointCoordinates = new double[wayPointCoordinates.size()][2]; + + + for (int i = 0; i < wayPointCoordinates.size(); i++) { + JsonElement j = wayPointCoordinates.get(i); + JsonArray arr = j.getAsJsonArray(); + this.wayPointCoordinates[i][0] = arr.get(0).getAsDouble(); + this.wayPointCoordinates[i][1] = arr.get(1).getAsDouble(); + } + + + JsonObject segment = properties.getAsJsonArray("segments").get(0).getAsJsonObject(); setDistance(segment.get("distance").getAsDouble()); setDuration(segment.get("duration").getAsDouble()); @@ -56,7 +76,18 @@ public class DirectionsResult { for (JsonElement j : steps) { DirectionsStep step = gson.fromJson(j,DirectionsStep.class); + double lat; + double longl; + 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); } + + } } diff --git a/app/src/main/java/com/a1/nextlocation/json/DirectionsStep.java b/app/src/main/java/com/a1/nextlocation/json/DirectionsStep.java index 64678f8..c495cef 100644 --- a/app/src/main/java/com/a1/nextlocation/json/DirectionsStep.java +++ b/app/src/main/java/com/a1/nextlocation/json/DirectionsStep.java @@ -1,10 +1,26 @@ package com.a1.nextlocation.json; +import org.osmdroid.util.GeoPoint; + +import java.util.ArrayList; + +/** + * pojo class that holds the step object from the api response + */ public class DirectionsStep { private double distance; private double duration; private String instruction; private String name; + /** + * these are the actual waypoints that the step refers to. The first is the beginning of the step, and the second is what it leads to. + * The second geopoint is always the first geopoint of the next step in the list of the {@link DirectionsResult} object. + */ + private GeoPoint[] waypoints = new GeoPoint[2]; + /** + * this is a list of the waypoints that are in the response, it is called way_points so it can be automatically serialized with gson + */ + private ArrayList way_points; public double getDistance() { return distance; @@ -37,4 +53,20 @@ public class DirectionsStep { public void setName(String name) { this.name = name; } + + public ArrayList getWay_points() { + return way_points; + } + + public void setWay_points(ArrayList way_points) { + this.way_points = way_points; + } + + public GeoPoint[] getWaypoints() { + return waypoints; + } + + public void setWaypoints(GeoPoint[] waypoints) { + this.waypoints = waypoints; + } }