Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2014
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.50 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.UnsupportedEncodingException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8.  
  9. import org.apache.http.HttpEntity;
  10. import org.apache.http.HttpResponse;
  11. import org.apache.http.client.ClientProtocolException;
  12. import org.apache.http.client.methods.HttpPost;
  13. import org.apache.http.impl.client.DefaultHttpClient;
  14. import org.json.JSONArray;
  15. import org.json.JSONObject;
  16.  
  17. import com.google.android.gms.maps.CameraUpdateFactory;
  18. import com.google.android.gms.maps.GoogleMap;
  19. import com.google.android.gms.maps.SupportMapFragment;
  20. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  21. import com.google.android.gms.maps.model.LatLng;
  22. import com.google.android.gms.maps.model.MarkerOptions;
  23. import com.google.android.gms.maps.model.Polyline;
  24. import com.google.android.gms.maps.model.PolylineOptions;
  25.  
  26. import android.app.ProgressDialog;
  27. import android.content.Context;
  28. import android.graphics.Color;
  29. import android.os.AsyncTask;
  30. import android.os.Bundle;
  31. import android.support.v4.app.FragmentActivity;
  32. import android.util.Log;
  33. import android.view.View;
  34. import android.view.View.OnClickListener;
  35. import android.widget.Button;
  36.  
  37. public class Gmap extends FragmentActivity implements OnClickListener {
  38.  
  39. private GoogleMap myMap;
  40. Polyline line;
  41. Context context;
  42.  
  43. // Static LatLng
  44. LatLng startLatLng = new LatLng(30.707104, 76.690749);
  45. LatLng endLatLng = new LatLng(30.721419, 76.730017);
  46.  
  47. public void onCreate(Bundle bd) {
  48. super.onCreate(bd);
  49. setContentView(R.layout.activity_gmap);
  50. context = Gmap.this;
  51.  
  52.  
  53. // Temp GetTrails Button
  54. Button btntemp = (Button) findViewById(R.id.button1);
  55. btntemp.setOnClickListener(this);
  56.  
  57. // GoogleMap myMap
  58. myMap = ((SupportMapFragment) getSupportFragmentManager()
  59. .findFragmentById(R.id.map)).getMap();
  60. myMap.setMyLocationEnabled(true);
  61. myMap.moveCamera(CameraUpdateFactory.newLatLng(startLatLng));
  62. myMap.animateCamera(CameraUpdateFactory.zoomTo(12));
  63.  
  64. // Now auto clicking the button
  65. btntemp.performClick();
  66. }
  67.  
  68. @Override
  69. public void onClick(View v) {
  70.  
  71. switch (v.getId()) {
  72. case R.id.button1:
  73. String urlTopass = makeURL(startLatLng.latitude,
  74. startLatLng.longitude, endLatLng.latitude,
  75. endLatLng.longitude);
  76. new connectAsyncTask(urlTopass).execute();
  77. break;
  78.  
  79. default:
  80. break;
  81. }
  82.  
  83. }
  84.  
  85. private class connectAsyncTask extends AsyncTask<Void, Void, String> {
  86. private ProgressDialog progressDialog;
  87. String url;
  88.  
  89. connectAsyncTask(String urlPass) {
  90. url = urlPass;
  91. }
  92.  
  93. @Override
  94. protected void onPreExecute() {
  95. // TODO Auto-generated method stub
  96. super.onPreExecute();
  97. progressDialog = new ProgressDialog(context);
  98. progressDialog.setMessage("Fetching route, Please wait...");
  99. progressDialog.setIndeterminate(true);
  100. progressDialog.show();
  101. }
  102.  
  103. @Override
  104. protected String doInBackground(Void... params) {
  105. JSONParser jParser = new JSONParser();
  106. String json = jParser.getJSONFromUrl(url);
  107. return json;
  108. }
  109.  
  110. @Override
  111. protected void onPostExecute(String result) {
  112. super.onPostExecute(result);
  113. progressDialog.hide();
  114. if (result != null) {
  115. drawPath(result);
  116. }
  117. }
  118. }
  119.  
  120. public String makeURL(double sourcelat, double sourcelog, double destlat,
  121. double destlog) {
  122. StringBuilder urlString = new StringBuilder();
  123. urlString.append("http://maps.googleapis.com/maps/api/directions/json");
  124. urlString.append("?origin=");// from
  125. urlString.append(Double.toString(sourcelat));
  126. urlString.append(",");
  127. urlString.append(Double.toString(sourcelog));
  128. urlString.append("&destination=");// to
  129. urlString.append(Double.toString(destlat));
  130. urlString.append(",");
  131. urlString.append(Double.toString(destlog));
  132. urlString.append("&sensor=false&mode=driving&alternatives=true");
  133. return urlString.toString();
  134. }
  135.  
  136. public class JSONParser {
  137.  
  138. InputStream is = null;
  139. JSONObject jObj = null;
  140. String json = "";
  141.  
  142. // constructor
  143. public JSONParser() {
  144. }
  145.  
  146. public String getJSONFromUrl(String url) {
  147.  
  148. // Making HTTP request
  149. try {
  150. // defaultHttpClient
  151. DefaultHttpClient httpClient = new DefaultHttpClient();
  152. HttpPost httpPost = new HttpPost(url);
  153.  
  154. HttpResponse httpResponse = httpClient.execute(httpPost);
  155. HttpEntity httpEntity = httpResponse.getEntity();
  156. is = httpEntity.getContent();
  157.  
  158. } catch (UnsupportedEncodingException e) {
  159. e.printStackTrace();
  160. } catch (ClientProtocolException e) {
  161. e.printStackTrace();
  162. } catch (IOException e) {
  163. e.printStackTrace();
  164. }
  165. try {
  166. BufferedReader reader = new BufferedReader(
  167. new InputStreamReader(is, "iso-8859-1"), 8);
  168. StringBuilder sb = new StringBuilder();
  169. String line = null;
  170. while ((line = reader.readLine()) != null) {
  171. sb.append(line + "n");
  172. }
  173.  
  174. json = sb.toString();
  175. is.close();
  176. } catch (Exception e) {
  177. Log.e("Buffer Error", "Error converting result " + e.toString());
  178. }
  179. return json;
  180.  
  181. }
  182. }
  183.  
  184. public void drawPath(String result) {
  185. if (line != null) {
  186. myMap.clear();
  187. }
  188. myMap.addMarker(new MarkerOptions().position(endLatLng).icon(
  189. BitmapDescriptorFactory.fromResource(R.drawable.redpin_marker)));
  190. myMap.addMarker(new MarkerOptions().position(startLatLng).icon(
  191. BitmapDescriptorFactory.fromResource(R.drawable.redpin_marker)));
  192. try {
  193. // Tranform the string into a json object
  194. final JSONObject json = new JSONObject(result);
  195. JSONArray routeArray = json.getJSONArray("routes");
  196. JSONObject routes = routeArray.getJSONObject(0);
  197. JSONObject overviewPolylines = routes
  198. .getJSONObject("overview_polyline");
  199. String encodedString = overviewPolylines.getString("points");
  200. List<LatLng> list = decodePoly(encodedString);
  201.  
  202. for (int z = 0; z < list.size() - 1; z++) {
  203. LatLng src = list.get(z);
  204. LatLng dest = list.get(z + 1);
  205. line = myMap.addPolyline(new PolylineOptions()
  206. .add(new LatLng(src.latitude, src.longitude),
  207. new LatLng(dest.latitude, dest.longitude))
  208. .width(5).color(Color.BLUE).geodesic(true));
  209. }
  210.  
  211. } catch (Exception e) {
  212. e.printStackTrace();
  213. }
  214. }
  215.  
  216. private List<LatLng> decodePoly(String encoded) {
  217.  
  218. List<LatLng> poly = new ArrayList<LatLng>();
  219. int index = 0, len = encoded.length();
  220. int lat = 0, lng = 0;
  221.  
  222. while (index < len) {
  223. int b, shift = 0, result = 0;
  224. do {
  225. b = encoded.charAt(index++) - 63;
  226. result |= (b & 0x1f) << shift;
  227. shift += 5;
  228. } while (b >= 0x20);
  229. int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
  230. lat += dlat;
  231.  
  232. shift = 0;
  233. result = 0;
  234. do {
  235. b = encoded.charAt(index++) - 63;
  236. result |= (b & 0x1f) << shift;
  237. shift += 5;
  238. } while (b >= 0x20);
  239. int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
  240. lng += dlng;
  241.  
  242. LatLng p = new LatLng((((double) lat / 1E5)),
  243. (((double) lng / 1E5)));
  244. poly.add(p);
  245. }
  246.  
  247. return poly;
  248. }
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement