Code example for GoogleMap

Methods: addMarker, animateCamera, clear, moveCamera

1
 
	private void setFlagAndRoute(LatLng point) {
		 
		if (flag == 0 && mMarkerPoints.size() > 1) {
			mMarkerPoints.clear();
			mGoogleMap.clear();
			if (location != null) {
				onLocationChanged(location);
			} 
		} 
		if (mMarkerPoints.size() >= 2) {
			mMarkerPoints.clear();
			mGoogleMap.clear();
		} 
 
		drawMarker(point);
		// Checks, whether start and end locations are captured 
		if (mMarkerPoints.size() >= 2) {
 
			LatLng origin = mMarkerPoints.get(0);
			LatLng dest = mMarkerPoints.get(1);
 
			Toast.makeText(getApplicationContext(), dest.latitude + "," + dest.longitude, Toast.LENGTH_LONG).show();
 
			// 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";
 
		// Building the parameters to the web service 
		String parameters = str_origin + "&" + str_dest + "&" + sensor;
 
		// Output format 
		String output = "json";
 
		// Building the url to the web service 
		String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters;
		Log.d(MapRoutes.class.getName(), url);
 
		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;
			MarkerOptions markerOptions = new MarkerOptions();
			String distance = "";
			String duration = "";
 
			if (result.size() < 1) {
				Toast.makeText(getBaseContext(), "No Points", Toast.LENGTH_SHORT).show();
				return; 
			} 
 
			// 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);
 
					if (j == 0) { // Get distance from the list
						distance = point.get("distance");
						continue; 
					} else if (j == 1) { // Get duration from the list
						duration = point.get("duration");
						continue; 
					} 
 
					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(2);
				lineOptions.color(Color.RED);
 
			} 
 
			tvDistanceDuration.setText("Distance:" + distance + ", Duration:" + duration);
 
			// Drawing polyline in the Google Map for the i-th route 
			mGoogleMap.addPolyline(lineOptions);
		} 
	} 
 
	@Override 
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present. 
		getMenuInflater().inflate(R.menu.main, menu);
		return true; 
	} 
 
	private void drawMarker(LatLng point) {
		mMarkerPoints.add(point);
 
		// Creating MarkerOptions 
		MarkerOptions options = new MarkerOptions();
 
		// Setting the position of the marker 
		options.position(point);
 
		/** 
		 * For the start location, the color of marker is GREEN and for the end 
		 * location, the color of marker is RED. 
		 */ 
		if (mMarkerPoints.size() == 1) {
			options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
			options.title(address);
		} else if (mMarkerPoints.size() == 2) {
			options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
		} 
 
		// Add new marker to the Google Map Android API V2 
		mGoogleMap.addMarker(options);
	} 
 
	@Override 
	public void onLocationChanged(Location location) {
		if (mMarkerPoints.size() < 2) {
			mLatitude = location.getLatitude();
			mLongitude = location.getLongitude();
			LatLng point = new LatLng(mLatitude, mLongitude);
 
			mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(point));
			mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(12));
 
			drawMarker(point);
		} 
 
	}