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(); } } }
/** * Gets an iterable of KmlPlacemark objects * * @return iterable of KmlPlacemark objects */ public Iterable<KmlPlacemark> getPlacemarks() { return (Iterable<KmlPlacemark>) getFeatures(); }
/** * Checks if the layer contains placemarks * * @return true if there are placemarks, false otherwise */ public boolean hasPlacemarks() { return hasFeatures(); }
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(); } }
@Override public void run() { try { kmlLayer.addLayerToMap(); kmlLayer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() { @Override public void onFeatureClick(Feature feature) { if (kmlEventListener != null) kmlEventListener.onFeatureClick(feature); } }); moveCameraToKml(kmlLayer, googleMap); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } } });
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 static void handleKMLString(String kml, GoogleMap googleMap, Context context, onKMLEventListener kmlEventListener) { InputStream stream = new ByteArrayInputStream(kml.getBytes()); KmlLayer kmlLayer = null; try { kmlLayer = new KmlLayer(googleMap, stream, context); if (kmlEventListener != null) kmlEventListener.onKMLLoaded(kmlLayer); addKMLLayerToMap(kmlLayer, googleMap, context, kmlEventListener); } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
/** * Creates a new KmlLayer object * * @param map GoogleMap object * @param stream InputStream containing KML file * @throws XmlPullParserException if file cannot be parsed */ public KmlLayer(GoogleMap map, InputStream stream, Context context) throws XmlPullParserException, IOException { if (stream == null) { throw new IllegalArgumentException("KML InputStream cannot be null"); } KmlRenderer mRenderer = new KmlRenderer(map, context); XmlPullParser xmlPullParser = createXmlParser(stream); KmlParser parser = new KmlParser(xmlPullParser); parser.parseKml(); stream.close(); mRenderer.storeKmlData(parser.getStyles(), parser.getStyleMaps(), parser.getPlacemarks(), parser.getContainers(), parser.getGroundOverlays()); storeRenderer(mRenderer); }
public static void moveCameraToKml(KmlLayer kmlLayer, GoogleMap googleMap) { //TODO fixed error with some kml file https://developers.google.com/maps/documentation/android-api/utility/kml //Only use in this kml file correctly. LatLngBounds.Builder builder = new LatLngBounds.Builder(); KmlContainer container = kmlLayer.getContainers().iterator().next(); container = container.getContainers().iterator().next(); KmlPlacemark placemark = container.getPlacemarks().iterator().next(); KmlPolygon polygon = (KmlPolygon) placemark.getGeometry(); for (LatLng latLng : polygon.getOuterBoundaryCoordinates()) { builder.include(latLng); } googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 50)); } }
private static void loadKMLRes(int kmlRes, GoogleMap googleMap, Context context, onKMLEventListener kmlEventListener) { try { KmlLayer kmlLayer = new KmlLayer(googleMap, kmlRes, context); if (kmlEventListener != null) kmlEventListener.onKMLLoaded(kmlLayer); addKMLLayerToMap(kmlLayer, googleMap, context, kmlEventListener); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } }