Guest User

Untitled

a guest
Oct 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. import com.google.android.gms.maps.CameraUpdateFactory;
  2. import com.google.android.gms.maps.GoogleMap;
  3. import com.google.android.gms.maps.model.LatLng;
  4. import com.google.android.gms.maps.model.LatLngBounds;
  5. import com.google.maps.android.data.Feature;
  6. import com.google.maps.android.data.kml.KmlContainer;
  7. import com.google.maps.android.data.kml.KmlLayer;
  8. import com.google.maps.android.data.kml.KmlPlacemark;
  9. import com.google.maps.android.data.kml.KmlPolygon;
  10.  
  11. import org.xmlpull.v1.XmlPullParserException;
  12.  
  13. import android.os.AsyncTask;
  14. import android.util.Log;
  15. import android.widget.Toast;
  16.  
  17. import java.io.ByteArrayInputStream;
  18. import java.io.ByteArrayOutputStream;
  19. import java.io.IOException;
  20. import java.io.InputStream;
  21. import java.net.URL;
  22.  
  23. public class KmlDemoActivity extends BaseDemoActivity {
  24.  
  25. private GoogleMap mMap;
  26.  
  27. protected int getLayoutId() {
  28. return R.layout.kml_demo;
  29. }
  30.  
  31. public void startDemo () {
  32. try {
  33. mMap = getMap();
  34. //retrieveFileFromResource();
  35. retrieveFileFromUrl();
  36. } catch (Exception e) {
  37. Log.e("Exception caught", e.toString());
  38. }
  39. }
  40.  
  41. private void retrieveFileFromResource() {
  42. try {
  43. KmlLayer kmlLayer = new KmlLayer(mMap, R.raw.campus, getApplicationContext());
  44. kmlLayer.addLayerToMap();
  45. moveCameraToKml(kmlLayer);
  46. } catch (IOException e) {
  47. e.printStackTrace();
  48. } catch (XmlPullParserException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52.  
  53. private void retrieveFileFromUrl() {
  54. new DownloadKmlFile(getString(R.string.kml_url)).execute();
  55. }
  56.  
  57. private void moveCameraToKml(KmlLayer kmlLayer) {
  58. //Retrieve the first container in the KML layer
  59. KmlContainer container = kmlLayer.getContainers().iterator().next();
  60. //Retrieve a nested container within the first container
  61. container = container.getContainers().iterator().next();
  62. //Retrieve the first placemark in the nested container
  63. KmlPlacemark placemark = container.getPlacemarks().iterator().next();
  64. //Retrieve a polygon object in a placemark
  65. KmlPolygon polygon = (KmlPolygon) placemark.getGeometry();
  66. //Create LatLngBounds of the outer coordinates of the polygon
  67. LatLngBounds.Builder builder = new LatLngBounds.Builder();
  68. for (LatLng latLng : polygon.getOuterBoundaryCoordinates()) {
  69. builder.include(latLng);
  70. }
  71.  
  72. int width = getResources().getDisplayMetrics().widthPixels;
  73. int height = getResources().getDisplayMetrics().heightPixels;
  74. getMap().moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), width, height, 1));
  75. }
  76.  
  77. private class DownloadKmlFile extends AsyncTask<String, Void, byte[]> {
  78. private final String mUrl;
  79.  
  80. public DownloadKmlFile(String url) {
  81. mUrl = url;
  82. }
  83.  
  84. protected byte[] doInBackground(String... params) {
  85. try {
  86. InputStream is = new URL(mUrl).openStream();
  87. ByteArrayOutputStream buffer = new ByteArrayOutputStream();
  88. int nRead;
  89. byte[] data = new byte[16384];
  90. while ((nRead = is.read(data, 0, data.length)) != -1) {
  91. buffer.write(data, 0, nRead);
  92. }
  93. buffer.flush();
  94. return buffer.toByteArray();
  95. } catch (IOException e) {
  96. e.printStackTrace();
  97. }
  98. return null;
  99. }
  100.  
  101. protected void onPostExecute(byte[] byteArr) {
  102. try {
  103. KmlLayer kmlLayer = new KmlLayer(mMap, new ByteArrayInputStream(byteArr),
  104. getApplicationContext());
  105. kmlLayer.addLayerToMap();
  106. kmlLayer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() {
  107. @Override
  108. public void onFeatureClick(Feature feature) {
  109. Toast.makeText(KmlDemoActivity.this,
  110. "Feature clicked: " + feature.getId(),
  111. Toast.LENGTH_SHORT).show();
  112. }
  113. });
  114. moveCameraToKml(kmlLayer);
  115. } catch (XmlPullParserException e) {
  116. e.printStackTrace();
  117. } catch (IOException e) {
  118. e.printStackTrace();
  119. }
  120. }
  121. }
  122. }
  123.  
  124. mMap.setMyLocationEnabled(true);
  125. mMap.setOnMyLocationButtonClickListener(this);
  126. mMap.setOnMyLocationClickListener(this);
Add Comment
Please, Sign In to add comment