From 7ffe8dcea84ef8c0a94e9ca21277564bfaa2b67a Mon Sep 17 00:00:00 2001 From: YaFedImYaEatIm Date: Fri, 23 Sep 2016 11:58:47 +1200 Subject: [PATCH] Added Calculation for Heading, Leg Distance and Total Distnace also added the appropriate functio nto commit these to database. --- res/userdb.db | Bin 8387584 -> 8387584 bytes .../seng202/group9/Controller/Dataset.java | 41 +++++++++++++++++- .../java/seng202/group9/Core/FlightPath.java | 33 ++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/res/userdb.db b/res/userdb.db index 4ed487654814cd8370c1674f904d118286f24358..2d8e254ad28e88edcf4758b89f5b6e32fb442a63 100644 GIT binary patch delta 3604 zcmai0dr(x@8NZKZS%H}g>zXRA`7f6ix&{(5eyuSprFx2yF2Px zk|u3Y8dp2En#MY5l4&$raO&%7CrW5dsiV~-I&nJDiACevI%;dr-8~oG%^$rx-~RFY z&hMP>ob!FZ^SK{CXWiKP64bjXYU*=}3Y$z(QNP=&%c6H5XnH?#GP{XVvXEl$u~*n3 z_8<${oooqn)c+fd-rM*arvGTnAJQj=utvJ4t-EJd_tKIT9j~_cEVVcHv@;Y%#RlV@ z9V_FMYzFP!TCbfz=Wjl!={=~Su`$?KYzk~4*p%2pv8k|)!xn}u99sl7HMa5CBC$nb zi^dj%O`2=M;6aTRWXCcJN~^7`x6WVWa5%znC^Y+oVxLH1-)8%7hlgY`ObCV<_7VOM zbF)v`M{GK)VlFcWnYWpxjF}0gzo9>+J#;-ik5*9MQU|HGsYb8iaA<0tK0{5%QW}b4 zsnAf0W*lX9XH7|&Ky4WjC7YLX0HI+q$(y@WBpYFeQeLZOTV!Qiln?W^eR?wD5szY zTi@%WPb@o9rm1PIbdM@&n2M1~hPT&<#m5&|hH+u6=O}92-{(mcG?gu(yb&X8et(iK zd2rg^#>-6qop6PB+v?~6kD&Dk6Fow#M~L$X@g8B4M@aApi5_9HN0{Ofrh0^F9$~si zNb(3XJVLTZNEr}jGT*xzsYoh=rZU*mY%g6(kEi}d^|1?BH8a9&WvUqseV*R&a{W<_ z)Jzg`q)HVUsu~N~;E#Dj6lmM3xjArFNqZ>s|0_~gP?d7zGBs={{%A(NOq0ceQv$Ts z?;Tvb`Lq~xuQIOW$oV!kmwuh_a8Y8=862-Q@>cOdjwi*UExi4KWma5 zAz365BtF)ku|zOgvLt@{+*{c*JRgZ;IUyqoj^u{Cu(RC8m*a&^mQ0D*% z25J>?{cFH0|2P#t+S-S4zk|is8}o8G^Nt)+;PQ;T1Lu#~kS$Hup+GrrK&O~B{N%Kv z0gJ-XN!;At$1*;iBPt+sWfd?ReA^KIlzDIX!|fs#1lP-o0Ek1)5oM71vND(r8Pf8r ze|_QXrzg|IAd!&q2#$z_Oy})Y75-aDm*{PYInK5F5=HLX_2;gQPbkoQVI-^S@iN&F z&Jk6S`Le2*4JIG|U#-=7UHxK^z<@SC9+pdlMyA`#rK2-t`;M-`+LZA?V--Q)Q2x-i zk6oap*IVt~@D?DBak)f~WVT$!=ncu}pk9CKK<`wfIfG zMD4`xRXCqt`YfDZ3;mJNOidYjWfiFj;yM8Rmt25l zkLKmcjsz|zkk8xsYU%AZ8+|!n)%K3?LwUJK)rEc)<7@);4~H(CDYXNFPvR^;qWgu* z=u7$haTfjAm}JqVEF4X=&e;PRQs%;4wGn_g;<@Y~e!0`;D>*;EMtQdG&Ymrz>fxpx zf1Ln8L*6$JdY>Hz1drpg0_hIEu*@b!Z}7?P!u((5T{@pCM!7VebGO!E{)VWF$9D*T zIAXcXAilGr(D~x@npbZ&f@@aBr)<~hAcA@XXCpWV z!MO;|Lof|N1A;~bO$eG1Oh+&S!Au0R5X?rMfIs}Qs!xDdf=1RV(0Am~J}7Qsab3JBIASdU-> zf{PJsL~sd$OA%~Buo=M?1X~e&1;I81mm&Bng6#-)Ac(iH9KjU`zJ}mR1UnJzLU0v= os}bx*um{042(Cr&bp+QTxE{eb5PTEC4G3;T@F#zSuI*3%2h=_(5C8xG delta 2668 zcmeH}{ZCU@7{|}OrxePIyp&qByof7!J4Db80Y$mDl$T0r3kBpwu;TFL843=Zvcagj z$0pmdVO*#tW^;4dmc=Y8D*WIJ?gwAUT-+9CbhwyBj0>90`4S>5?p!Fc`_ujb+kBdy zC*Sj&^Ub->bFOFf8TBx_4Po_!Bs?P|IF68rFZT$UT>Vk^XW?u_)O07If76@vBJHII z=uTR|pPKykMSfBD3BUJL)VF*F@7q(Oiw-277&Xn{CI&GHx&XRR)7IG9Hm`McLDRhapbQlwfT3mtGJ+TyMld6U5y}W-%wU8wA{dd3D2ALXy02HO z6SMT3is*Fqn!KWwE|)8qZJwj!gpSJ_{gWX5=pX2xQ zTlhjgj(f;m;y&lLb9OG7qvSd{O1!@G{yI_}Ux-gA)db-(Wt#p*hlM_9*t@ii77FP|n?l;|> zBSb4ETWuDp#J@~ZnyLFCcUP>-I&iG)2UVi>xsqcWlFCaY=cMwHSl3-Tg7N*yQB#Yi zPHZ~QYWJ_Yu;*Np!5bsiKiMsfKD;PIKF=ka^DQsc8N!7KWe`|!aZ-4gCUV+`GdE18bb zbwY?jS!pei%zkC=u0PE7YC&vBX+M4b(+`q^r+iP?_BEI3X4NNa6v1Mt+-@<;Cm`M! zJ2HHyU2M42>IAhS=(JT7 zPMMJ|fA`TU;fc7mGQ|Dhn0s!(w33$}C!53WH8ZM>NlYvlb#_{qaBVn(>`f&78pCp$esVq^EVk*C@Fj9i#T zCm(3ggi0j+_-PX?Zr8ARq=H1Um+@=tyy=% z%T?(ZGZ}hD3}Y5!Hp9S(WyCS!83~Lzj6}v<#!Cz%BdL$8O6Kk^B1BK>2)#j%)AwG~ z=ZpG$QJ?=)pW1sTFRSJHtmd)^-K(+u>>aYq>l?BNDJcQ5?4oP;g|-OI0qyK>r`OXW z^m$rLp5~q=(@@{ge3L-GQr$MiLpyppQ!2Cidnc(5ydG8I7Hb|~ zyn3O~Da=+Rm7LP^eylc+#OBREDAp#W!hyge-(?ge3?|5pocgAuLD8MGz4r1T#V&f(0QTp#Y%}p$Nf>umYhN!G=(R zU`KEuI1x$_$`D)#

oBl?W>lst~FXY7lA>Rw2|O)FZ4$a3iciXh2wt@ESrR!a9WY z2pbSKA}|ZDBQzmwLfDMZjL?Fx1>p^ZR)jW$tq5--Y(v 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); + } + } }