diff --git a/res/userdb.db b/res/userdb.db index 4ed4876..2d8e254 100644 Binary files a/res/userdb.db and b/res/userdb.db differ diff --git a/src/main/java/seng202/group9/Controller/Dataset.java b/src/main/java/seng202/group9/Controller/Dataset.java index a5a4780..3dea9e6 100644 --- a/src/main/java/seng202/group9/Controller/Dataset.java +++ b/src/main/java/seng202/group9/Controller/Dataset.java @@ -210,6 +210,7 @@ public class Dataset { } rs.close(); stmt.close(); + flightPaths.get(i).updateFlightPointInfo(); } /*//////////////// //Get all Routes// @@ -240,6 +241,10 @@ public class Dataset { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } + //update all flightpaths + for (FlightPath flightPath: flightPaths){ + //updateFlightPointInfo(flightPath); + } createDataLinks(); } @@ -720,9 +725,12 @@ public class Dataset { } if (numOfFlights > 0){ stmt.execute(insertFlightPointQuery); - stmt.close(); } + stmt.close(); + c.close(); + flightPaths.add(flightPathToAdd); + updateFlightPointInfo(flightPathToAdd); flightPathDictionary.put(flightPathToAdd.getID(), flightPathToAdd); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); @@ -1278,6 +1286,7 @@ public class Dataset { FlightPoint pointToAdd = new FlightPoint(name, pointID+1, id, type, via, headingVal, altitudeVal, legDistVal, totalDistVal,latitudeVal, longitudeVal); + updateFlightPointInfo(flightPathDictionary.get(Integer.valueOf(id))); flightPathDictionary.get(Integer.valueOf(id)).addFlightPoint(pointToAdd, index); } @@ -1962,7 +1971,7 @@ public class Dataset { } flightPath.setArrivalAirport(flightPoint.getName()); } - + updateFlightPointInfo(flightPath); createDataLinks(); } @@ -2025,5 +2034,33 @@ public class Dataset { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } + updateFlightPointInfo(flightPath); + } + + /** + * Updates the Leg Distance, Total Distance and Bearing(Heading) of the Flight points in the flight path. + * @param flightPath + */ + public void updateFlightPointInfo(FlightPath flightPath){ + flightPath.updateFlightPointInfo(); + Connection c = null; + Statement stmt; + try { + c = DriverManager.getConnection("jdbc:sqlite:res/userdb.db"); + //move all the points after this forward + for (FlightPoint flightPoint: flightPath.getFlightPoints()){ + stmt = c.createStatement(); + String updatePointQuery = "UPDATE `"+this.name+"_Flight_Points` SET `Heading` = "+flightPoint.getHeading()+", " + + "`Tot_Dist` = "+flightPoint.getTotalDistance()+", `Leg_Dist` = "+flightPoint.getLegDistance()+" WHERE `POINT_ID` = " + + "" + flightPoint.getID(); + stmt.execute(updatePointQuery); + stmt.close(); + } + c.close(); + } catch ( Exception e ) { + System.err.println( e.getClass().getName() + ": " + e.getMessage() ); + e.printStackTrace(); + System.exit(0); + } } } diff --git a/src/main/java/seng202/group9/Core/FlightPath.java b/src/main/java/seng202/group9/Core/FlightPath.java index fb24246..1ec0931 100644 --- a/src/main/java/seng202/group9/Core/FlightPath.java +++ b/src/main/java/seng202/group9/Core/FlightPath.java @@ -183,4 +183,37 @@ public class FlightPath { } return routePath; } + public void updateFlightPointInfo(){ + if (flightPoints.size() == 0){ + return; + } + FlightPoint startPoint = flightPoints.get(0); + startPoint.setLegDistance(0); + startPoint.setTotalDistance(0); + startPoint.setHeading(0); + for (int i = 1; i < flightPoints.size(); i ++){ + double distance = 0; + double dLong = flightPoints.get(i - 1).getLongitude() - flightPoints.get(i).getLongitude(); + double dLat = flightPoints.get(i - 1).getLatitude() - flightPoints.get(i).getLatitude(); + dLong = Math.toRadians(dLong); + dLat = Math.toRadians(dLat); + double a = Math.pow((Math.sin(dLat/2)), 2) + Math.cos(Math.toRadians(flightPoints.get(i).getLatitude())) * Math.cos(Math.toRadians(flightPoints.get(i - 1).getLatitude())) * Math.pow(Math.sin(dLong/2), 2); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); + distance = 6371 * c; + //convert distance from km to nautical mile + distance = distance * 0.53995680345572; + flightPoints.get(i).setLegDistance(distance); + flightPoints.get(i).setTotalDistance(distance + flightPoints.get(i).getTotalDistance()); + //calculate bearing + double lat1 = Math.toRadians(flightPoints.get(i - 1).getLatitude()); + double lat2 = Math.toRadians(flightPoints.get(i).getLatitude()); + double lng1 = Math.toRadians(flightPoints.get(i - 1).getLongitude()); + double lng2 = Math.toRadians(flightPoints.get(i).getLongitude()); + double y = Math.sin(dLong) * Math.cos(lat2); + double x = Math.cos(lat1) * Math.sin(lat2); + x -= Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLong); + double heading = 360 - Math.toDegrees(Math.atan2(y, x)); + flightPoints.get(i).setHeading((int)heading); + } + } }