// Created by plusminus on 21:42:59 - 16.10.2008
package org.androad.sys.ors.adt.aoi;
import java.util.Formatter;
import junit.framework.Assert;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView.Projection;
import android.graphics.Canvas;
import android.graphics.Point;
import android.os.Parcel;
import android.os.Parcelable;
public class CircleByCenterPoint extends AreaOfInterest{
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
protected final int mRadiusMeters;
protected final GeoPoint mCenter;
// ===========================================================
// Constructors
// ===========================================================
public CircleByCenterPoint(final GeoPoint aCenter, final int aRadiusMeters) {
Assert.assertNotNull(aCenter);
Assert.assertTrue(aRadiusMeters > 0);
this.mCenter = aCenter;
this.mRadiusMeters = aRadiusMeters;
}
// ===========================================================
// Getter & Setter
// ===========================================================
public GeoPoint getCenter() {
return this.mCenter;
}
public int getRadiusMeters() {
return this.mRadiusMeters;
}
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
/**
* Output similar to:
* <pre> <xls:AOI>
* <gml:CircleByCenterPoint numArc="1">
* <gml:pos>-134.2567801 38.6721569</gml:pos>
* <gml:radius uom="m">3000</gml:radius>
* </gml:CircleByCenterPoint>
* </xls:AOI></pre>
*/
@Override
public void appendToStringBuilder(final StringBuilder sb, final Formatter f) {
sb.append(XLS_AREAOFINTEREST_TAG_OPEN)
.append(GML_CIRCLEBYCENTERPOINT_TAG_OPEN);
f.format(GML_POS_TAG, this.mCenter.getLongitudeE6() / 1E6, this.mCenter.getLatitudeE6() / 1E6);
f.format(GML_RADIUS_TAG, this.mRadiusMeters);
sb.append(GML_CIRCLEBYCENTERPOINT_TAG_CLOSE)
.append(XLS_AREAOFINTEREST_TAG_CLOSE);
}
@Override
public void drawToCanvas(final Canvas c, final Projection pj) {
final Point p = pj.toMapPixels(this.mCenter, null);
c.drawCircle(p.x, p.y, pj.metersToEquatorPixels(this.mRadiusMeters), this.mPaint);
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
// ===========================================================
// Parcelable
// ===========================================================
public static final Parcelable.Creator<CircleByCenterPoint> CREATOR = new Parcelable.Creator<CircleByCenterPoint>() {
public CircleByCenterPoint createFromParcel(final Parcel in) {
return readFromParcel(in);
}
public CircleByCenterPoint[] newArray(final int size) {
return new CircleByCenterPoint[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(final Parcel out, final int arg1) {
out.writeInt(this.mRadiusMeters);
out.writeParcelable(this.mCenter, 0);
}
private static CircleByCenterPoint readFromParcel(final Parcel in){
final int radius = in.readInt();
final GeoPoint center = in.readParcelable(null);
return new CircleByCenterPoint(center, radius);
}
}