// Created by plusminus on 01:20:48 - 02.11.2008 package org.androad.sys.ors.adt; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.util.constants.MapViewConstants; import org.androad.R; import org.androad.adt.UnitSystem; import org.androad.sys.ors.adt.lus.Country; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; public class GeocodedAddress extends GeoPoint implements Parcelable { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== protected Country mNationality; protected String mStreetNameOfficial; protected String mCountrySubdivision; protected String mMunicipality; protected String mStreetNumber; protected String mPostalCode; protected float mAccuracy; // =========================================================== // Constructors // =========================================================== public GeocodedAddress(final int latitudeE6, final int longitudeE6) { super(latitudeE6, longitudeE6); } public GeocodedAddress(final GeoPoint gp) { super(gp.getLatitudeE6(), gp.getLongitudeE6()); } // =========================================================== // Getter & Setter // =========================================================== public String getMunicipality() { return this.mMunicipality; } public void setMunicipality(final String municipality) { this.mMunicipality = municipality; } public Country getNationality() { return this.mNationality; } public void setNationality(final Country nationality) { this.mNationality = nationality; } public String getStreetNameOfficial() { return this.mStreetNameOfficial; } public void setStreetNameOfficial(final String streetNameOfficial) { this.mStreetNameOfficial = streetNameOfficial; } public String getCountrySubdivision() { return this.mCountrySubdivision; } public void setCountrySubdivision(final String countrySubdivision) { this.mCountrySubdivision = countrySubdivision; } public String getStreetNumber() { return this.mStreetNumber; } public void setStreetNumber(final String streetNumber) { this.mStreetNumber = streetNumber; } public String getPostalCode() { return this.mPostalCode; } public void setPostalCode(final String postalCode) { this.mPostalCode = postalCode; } public float getAccuracy() { return this.mAccuracy; } public void setAccuracy(final float accuracy) { this.mAccuracy = accuracy; } // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== public String toString(final Context ctx) { return toString(ctx, null, false); } public String toString(final Context ctx, final UnitSystem aUs) { return toString(ctx, aUs, true); } /** * @param ctx Needed to get i18n Strings like "Streetnumber". */ public String toString(final Context ctx, final UnitSystem aUs, final boolean addDistanceOrAccuracy) { final StringBuilder sb = new StringBuilder(); if(this.mStreetNumber != null && this.mStreetNumber.length() > 0) { sb.append(ctx.getString(R.string.wherami_dialog_streetnumber)).append(' ').append(this.mStreetNumber).append('\n'); } if(this.mStreetNameOfficial != null && this.mStreetNameOfficial.length() > 0) { sb.append(ctx.getString(R.string.wherami_dialog_streetname)).append(' ').append(this.mStreetNameOfficial).append('\n'); } if(this.mMunicipality != null && this.mMunicipality.length() > 0) { sb.append(ctx.getString(R.string.wherami_dialog_cityname)).append(' ').append(this.mMunicipality).append('\n'); } if(this.mPostalCode != null && this.mPostalCode.length() > 0) { sb.append(ctx.getString(R.string.wherami_dialog_zipcode)).append(' ').append(this.mPostalCode).append('\n'); } if(this.mCountrySubdivision != null && this.mCountrySubdivision.length() > 0) { sb.append(ctx.getString(R.string.wherami_dialog_adminarea)).append(' ').append(this.mCountrySubdivision).append('\n'); } if(this.mNationality != null) { sb.append(ctx.getString(R.string.wherami_dialog_country)).append(' ').append(ctx.getString(this.mNationality.NAMERESID)).append('\n'); } if(aUs != null && addDistanceOrAccuracy){ final String[] distStringParts = aUs.getDistanceString((int)this.mAccuracy, null); final String formattedDistance = distStringParts[UnitSystem.DISTSTRINGS_DIST_ID] + distStringParts[UnitSystem.DISTSTRINGS_UNIT_ID]; sb.append(ctx.getString(R.string.wherami_dialog_distance)).append(' ').append(formattedDistance).append('\n'); } try{ final double lat = this.getLatitudeE6() / 1E6; final double lon = this.getLongitudeE6() / 1E6; sb.append('\n'); sb.append(ctx.getString(R.string.latitude)).append(": ").append(lat).append('\n'); sb.append(ctx.getString(R.string.longitude)).append(": ").append(lon); }catch(final IllegalStateException ise){ } if(sb.charAt(sb.length() - 1) == '\n') { sb.setLength(sb.length() - 1); } return sb.toString(); } // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== // =========================================================== // Parcelable // =========================================================== public static final Parcelable.Creator<GeocodedAddress> CREATOR = new Parcelable.Creator<GeocodedAddress>() { public GeocodedAddress createFromParcel(final Parcel in) { return readFromParcel(in); } public GeocodedAddress[] newArray(final int size) { return new GeocodedAddress[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(final Parcel out, final int arg1) { out.writeInt(this.getLatitudeE6()); out.writeInt(this.getLongitudeE6()); if(this.mNationality == null) { out.writeInt(MapViewConstants.NOT_SET); } else { out.writeInt(this.mNationality.ordinal()); } out.writeString(this.mStreetNameOfficial); out.writeString(this.mCountrySubdivision); out.writeString(this.mMunicipality); out.writeString(this.mStreetNumber); out.writeString(this.mPostalCode); out.writeFloat(this.mAccuracy); } private static GeocodedAddress readFromParcel(final Parcel in){ final int latE6 = in.readInt(); final int lonE6 = in.readInt(); final GeocodedAddress out = new GeocodedAddress(latE6, lonE6); final int natOrdinal = in.readInt(); final Country nat = (natOrdinal == MapViewConstants.NOT_SET) ? null : Country.values()[natOrdinal]; out.setNationality(nat); out.setStreetNameOfficial(in.readString()); out.setCountrySubdivision(in.readString()); out.setMunicipality(in.readString()); out.setStreetNumber(in.readString()); out.setPostalCode(in.readString()); out.setAccuracy(in.readFloat()); return out; } }