Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.google.android.gms.maps.CameraUpdateFactory;
- import com.google.android.gms.maps.GoogleMap;
- import com.google.android.gms.maps.model.LatLng;
- import com.google.android.gms.maps.model.LatLngBounds;
- import com.google.maps.android.data.Feature;
- import com.google.maps.android.data.kml.KmlContainer;
- import com.google.maps.android.data.kml.KmlLayer;
- import com.google.maps.android.data.kml.KmlPlacemark;
- import com.google.maps.android.data.kml.KmlPolygon;
- import org.xmlpull.v1.XmlPullParserException;
- import android.os.AsyncTask;
- import android.util.Log;
- import android.widget.Toast;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URL;
- public class KmlDemoActivity extends BaseDemoActivity {
- private GoogleMap mMap;
- protected int getLayoutId() {
- return R.layout.kml_demo;
- }
- public void startDemo () {
- try {
- mMap = getMap();
- //retrieveFileFromResource();
- retrieveFileFromUrl();
- } catch (Exception e) {
- Log.e("Exception caught", e.toString());
- }
- }
- private void retrieveFileFromResource() {
- try {
- KmlLayer kmlLayer = new KmlLayer(mMap, R.raw.campus, getApplicationContext());
- kmlLayer.addLayerToMap();
- moveCameraToKml(kmlLayer);
- } catch (IOException e) {
- e.printStackTrace();
- } catch (XmlPullParserException e) {
- e.printStackTrace();
- }
- }
- private void retrieveFileFromUrl() {
- new DownloadKmlFile(getString(R.string.kml_url)).execute();
- }
- private void moveCameraToKml(KmlLayer kmlLayer) {
- //Retrieve the first container in the KML layer
- KmlContainer container = kmlLayer.getContainers().iterator().next();
- //Retrieve a nested container within the first container
- container = container.getContainers().iterator().next();
- //Retrieve the first placemark in the nested container
- KmlPlacemark placemark = container.getPlacemarks().iterator().next();
- //Retrieve a polygon object in a placemark
- KmlPolygon polygon = (KmlPolygon) placemark.getGeometry();
- //Create LatLngBounds of the outer coordinates of the polygon
- LatLngBounds.Builder builder = new LatLngBounds.Builder();
- for (LatLng latLng : polygon.getOuterBoundaryCoordinates()) {
- builder.include(latLng);
- }
- int width = getResources().getDisplayMetrics().widthPixels;
- int height = getResources().getDisplayMetrics().heightPixels;
- getMap().moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), width, height, 1));
- }
- private class DownloadKmlFile extends AsyncTask<String, Void, byte[]> {
- private final String mUrl;
- public DownloadKmlFile(String url) {
- mUrl = url;
- }
- protected byte[] doInBackground(String... params) {
- try {
- InputStream is = new URL(mUrl).openStream();
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- int nRead;
- byte[] data = new byte[16384];
- while ((nRead = is.read(data, 0, data.length)) != -1) {
- buffer.write(data, 0, nRead);
- }
- buffer.flush();
- return buffer.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- protected void onPostExecute(byte[] byteArr) {
- try {
- KmlLayer kmlLayer = new KmlLayer(mMap, new ByteArrayInputStream(byteArr),
- getApplicationContext());
- kmlLayer.addLayerToMap();
- kmlLayer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() {
- @Override
- public void onFeatureClick(Feature feature) {
- Toast.makeText(KmlDemoActivity.this,
- "Feature clicked: " + feature.getId(),
- Toast.LENGTH_SHORT).show();
- }
- });
- moveCameraToKml(kmlLayer);
- } catch (XmlPullParserException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- mMap.setMyLocationEnabled(true);
- mMap.setOnMyLocationButtonClickListener(this);
- mMap.setOnMyLocationClickListener(this);
Add Comment
Please, Sign In to add comment