Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.d4mdp.plesir.activity;
- import android.Manifest;
- import android.content.pm.PackageManager;
- import android.graphics.Color;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.support.v4.app.FragmentActivity;
- import android.util.Log;
- import com.d4mdp.plesir.R;
- import com.d4mdp.plesir.util.DirectionsJSONParser;
- import com.google.android.gms.maps.CameraUpdateFactory;
- import com.google.android.gms.maps.GoogleMap;
- import com.google.android.gms.maps.SupportMapFragment;
- import com.google.android.gms.maps.model.LatLng;
- import com.google.android.gms.maps.model.MarkerOptions;
- import com.google.android.gms.maps.model.PolylineOptions;
- import org.json.JSONObject;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- /**
- * Created by Achmad Siddik on 18/04/2016.
- */
- public class WayPointMapActivity extends FragmentActivity {
- GoogleMap map;
- public static ArrayList<HashMap<String,String>> markerPoints=new ArrayList<>();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_maps);
- // Getting reference to SupportMapFragment of the activity_main
- SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
- map = fm.getMap();
- map.setMyLocationEnabled(true);
- addingMap();
- }
- public void addingMap(){
- if(markerPoints.size() >= 2){
- double latitudeOrigin=Double.parseDouble(markerPoints.get(0).get("latitude"));
- double longitudeOrigin=Double.parseDouble(markerPoints.get(0).get("longitude"));
- LatLng origin = new LatLng(latitudeOrigin,longitudeOrigin);
- double latitudeDest=Double.parseDouble(markerPoints.get(markerPoints.size()-1).get("latitude"));
- double longitudeDest=Double.parseDouble(markerPoints.get(markerPoints.size()-1).get("longitude"));
- LatLng dest = new LatLng(latitudeDest,longitudeDest);
- MarkerOptions options=new MarkerOptions();
- options.title(markerPoints.get(0).get("location_name"));
- MarkerOptions options2=new MarkerOptions();
- options2.title(markerPoints.get(markerPoints.size()-1).get("location_name"));
- options.position(origin);
- options2.position(dest);
- map.addMarker(options);
- map.addMarker(options2);
- map.animateCamera(CameraUpdateFactory.newLatLngZoom(origin,13));
- // Getting URL to the Google Directions API
- String url = getDirectionsUrl(origin, dest);
- DownloadTask downloadTask = new DownloadTask();
- // Start downloading json data from Google Directions API
- downloadTask.execute(url);
- }
- }
- private String getDirectionsUrl(LatLng origin,LatLng dest){
- // Origin of route
- String str_origin = "origin="+origin.latitude+","+origin.longitude;
- // Destination of route
- String str_dest = "destination="+dest.latitude+","+dest.longitude;
- // Sensor enabled
- String sensor = "sensor=false";
- // Waypoints
- String waypoints = "";
- for(int i=1;i<markerPoints.size();i++){
- HashMap<String,String> pecahData=markerPoints.get(i);
- String getLocationName=pecahData.get("location_name");
- double getLatitude=Double.parseDouble(pecahData.get("latitude"));
- double getLongitude=Double.parseDouble(pecahData.get("longitude"));
- MarkerOptions options=new MarkerOptions();
- LatLng point = new LatLng(getLatitude,getLongitude);
- options.title(getLocationName);
- options.position(point);
- map.addMarker(options);
- if(i==1)
- waypoints = "waypoints=";
- waypoints += point.latitude + "," + point.longitude + "|";
- }
- // Building the parameters to the web service
- String parameters = str_origin+"&"+str_dest+"&"+sensor+"&"+waypoints;
- // Output format
- String output = "json";
- // Building the url to the web service
- String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;
- return url;
- }
- /** A method to download json data from url */
- private String downloadUrl(String strUrl) throws IOException {
- String data = "";
- InputStream iStream = null;
- HttpURLConnection urlConnection = null;
- try{
- URL url = new URL(strUrl);
- // Creating an http connection to communicate with url
- urlConnection = (HttpURLConnection) url.openConnection();
- // Connecting to url
- urlConnection.connect();
- // Reading data from url
- iStream = urlConnection.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
- StringBuffer sb = new StringBuffer();
- String line = "";
- while( ( line = br.readLine()) != null){
- sb.append(line);
- }
- data = sb.toString();
- br.close();
- }catch(Exception e){
- Log.d("Exception while downloading url", e.toString());
- }finally{
- iStream.close();
- urlConnection.disconnect();
- }
- return data;
- }
- // Fetches data from url passed
- private class DownloadTask extends AsyncTask<String, Void, String> {
- // Downloading data in non-ui thread
- @Override
- protected String doInBackground(String... url) {
- // For storing data from web service
- String data = "";
- try{
- // Fetching the data from web service
- data = downloadUrl(url[0]);
- }catch(Exception e){
- Log.d("Background Task",e.toString());
- }
- return data;
- }
- // Executes in UI thread, after the execution of
- // doInBackground()
- @Override
- protected void onPostExecute(String result) {
- super.onPostExecute(result);
- ParserTask parserTask = new ParserTask();
- // Invokes the thread for parsing the JSON data
- parserTask.execute(result);
- }
- }
- /** A class to parse the Google Places in JSON format */
- private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{
- // Parsing the data in non-ui thread
- @Override
- protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {
- JSONObject jObject;
- List<List<HashMap<String, String>>> routes = null;
- try{
- jObject = new JSONObject(jsonData[0]);
- DirectionsJSONParser parser = new DirectionsJSONParser();
- // Starts parsing data
- routes = parser.parse(jObject);
- }catch(Exception e){
- e.printStackTrace();
- }
- return routes;
- }
- // Executes in UI thread, after the parsing process
- @Override
- protected void onPostExecute(List<List<HashMap<String, String>>> result) {
- ArrayList<LatLng> points = null;
- PolylineOptions lineOptions = null;
- // Traversing through all the routes
- for(int i=0;i<result.size();i++){
- points = new ArrayList<LatLng>();
- lineOptions = new PolylineOptions();
- // Fetching i-th route
- List<HashMap<String, String>> path = result.get(i);
- // Fetching all the points in i-th route
- for(int j=0;j<path.size();j++){
- HashMap<String,String> point = path.get(j);
- double lat = Double.parseDouble(point.get("lat"));
- double lng = Double.parseDouble(point.get("lng"));
- LatLng position = new LatLng(lat, lng);
- points.add(position);
- }
- // Adding all the points in the route to LineOptions
- lineOptions.addAll(points);
- lineOptions.width(5);
- lineOptions.color(Color.RED);
- }
- // Drawing polyline in the Google Map for the i-th route
- map.addPolyline(lineOptions);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement