Location.java
package com.cables.gps;
public class Location {
private int latDegree;
private int latMinutes;
private int latSeconds;
private char latDirection;
private int longDegree;
private int longMinutes;
private int longSeconds;
private char longDirection;
private float latitude;
private float longitude;
private void init() throws Exception {
latitude = latDegree + (latMinutes / 60.0f) + (latSeconds / 3600.0f);
if (latDirection == 'N') {
latitude *= 1f;
} else if (latDirection == 'S'){
latitude *= -1f;
} else {
throw new Exception("Invalid Latitude Direction: " + latDirection);
}
longitude = longDegree + (longMinutes / 60.0f) + (longSeconds / 3600.0f);
if (longDirection == 'E') {
longitude *= 1f;
} else if (longDirection == 'W') {
longitude *= -1f;
} else {
throw new Exception("Invalid Longitude Direction: " + longDirection);
}
}
public String toString() {
String returnString = "";
try {
init();
} catch (Exception e) {
e.printStackTrace();
return null;
}
returnString += "(" + latitude + ", " + longitude + ")";
return returnString;
}
public void setLatitude(int deg, int min, int sec, char dir) {
latDegree = deg;
latMinutes = min;
latSeconds = sec;
latDirection = dir;
}
public void setLongitude(int deg, int min, int sec, char dir) {
longDegree = deg;
longMinutes = min;
longSeconds = sec;
longDirection = dir;
}
public int getLatDegree() {
return latDegree;
}
public void setLatDegree(int latDegree) {
this.latDegree = latDegree;
}
public int getLatMinutes() {
return latMinutes;
}
public void setLatMinutes(int latMinutes) {
this.latMinutes = latMinutes;
}
public int getLatSeconds() {
return latSeconds;
}
public void setLatSeconds(int latSeconds) {
this.latSeconds = latSeconds;
}
public char getLatDirection() {
return latDirection;
}
public void setLatDirection(char latDirection) throws Exception {
if (latDirection != 'N' && latDirection != 'S') {
throw new Exception("Invalid Latitude Direction: " + latDirection);
}
this.latDirection = latDirection;
}
public int getLongDegree() {
return longDegree;
}
public void setLongDegree(int longDegree) {
this.longDegree = longDegree;
}
public int getLongMinutes() {
return longMinutes;
}
public void setLongMinutes(int longMinutes) {
this.longMinutes = longMinutes;
}
public int getLongSeconds() {
return longSeconds;
}
public void setLongSeconds(int longSeconds) {
this.longSeconds = longSeconds;
}
public char getLongDirection() {
return longDirection;
}
public void setLongDirection(char longDirection) throws Exception {
if (longDirection != 'E' && longDirection != 'W') {
throw new Exception("Invalid Longitude Direction: " + longDirection);
}
this.longDirection = longDirection;
}
public float getLatitude() throws Exception {
init();
return latitude;
}
public void setLatitude(float latitude) {
this.latitude = latitude;
}
public float getLongitude() throws Exception {
init();
return longitude;
}
public void setLongitude(float longitude) {
this.longitude = longitude;
}
public void setLatString(String latStr) throws Exception {
latStr = latStr.trim();
String[] values = latStr.split(" ");
latDegree = Integer.parseInt(values[0].trim());
latMinutes = Integer.parseInt(values[1].trim());
latSeconds = Integer.parseInt(values[2].trim());
latDirection = values[3].trim().charAt(0);
if (latDirection != 'N' && latDirection != 'S') {
throw new Exception("Invalid Latitude Direction: " + latDirection);
}
}
public void setLongString(String longStr) throws Exception {
longStr = longStr.trim();
String[] values = longStr.split(" ");
longDegree = Integer.parseInt(values[0].trim());
longMinutes = Integer.parseInt(values[1].trim());
longSeconds = Integer.parseInt(values[2].trim());
longDirection = values[3].trim().charAt(0);
if (longDirection != 'E' && longDirection != 'W') {
throw new Exception("Invalid Longitude Direction: " + longDirection);
}
}
}
LocationOps.java
package com.cables.gps;
public class LocationOps {
private Location location1 = null;
private Location location2 = null;
private int radius = 6371;
public LocationOps(Location location1, Location location2) {
this.location1 = location1;
this.location2 = location2;
}
public double calculateDistance() throws Exception {
double distance = 0.0;
double lat1 = degreesToRadians(location1.getLatitude());
double lat2 = degreesToRadians(location2.getLatitude());
double dLat = degreesToRadians(
location2.getLatitude() - location1.getLatitude());
double dLong = degreesToRadians(
location2.getLongitude() - location1.getLongitude());
double a = Math.sin(dLat/2.0) * Math.sin(dLat/2.0)
+ Math.cos(lat1) * Math.cos(lat2) *
Math.sin(dLong/2.0) * Math.sin(dLong/2.0);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
distance = radius * c;
return distance;
}
public double degreesToRadians(double degrees) {
double radians = 0.0;
radians = degrees * Math.PI / 180.0;
return radians;
}
public static void main(String[] args) throws Exception {
Location loc1 = new Location();
loc1.setLatDegree(50);
loc1.setLatMinutes(03);
loc1.setLatSeconds(59);
loc1.setLatDirection('N');
loc1.setLongDegree(005);
loc1.setLongMinutes(42);
loc1.setLongSeconds(53);
loc1.setLongDirection('W');
Location loc2 = new Location();
loc2.setLatDegree(58);
loc2.setLatMinutes(38);
loc2.setLatSeconds(38);
loc2.setLatDirection('N');
loc2.setLongDegree(003);
loc2.setLongMinutes(04);
loc2.setLongSeconds(12);
loc2.setLongDirection('W');
System.out.println(new LocationOps(loc1, loc2).calculateDistance());
loc1.setLatString("50 03 59 N");
loc1.setLongString("005 42 53 W");
loc2.setLatString("58 38 38 N");
loc2.setLongString("003 04 12 W");
System.out.println(new LocationOps(loc1, loc2).calculateDistance());
}
}
0 Comments