Android Open Source - smartnavi Kml Polygon






From Project

Back to project page smartnavi.

License

The source code is released under:

Apache License

If you think the Android project smartnavi listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.osmdroid.bonuspack.kml;
//from   ww  w.j  av  a 2s.co  m
import android.content.Context;
import android.graphics.Paint;
import android.os.Parcel;
import android.os.Parcelable;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import org.osmdroid.bonuspack.kml.KmlFeature.Styler;
import org.osmdroid.bonuspack.overlays.DefaultInfoWindow;
import org.osmdroid.bonuspack.overlays.Polygon;
import org.osmdroid.bonuspack.utils.BonusPackHelper;
import org.osmdroid.util.BoundingBoxE6;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.Overlay;

import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;

/**
 * KML and/or GeoJSON Polygon
 *
 * @author M.Kergall
 */
public class KmlPolygon extends KmlGeometry {

    public static final Parcelable.Creator<KmlPolygon> CREATOR = new Parcelable.Creator<KmlPolygon>() {
        @Override
        public KmlPolygon createFromParcel(Parcel source) {
            return new KmlPolygon(source);
        }

        @Override
        public KmlPolygon[] newArray(int size) {
            return new KmlPolygon[size];
        }
    };
    static int mDefaultLayoutResId = BonusPackHelper.UNDEFINED_RES_ID;
    /**
     * Polygon holes (can be null if none)
     */
    public ArrayList<ArrayList<GeoPoint>> mHoles;

    public KmlPolygon() {
        super();
    }

    /**
     * GeoJSON constructor
     */
    public KmlPolygon(JsonObject json) {
        this();
        JsonArray rings = json.get("coordinates").getAsJsonArray();
        //ring #0 is the polygon border:
        mCoordinates = KmlGeometry.parseGeoJSONPositions(rings.get(0).getAsJsonArray());
        //next rings are the holes:
        if (rings.size() > 1) {
            mHoles = new ArrayList<ArrayList<GeoPoint>>(rings.size() - 1);
            for (int i = 1; i < rings.size(); i++) {
                ArrayList<GeoPoint> hole = KmlGeometry.parseGeoJSONPositions(rings.get(i).getAsJsonArray());
                mHoles.add(hole);
            }
        }
    }

    public KmlPolygon(Parcel in) {
        super(in);
        int holes = in.readInt();
        if (holes != 0) {
            mHoles = new ArrayList<ArrayList<GeoPoint>>(holes);
            for (int i = 0; i < holes; i++) {
                ArrayList<GeoPoint> l = in.readArrayList(GeoPoint.class.getClassLoader());
                mHoles.add(l);
            }
        }
    }

    public void applyDefaultStyling(Polygon polygonOverlay, Style defaultStyle, KmlPlacemark kmlPlacemark,
                                    KmlDocument kmlDocument, MapView map) {
        Context context = map.getContext();
        Style style = kmlDocument.getStyle(kmlPlacemark.mStyle);
        if (style != null) {
            Paint outlinePaint = style.getOutlinePaint();
            polygonOverlay.setStrokeColor(outlinePaint.getColor());
            polygonOverlay.setStrokeWidth(outlinePaint.getStrokeWidth());
            int fillColor = style.mPolyStyle.getFinalColor();
            polygonOverlay.setFillColor(fillColor);
        } else if (defaultStyle != null) {
            Paint outlinePaint = defaultStyle.getOutlinePaint();
            polygonOverlay.setStrokeColor(outlinePaint.getColor());
            polygonOverlay.setStrokeWidth(outlinePaint.getStrokeWidth());
            int fillColor = defaultStyle.mPolyStyle.getFinalColor();
            polygonOverlay.setFillColor(fillColor);
        }
        if ((kmlPlacemark.mName != null && !"".equals(kmlPlacemark.mName))
                || (kmlPlacemark.mDescription != null && !"".equals(kmlPlacemark.mDescription))) {
            if (mDefaultLayoutResId == BonusPackHelper.UNDEFINED_RES_ID) {
                String packageName = context.getPackageName();
                mDefaultLayoutResId = context.getResources().getIdentifier("layout/bonuspack_bubble", null, packageName);
            }
            polygonOverlay.setInfoWindow(new DefaultInfoWindow(mDefaultLayoutResId, map));
        }
        polygonOverlay.setEnabled(kmlPlacemark.mVisibility);
    }

    /**
     * Build the corresponding Polygon overlay
     */
    @Override
    public Overlay buildOverlay(MapView map, Style defaultStyle, Styler styler, KmlPlacemark kmlPlacemark,
                                KmlDocument kmlDocument) {
        Context context = map.getContext();
        Polygon polygonOverlay = new Polygon(context);
        polygonOverlay.setPoints(mCoordinates);
        if (mHoles != null)
            polygonOverlay.setHoles(mHoles);
        polygonOverlay.setTitle(kmlPlacemark.mName);
        polygonOverlay.setSnippet(kmlPlacemark.mDescription);
        if (styler == null)
            applyDefaultStyling(polygonOverlay, defaultStyle, kmlPlacemark, kmlDocument, map);
        else
            styler.onPolygon(polygonOverlay, kmlPlacemark, this);
        return polygonOverlay;
    }

    @Override
    public void saveAsKML(Writer writer) {
        try {
            writer.write("<Polygon>\n");
            writer.write("<outerBoundaryIs>\n<LinearRing>\n");
            writeKMLCoordinates(writer, mCoordinates);
            writer.write("</LinearRing>\n</outerBoundaryIs>\n");
            if (mHoles != null) {
                for (ArrayList<GeoPoint> hole : mHoles) {
                    writer.write("<innerBoundaryIs>\n<LinearRing>\n");
                    writeKMLCoordinates(writer, hole);
                    writer.write("</LinearRing>\n</innerBoundaryIs>\n");
                }
            }
            writer.write("</Polygon>\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //Cloneable implementation ------------------------------------

    @Override
    public JsonObject asGeoJSON() {
        JsonObject json = new JsonObject();
        json.addProperty("type", "Polygon");
        JsonArray coords = new JsonArray();
        coords.add(KmlGeometry.geoJSONCoordinates(mCoordinates));
        if (mHoles != null) {
            for (ArrayList<GeoPoint> hole : mHoles) {
                coords.add(KmlGeometry.geoJSONCoordinates(hole));
            }
        }
        json.add("coordinates", coords);
        return json;
    }

    //Parcelable implementation ------------

    @Override
    public BoundingBoxE6 getBoundingBox() {
        if (mCoordinates != null)
            return BoundingBoxE6.fromGeoPoints(mCoordinates);
        else
            return null;
    }

    @Override
    public KmlPolygon clone() {
        KmlPolygon kmlPolygon = (KmlPolygon) super.clone();
        if (mHoles != null) {
            kmlPolygon.mHoles = new ArrayList<ArrayList<GeoPoint>>(mHoles.size());
            for (ArrayList<GeoPoint> hole : mHoles) {
                kmlPolygon.mHoles.add(cloneArrayOfGeoPoint(hole));
            }
        }
        return kmlPolygon;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        super.writeToParcel(out, flags);
        if (mHoles != null) {
            out.writeInt(mHoles.size());
            for (ArrayList<GeoPoint> l : mHoles)
                out.writeList(l);
        } else
            out.writeInt(0);
    }

}




Java Source Code List

com.ilm.sandwich.BackgroundService.java
com.ilm.sandwich.BuildConfig.java
com.ilm.sandwich.Config.java
com.ilm.sandwich.GoogleMapActivity.java
com.ilm.sandwich.Info.java
com.ilm.sandwich.MySupportMapFragment.java
com.ilm.sandwich.OsmMapActivity.java
com.ilm.sandwich.Settings.java
com.ilm.sandwich.StartChooser.java
com.ilm.sandwich.TouchableWrapper.java
com.ilm.sandwich.tools.Core.java
com.ilm.sandwich.tools.HttpRequests.java
com.ilm.sandwich.tools.Locationer.java
com.ilm.sandwich.tools.MapDownload.java
com.ilm.sandwich.tools.MyItemizedOverlay.java
com.ilm.sandwich.tools.PlacesAutoComplete.java
com.ilm.sandwich.tools.PlacesTextSearch.java
com.ilm.sandwich.tools.Statistics.java
com.ilm.sandwich.tools.SuggestionsAdapter.java
org.osmdroid.bonuspack.BuildConfig.java
org.osmdroid.bonuspack.BuildConfig.java
org.osmdroid.bonuspack.cachemanager.CacheManager.java
org.osmdroid.bonuspack.clustering.GridMarkerClusterer.java
org.osmdroid.bonuspack.clustering.MarkerClusterer.java
org.osmdroid.bonuspack.clustering.StaticCluster.java
org.osmdroid.bonuspack.kml.ColorStyle.java
org.osmdroid.bonuspack.kml.IconStyle.java
org.osmdroid.bonuspack.kml.KmlDocument.java
org.osmdroid.bonuspack.kml.KmlFeature.java
org.osmdroid.bonuspack.kml.KmlFolder.java
org.osmdroid.bonuspack.kml.KmlGeometry.java
org.osmdroid.bonuspack.kml.KmlGroundOverlay.java
org.osmdroid.bonuspack.kml.KmlLineString.java
org.osmdroid.bonuspack.kml.KmlMultiGeometry.java
org.osmdroid.bonuspack.kml.KmlPlacemark.java
org.osmdroid.bonuspack.kml.KmlPoint.java
org.osmdroid.bonuspack.kml.KmlPolygon.java
org.osmdroid.bonuspack.kml.LineStyle.java
org.osmdroid.bonuspack.kml.Style.java
org.osmdroid.bonuspack.location.FlickrPOIProvider.java
org.osmdroid.bonuspack.location.GeoNamesPOIProvider.java
org.osmdroid.bonuspack.location.GeocoderGisgraphy.java
org.osmdroid.bonuspack.location.GeocoderNominatimOld.java
org.osmdroid.bonuspack.location.GeocoderNominatim.java
org.osmdroid.bonuspack.location.NominatimPOIProvider.java
org.osmdroid.bonuspack.location.POI.java
org.osmdroid.bonuspack.location.PicasaPOIProvider.java
org.osmdroid.bonuspack.mapsforge.GenericMapView.java
org.osmdroid.bonuspack.mapsforge.MapsForgeTileModuleProvider.java
org.osmdroid.bonuspack.mapsforge.MapsForgeTileProvider.java
org.osmdroid.bonuspack.mapsforge.MapsForgeTileSource.java
org.osmdroid.bonuspack.overlays.DefaultInfoWindow.java
org.osmdroid.bonuspack.overlays.ExtendedOverlayItem.java
org.osmdroid.bonuspack.overlays.FolderOverlay.java
org.osmdroid.bonuspack.overlays.GroundOverlay.java
org.osmdroid.bonuspack.overlays.InfoWindow.java
org.osmdroid.bonuspack.overlays.ItemizedOverlayWithBubble.java
org.osmdroid.bonuspack.overlays.MapEventsOverlay.java
org.osmdroid.bonuspack.overlays.MapEventsReceiver.java
org.osmdroid.bonuspack.overlays.MarkerInfoWindow.java
org.osmdroid.bonuspack.overlays.Marker.java
org.osmdroid.bonuspack.overlays.Polygon.java
org.osmdroid.bonuspack.overlays.Polyline.java
org.osmdroid.bonuspack.routing.GoogleRoadManager.java
org.osmdroid.bonuspack.routing.MapQuestRoadManager.java
org.osmdroid.bonuspack.routing.OSRMRoadManager.java
org.osmdroid.bonuspack.routing.RoadLeg.java
org.osmdroid.bonuspack.routing.RoadManager.java
org.osmdroid.bonuspack.routing.RoadNode.java
org.osmdroid.bonuspack.routing.Road.java
org.osmdroid.bonuspack.utils.BonusPackHelper.java
org.osmdroid.bonuspack.utils.DouglasPeuckerReducer.java
org.osmdroid.bonuspack.utils.HttpConnection.java
org.osmdroid.bonuspack.utils.PolylineEncoder.java
org.osmdroid.bonuspack.utils.WebImageCache.java