Android Open Source - smartnavi Kml Geometry






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;
// w ww.  j a v  a2s .co  m
import android.os.Parcel;
import android.os.Parcelable;

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

import org.osmdroid.bonuspack.kml.KmlFeature.Styler;
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;
import java.util.Iterator;

/**
 * KML Geometry. This is an abstract class.
 * Supported subclasses are: KmlPoint, KmlLineString, KmlPolygon and KmlMultiGeometry
 *
 * @author M.Kergall
 */
public abstract class KmlGeometry implements Cloneable, Parcelable {

    /**
     * KML id attribute, if any. Null if none.
     */
    public String mId;
    /**
     * coordinates of the geometry. If Point, one and only one entry.
     */
    public ArrayList<GeoPoint> mCoordinates;

    public KmlGeometry() {
    }

    public KmlGeometry(Parcel in) {
        mId = in.readString();
        mCoordinates = in.readArrayList(GeoPoint.class.getClassLoader());
    }

    /**
     * Write a list of coordinates in KML format.
     *
     * @param writer
     * @param coordinates
     * @return false if error
     */
    public static boolean writeKMLCoordinates(Writer writer, ArrayList<GeoPoint> coordinates) {
        try {
            writer.write("<coordinates>");
            for (GeoPoint coord : coordinates) {
                writer.write(coord.toInvertedDoubleString());
                writer.write(' ');
            }
            writer.write("</coordinates>\n");
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * Build a Position in GeoJSON format.
     *
     * @param position
     * @return the GeoJSON position.
     */
    public static JsonArray geoJSONPosition(GeoPoint position) {
        JsonArray json = new JsonArray();
        json.add(new JsonPrimitive(position.getLongitude()));
        json.add(new JsonPrimitive(position.getLatitude()));
        //json.add(new JsonPrimitive(coord.getAltitude())); //don't add altitude, as OpenLayers doesn't supports it... (vertigo?)
        return json;
    }

    //-----------------------------------------------------

    /**
     * Build an array of Positions in GeoJSON format.
     *
     * @param coordinates
     * @return the GeoJSON array of Positions.
     */
    public static JsonArray geoJSONCoordinates(ArrayList<GeoPoint> coordinates) {
        JsonArray json = new JsonArray();
        Iterator<GeoPoint> it = coordinates.iterator();
        while (it.hasNext()) {
            GeoPoint position = it.next();
            json.add(KmlGeometry.geoJSONPosition(position));
        }
        return json;
    }

    public static ArrayList<GeoPoint> cloneArrayOfGeoPoint(ArrayList<GeoPoint> coords) {
        ArrayList<GeoPoint> result = new ArrayList<GeoPoint>(coords.size());
        for (GeoPoint p : coords)
            result.add((GeoPoint) p.clone());
        return result;
    }

    /**
     * parse a GeoJSON Position: [longitude, latitude, altitude(optional)]
     */
    public static GeoPoint parseGeoJSONPosition(JsonArray json) {
        double alt = (json.size() >= 3 ? json.get(2).getAsDouble() : 0.0);
        return new GeoPoint(json.get(1).getAsDouble(),
                json.get(0).getAsDouble(),
                alt);
    }

    /**
     * parse a GeoJSON array of Positions: [ [lon, lat, alt],... [lon, lat, alt] ]
     */
    public static ArrayList<GeoPoint> parseGeoJSONPositions(JsonArray json) {
        if (json == null)
            return null;
        ArrayList<GeoPoint> coordinates = new ArrayList<GeoPoint>(json.size());
        for (int i = 0; i < json.size(); i++) {
            JsonArray position = json.get(i).getAsJsonArray();
            GeoPoint p = KmlGeometry.parseGeoJSONPosition(position);
            if (p != null)
                coordinates.add(p);
        }
        return coordinates;
    }

    /**
     * parse a GeoJSON Geometry.
     * Supports: Point, LineString, Polygon, GeometryCollection and MultiPoint.
     *
     * @return the corresponding KmlGeometry, or null for not supported Geometry.
     */
    public static KmlGeometry parseGeoJSON(JsonObject json) {
        if (json == null)
            return null;
        String type = json.get("type").getAsString();
        if ("Point".equals(type)) {
            return new KmlPoint(json);
        } else if ("LineString".equals(type)) {
            return new KmlLineString(json);
        } else if ("Polygon".equals(type)) {
            return new KmlPolygon(json);
        } else if ("GeometryCollection".equals(type) || "MultiPoint".equals(type)) {
            return new KmlMultiGeometry(json);
        } else
            return null;
    }

    //-----------------------------------------------------
    // abstract methods
    public abstract void saveAsKML(Writer writer);

    public abstract JsonObject asGeoJSON();

    public abstract Overlay buildOverlay(MapView map, Style defaultStyle, Styler styler, KmlPlacemark kmlPlacemark, KmlDocument kmlDocument);

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

    public abstract BoundingBoxE6 getBoundingBox();

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

    @Override
    public KmlGeometry clone() {
        KmlGeometry kmlGeometry = null;
        try {
            kmlGeometry = (KmlGeometry) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
        if (mCoordinates != null)
            kmlGeometry.mCoordinates = cloneArrayOfGeoPoint(mCoordinates);
        return kmlGeometry;
    }

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

    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeString(mId);
        out.writeList(mCoordinates);
    }
}




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