package kmlframework.coordinates; import kmlframework.kml.AltitudeModeEnum; import kmlframework.kml.Point; public class EarthCoordinate extends Point implements Coordinate { public static double EARTHRADIUS = 6372795.477598; // in meters public EarthCoordinate() {} public EarthCoordinate(Double longitude, Double latitude) { super(longitude, latitude); } public EarthCoordinate(Double longitude, Double latitude, Double altitude) { super(longitude, latitude, altitude); } public EarthCoordinate(Boolean extrude, AltitudeModeEnum altitudeMode, Double longitude, Double latitude, Double altitude) { super(extrude, altitudeMode, longitude, latitude, altitude); } public double getRadius() { return getAltitude() + EARTHRADIUS; } public CartesianCoordinate toCartesianCoordinate() { CartesianCoordinate cartesianCoordinate = new CartesianCoordinate(); cartesianCoordinate.setX(getRadius() * Math.sin(Math.PI/2 - getLatitude()*(Math.PI/180)) * Math.cos(getLongitude()*(Math.PI/180))); cartesianCoordinate.setY(getRadius() * Math.sin(Math.PI/2 - getLatitude()*(Math.PI/180)) * Math.sin(getLongitude()*(Math.PI/180))); cartesianCoordinate.setZ(getRadius() * Math.cos(Math.PI/2 - getLatitude()*(Math.PI/180))); return cartesianCoordinate; } public double distanceTo(EarthCoordinate earthCoordinate) { return toCartesianCoordinate().distanceTo(earthCoordinate.toCartesianCoordinate()); } public String toString() { return "[longitude: " + getLongitude() + ", latitude: " + getLatitude() + ", altitude: " + getAltitude() + "]"; } public EarthCoordinate toEarthCoordinate(EarthCoordinate earthCoordinate, Double rotation, CartesianCoordinate localReferenceCoordinate, CartesianCoordinate scale) { return this; } }