Initial version -- added millennium read funcionality
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
package com.google.maps.android.data.kml;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.util.Log;
|
||||
import com.google.android.gms.maps.GoogleMap;
|
||||
import com.google.maps.android.collections.GroundOverlayManager;
|
||||
import com.google.maps.android.collections.MarkerManager;
|
||||
import com.google.maps.android.collections.PolygonManager;
|
||||
import com.google.maps.android.collections.PolylineManager;
|
||||
import com.google.maps.android.data.Layer;
|
||||
import com.google.maps.android.data.Renderer;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserException;
|
||||
import org.xmlpull.v1.XmlPullParserFactory;
|
||||
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public class KmlLayer extends Layer {
|
||||
public KmlLayer(GoogleMap googleMap, int i, Context context) throws XmlPullParserException, IOException {
|
||||
this(googleMap, context.getResources().openRawResource(i), context, new MarkerManager(googleMap), new PolygonManager(googleMap), new PolylineManager(googleMap), new GroundOverlayManager(googleMap), (Renderer.ImagesCache) null);
|
||||
}
|
||||
|
||||
public KmlLayer(GoogleMap googleMap, InputStream inputStream, Context context) throws XmlPullParserException, IOException {
|
||||
this(googleMap, inputStream, context, new MarkerManager(googleMap), new PolygonManager(googleMap), new PolylineManager(googleMap), new GroundOverlayManager(googleMap), (Renderer.ImagesCache) null);
|
||||
}
|
||||
|
||||
public KmlLayer(GoogleMap googleMap, int i, Context context, MarkerManager markerManager, PolygonManager polygonManager, PolylineManager polylineManager, GroundOverlayManager groundOverlayManager, Renderer.ImagesCache imagesCache) throws XmlPullParserException, IOException {
|
||||
this(googleMap, context.getResources().openRawResource(i), context, markerManager, polygonManager, polylineManager, groundOverlayManager, imagesCache);
|
||||
}
|
||||
|
||||
public KmlLayer(GoogleMap googleMap, InputStream inputStream, Context context, MarkerManager markerManager, PolygonManager polygonManager, PolylineManager polylineManager, GroundOverlayManager groundOverlayManager, Renderer.ImagesCache imagesCache) throws Throwable {
|
||||
if (inputStream == null) {
|
||||
throw new IllegalArgumentException("KML InputStream cannot be null");
|
||||
}
|
||||
KmlRenderer kmlRenderer = new KmlRenderer(googleMap, context, markerManager, polygonManager, polylineManager, groundOverlayManager, imagesCache);
|
||||
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
|
||||
bufferedInputStream.mark(1024);
|
||||
ZipInputStream zipInputStream = new ZipInputStream(bufferedInputStream);
|
||||
try {
|
||||
ZipEntry nextEntry = zipInputStream.getNextEntry();
|
||||
if (nextEntry != null) {
|
||||
HashMap<String, Bitmap> map = new HashMap<>();
|
||||
KmlParser kml = null;
|
||||
while (nextEntry != null) {
|
||||
if (kml == null && nextEntry.getName().toLowerCase().endsWith(".kml")) {
|
||||
kml = parseKml(zipInputStream);
|
||||
} else {
|
||||
Bitmap bitmapDecodeStream = BitmapFactory.decodeStream(zipInputStream);
|
||||
if (bitmapDecodeStream != null) {
|
||||
map.put(nextEntry.getName(), bitmapDecodeStream);
|
||||
} else {
|
||||
Log.w("KmlLayer", "Unsupported KMZ contents file type: " + nextEntry.getName());
|
||||
}
|
||||
}
|
||||
nextEntry = zipInputStream.getNextEntry();
|
||||
}
|
||||
if (kml == null) {
|
||||
throw new IllegalArgumentException("KML not found in InputStream");
|
||||
}
|
||||
kmlRenderer.storeKmzData(kml.getStyles(), kml.getStyleMaps(), kml.getPlacemarks(), kml.getContainers(), kml.getGroundOverlays(), map);
|
||||
} else {
|
||||
bufferedInputStream.reset();
|
||||
KmlParser kml2 = parseKml(bufferedInputStream);
|
||||
kmlRenderer.storeKmlData(kml2.getStyles(), kml2.getStyleMaps(), kml2.getPlacemarks(), kml2.getContainers(), kml2.getGroundOverlays());
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
th = th;
|
||||
}
|
||||
try {
|
||||
storeRenderer(kmlRenderer);
|
||||
inputStream.close();
|
||||
bufferedInputStream.close();
|
||||
zipInputStream.close();
|
||||
} catch (Throwable th2) {
|
||||
th = th2;
|
||||
inputStream.close();
|
||||
bufferedInputStream.close();
|
||||
zipInputStream.close();
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
|
||||
private static KmlParser parseKml(InputStream inputStream) throws XmlPullParserException, IOException {
|
||||
KmlParser kmlParser = new KmlParser(createXmlParser(inputStream));
|
||||
kmlParser.parseKml();
|
||||
return kmlParser;
|
||||
}
|
||||
|
||||
private static XmlPullParser createXmlParser(InputStream inputStream) throws XmlPullParserException {
|
||||
XmlPullParserFactory xmlPullParserFactoryNewInstance = XmlPullParserFactory.newInstance();
|
||||
xmlPullParserFactoryNewInstance.setNamespaceAware(true);
|
||||
XmlPullParser xmlPullParserNewPullParser = xmlPullParserFactoryNewInstance.newPullParser();
|
||||
xmlPullParserNewPullParser.setInput(inputStream, null);
|
||||
return xmlPullParserNewPullParser;
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.data.Layer
|
||||
public void addLayerToMap() {
|
||||
super.addKMLToMap();
|
||||
}
|
||||
|
||||
public boolean hasPlacemarks() {
|
||||
return hasFeatures();
|
||||
}
|
||||
|
||||
public Iterable<KmlPlacemark> getPlacemarks() {
|
||||
return getFeatures();
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.data.Layer
|
||||
public boolean hasContainers() {
|
||||
return super.hasContainers();
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.data.Layer
|
||||
public Iterable<KmlContainer> getContainers() {
|
||||
return super.getContainers();
|
||||
}
|
||||
|
||||
@Override // com.google.maps.android.data.Layer
|
||||
public Iterable<KmlGroundOverlay> getGroundOverlays() {
|
||||
return super.getGroundOverlays();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user