mirror of
https://github.com/Nezumi-2711/Foodify.git
synced 2026-09-22 20:00:50 +00:00
Tracking realtime shipper
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
package com.capstone.foodify;
|
||||
|
||||
import com.google.android.gms.maps.model.LatLng;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class DirectionJSONParser {
|
||||
|
||||
/**
|
||||
* Receives a JSONObject and returns a list of lists containing latitude and longitude
|
||||
*/
|
||||
public List<List<HashMap<String, String>>> parse(JSONObject jObject) {
|
||||
|
||||
List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String, String>>>();
|
||||
JSONArray jRoutes = null;
|
||||
JSONArray jLegs = null;
|
||||
JSONArray jSteps = null;
|
||||
|
||||
try {
|
||||
|
||||
jRoutes = jObject.getJSONArray("routes");
|
||||
|
||||
/** Traversing all routes */
|
||||
for (int i = 0; i < jRoutes.length(); i++) {
|
||||
jLegs = ((JSONObject) jRoutes.get(i)).getJSONArray("legs");
|
||||
List path = new ArrayList<HashMap<String, String>>();
|
||||
|
||||
/** Traversing all legs */
|
||||
for (int j = 0; j < jLegs.length(); j++) {
|
||||
jSteps = ((JSONObject) jLegs.get(j)).getJSONArray("steps");
|
||||
|
||||
/** Traversing all steps */
|
||||
for (int k = 0; k < jSteps.length(); k++) {
|
||||
String polyline = "";
|
||||
polyline = (String) ((JSONObject) ((JSONObject) jSteps.get(k)).get("polyline")).get("points");
|
||||
List list = decodePoly(polyline);
|
||||
|
||||
/** Traversing all points */
|
||||
for (int l = 0; l < list.size(); l++) {
|
||||
HashMap<String, String> hm = new HashMap<String, String>();
|
||||
hm.put("lat", Double.toString(((LatLng) list.get(l)).latitude));
|
||||
hm.put("lng", Double.toString(((LatLng) list.get(l)).longitude));
|
||||
path.add(hm);
|
||||
}
|
||||
}
|
||||
routes.add(path);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
return routes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to decode polyline points
|
||||
* Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
|
||||
*/
|
||||
private List decodePoly(String encoded) {
|
||||
List poly = new ArrayList();
|
||||
int index = 0, len = encoded.length();
|
||||
int lat = 0, lng = 0;
|
||||
|
||||
while (index < len) {
|
||||
int b, shift = 0, result = 0;
|
||||
do {
|
||||
b = encoded.charAt(index++) - 63;
|
||||
result |= (b & 0x1f) << shift;
|
||||
shift += 5;
|
||||
} while (b >= 0x20);
|
||||
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
|
||||
lat += dlat;
|
||||
|
||||
shift = 0;
|
||||
result = 0;
|
||||
do {
|
||||
b = encoded.charAt(index++) - 63;
|
||||
result |= (b & 0x1f) << shift;
|
||||
shift += 5;
|
||||
} while (b >= 0x20);
|
||||
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
|
||||
lng += dlng;
|
||||
|
||||
LatLng p = new LatLng((((double) lat / 1E5)),
|
||||
(((double) lng / 1E5)));
|
||||
poly.add(p);
|
||||
}
|
||||
|
||||
return poly;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user