Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.43 KB | None | 0 0
  1. package com.javapapers.android.maps.path;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6.  
  7. import org.json.JSONObject;
  8.  
  9. import android.graphics.Color;
  10. import android.os.AsyncTask;
  11. import android.os.Bundle;
  12. import android.support.v4.app.FragmentActivity;
  13. import android.util.Log;
  14.  
  15. import com.google.android.gms.maps.CameraUpdateFactory;
  16. import com.google.android.gms.maps.GoogleMap;
  17. import com.google.android.gms.maps.SupportMapFragment;
  18. import com.google.android.gms.maps.model.LatLng;
  19. import com.google.android.gms.maps.model.MarkerOptions;
  20. import com.google.android.gms.maps.model.PolylineOptions;
  21.  
  22. public class PathGoogleMapActivity extends FragmentActivity {
  23.  
  24.     private static final LatLng LOWER_MANHATTAN = new LatLng(40.722543,
  25.             -73.998585);
  26.     private static final LatLng BROOKLYN_BRIDGE = new LatLng(40.7057, -73.9964);
  27.     private static final LatLng WALL_STREET = new LatLng(40.7064, -74.0094);
  28.  
  29.     GoogleMap googleMap;
  30.     final String TAG = "PathGoogleMapActivity";
  31.  
  32.     @Override
  33.     protected void onCreate(Bundle savedInstanceState) {
  34.         super.onCreate(savedInstanceState);
  35.         setContentView(R.layout.activity_path_google_map);
  36.         SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager()
  37.                 .findFragmentById(R.id.map);
  38.         googleMap = fm.getMap();
  39.  
  40.         MarkerOptions options = new MarkerOptions();
  41.         options.position(LOWER_MANHATTAN);
  42.         options.position(BROOKLYN_BRIDGE);
  43.         options.position(WALL_STREET);
  44.         googleMap.addMarker(options);
  45.         String url = getMapsApiDirectionsUrl();
  46.         ReadTask downloadTask = new ReadTask();
  47.         downloadTask.execute(url);
  48.  
  49.         googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(BROOKLYN_BRIDGE,
  50.                 13));
  51.         addMarkers();
  52.  
  53.     }
  54.  
  55.     private String getMapsApiDirectionsUrl() {
  56.         String waypoints = "waypoints=optimize:true|"
  57.                 + LOWER_MANHATTAN.latitude + "," + LOWER_MANHATTAN.longitude
  58.                 + "|" + "|" + BROOKLYN_BRIDGE.latitude + ","
  59.                 + BROOKLYN_BRIDGE.longitude + "|" + WALL_STREET.latitude + ","
  60.                 + WALL_STREET.longitude;
  61.  
  62.         String sensor = "sensor=false";
  63.         String params = waypoints + "&" + sensor;
  64.         String output = "json";
  65.         String url = "https://maps.googleapis.com/maps/api/directions/"
  66.                 + output + "?" + params;
  67.         return url;
  68.     }
  69.  
  70.     private void addMarkers() {
  71.         if (googleMap != null) {
  72.             googleMap.addMarker(new MarkerOptions().position(BROOKLYN_BRIDGE)
  73.                     .title("First Point"));
  74.             googleMap.addMarker(new MarkerOptions().position(LOWER_MANHATTAN)
  75.                     .title("Second Point"));
  76.             googleMap.addMarker(new MarkerOptions().position(WALL_STREET)
  77.                     .title("Third Point"));
  78.         }
  79.     }
  80.  
  81.     private class ReadTask extends AsyncTask<String, Void, String> {
  82.         @Override
  83.         protected String doInBackground(String... url) {
  84.             String data = "";
  85.             try {
  86.                 HttpConnection http = new HttpConnection();
  87.                 data = http.readUrl(url[0]);
  88.             } catch (Exception e) {
  89.                 Log.d("Background Task", e.toString());
  90.             }
  91.             return data;
  92.         }
  93.  
  94.         @Override
  95.         protected void onPostExecute(String result) {
  96.             super.onPostExecute(result);
  97.             new ParserTask().execute(result);
  98.         }
  99.     }
  100.  
  101.     private class ParserTask extends
  102.             AsyncTask<String, Integer, List<List<HashMap<String, String>>>> {
  103.  
  104.         @Override
  105.         protected List<List<HashMap<String, String>>> doInBackground(
  106.                 String... jsonData) {
  107.  
  108.             JSONObject jObject;
  109.             List<List<HashMap<String, String>>> routes = null;
  110.  
  111.             try {
  112.                 jObject = new JSONObject(jsonData[0]);
  113.                 PathJSONParser parser = new PathJSONParser();
  114.                 routes = parser.parse(jObject);
  115.             } catch (Exception e) {
  116.                 e.printStackTrace();
  117.             }
  118.             return routes;
  119.         }
  120.  
  121.         @Override
  122.         protected void onPostExecute(List<List<HashMap<String, String>>> routes) {
  123.             ArrayList<LatLng> points = null;
  124.             PolylineOptions polyLineOptions = null;
  125.  
  126.             // traversing through routes
  127.             for (int i = 0; i < routes.size(); i++) {
  128.                 points = new ArrayList<LatLng>();
  129.                 polyLineOptions = new PolylineOptions();
  130.                 List<HashMap<String, String>> path = routes.get(i);
  131.  
  132.                 for (int j = 0; j < path.size(); j++) {
  133.                     HashMap<String, String> point = path.get(j);
  134.  
  135.                     double lat = Double.parseDouble(point.get("lat"));
  136.                     double lng = Double.parseDouble(point.get("lng"));
  137.                     LatLng position = new LatLng(lat, lng);
  138.  
  139.                     points.add(position);
  140.                 }
  141.  
  142.                 polyLineOptions.addAll(points);
  143.                 polyLineOptions.width(2);
  144.                 polyLineOptions.color(Color.BLUE);
  145.             }
  146.  
  147.             googleMap.addPolyline(polyLineOptions);
  148.         }
  149.     }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement