package com.o3dr.services.android.lib.drone.mission.item.complex;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Created by fhuya on 11/7/14.
*/
public class SurveyDetail implements Parcelable {
private double altitude;
private double angle;
private double overlap;
private double sidelap;
private boolean lockOrientation;
private CameraDetail cameraDetail;
public double getAltitude() {
return altitude;
}
public void setAltitude(double altitude) {
this.altitude = altitude;
}
public double getAngle() {
return angle;
}
public void setAngle(double angle) {
this.angle = angle;
}
public double getOverlap() {
return overlap;
}
public void setOverlap(double overlap) {
this.overlap = overlap;
}
public double getSidelap() {
return sidelap;
}
public void setSidelap(double sidelap) {
this.sidelap = sidelap;
}
public CameraDetail getCameraDetail() {
return cameraDetail;
}
public void setCameraDetail(CameraDetail cameraDetail) {
this.cameraDetail = cameraDetail;
}
/**
* True if aircraft's yaw is locked to the angle of the survey
* @since 3.0.0
*/
public boolean getLockOrientation(){
return lockOrientation;
}
/**
* Lock aircraft's yaw to the angle of the survey
* @param lockOrientation
* @since 3.0.0
*/
public void setLockOrientation(boolean lockOrientation){
this.lockOrientation = lockOrientation;
}
public double getLateralFootPrint() {
return altitude * cameraDetail.getSensorLateralSize()
/ cameraDetail.getFocalLength();
}
public double getLongitudinalFootPrint() {
return altitude * cameraDetail.getSensorLongitudinalSize()
/ cameraDetail.getFocalLength();
}
public double getGroundResolution() {
return ((altitude * cameraDetail.getSensorLateralSize() / cameraDetail.getFocalLength()
* (altitude * cameraDetail.getSensorLongitudinalSize()
/ cameraDetail.getFocalLength()) / (cameraDetail.getSensorResolution() * 1000)))
/ 10000;
}
public double getLongitudinalPictureDistance() {
return getLongitudinalFootPrint() * (1 - overlap * .01);
}
public double getLateralPictureDistance() {
return getLateralFootPrint() * (1 - sidelap * .01);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeDouble(this.altitude);
dest.writeDouble(this.angle);
dest.writeDouble(this.overlap);
dest.writeDouble(this.sidelap);
dest.writeParcelable(this.cameraDetail, 0);
dest.writeByte((byte)(this.lockOrientation?1:0));
}
public SurveyDetail() {
}
public SurveyDetail(SurveyDetail copy){
this.altitude = copy.altitude;
this.angle = copy.angle;
this.overlap = copy.overlap;
this.sidelap = copy.sidelap;
this.lockOrientation = copy.lockOrientation;
this.cameraDetail = copy.cameraDetail == null ? null : new CameraDetail(copy.cameraDetail);
}
private SurveyDetail(Parcel in) {
this.altitude = in.readDouble();
this.angle = in.readDouble();
this.overlap = in.readDouble();
this.sidelap = in.readDouble();
this.cameraDetail = in.readParcelable(CameraDetail.class.getClassLoader());
this.lockOrientation = in.readByte() != 0;
}
public static final Parcelable.Creator<SurveyDetail> CREATOR = new Parcelable.Creator<SurveyDetail>() {
public SurveyDetail createFromParcel(Parcel source) {
return new SurveyDetail(source);
}
public SurveyDetail[] newArray(int size) {
return new SurveyDetail[size];
}
};
}