From ae3fbefd0def360e2a3bd5bfbdd29115a88298de Mon Sep 17 00:00:00 2001 From: YaFedImYaEatIm Date: Sat, 17 Sep 2016 16:40:25 +1200 Subject: [PATCH 1/3] Initial load for GoogleMaps done --- .../java/seng202/group9/Core/FlightPath.java | 11 +++ .../java/seng202/group9/Core/Position.java | 14 +++ src/main/java/seng202/group9/Core/Route.java | 12 +++ .../java/seng202/group9/Core/RoutePath.java | 35 ++++++++ .../group9/GUI/FlightSummaryController.java | 7 +- src/main/java/seng202/group9/Map/Map.java | 39 ++++++++ src/main/resources/flight_data_summary.fxml | 3 +- src/main/resources/map.html | 88 +++++++++++++++++++ 8 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 src/main/java/seng202/group9/Core/Position.java create mode 100644 src/main/java/seng202/group9/Core/RoutePath.java create mode 100644 src/main/java/seng202/group9/Map/Map.java create mode 100644 src/main/resources/map.html diff --git a/src/main/java/seng202/group9/Core/FlightPath.java b/src/main/java/seng202/group9/Core/FlightPath.java index e0df38a..36b82dc 100644 --- a/src/main/java/seng202/group9/Core/FlightPath.java +++ b/src/main/java/seng202/group9/Core/FlightPath.java @@ -7,6 +7,7 @@ public class FlightPath { private ArrayList flightPoints; private String departureAirport; private String arrivalAirport; + private RoutePath routePath; /** * @@ -88,4 +89,14 @@ public class FlightPath { this.flightPoints.add(flightPoints.get(i)); } } + + public RoutePath getRoutePath(){ + if (routePath == null){ + routePath = new RoutePath(); + for (FlightPoint point: flightPoints){ + routePath.addPosition(new Position(point.getLatitude(), point.getLongitude())); + } + } + return routePath; + } } diff --git a/src/main/java/seng202/group9/Core/Position.java b/src/main/java/seng202/group9/Core/Position.java new file mode 100644 index 0000000..555035d --- /dev/null +++ b/src/main/java/seng202/group9/Core/Position.java @@ -0,0 +1,14 @@ +package seng202.group9.Core; + +/** + * Created by fwy13 on 17/09/16. + */ +public class Position { + public double lat; + public double lng; + + public Position(double lat, double lng) { + this.lat = lat; + this.lng = lng; + } +} \ No newline at end of file diff --git a/src/main/java/seng202/group9/Core/Route.java b/src/main/java/seng202/group9/Core/Route.java index 07b975d..ffff49c 100644 --- a/src/main/java/seng202/group9/Core/Route.java +++ b/src/main/java/seng202/group9/Core/Route.java @@ -18,6 +18,7 @@ public class Route { private Airport sourceAirport; private Airport destinationAirport; private Airline airline = null; + private RoutePath routePath = null; /** * Constructor for pulling from database @@ -246,6 +247,17 @@ public class Route { throw new DataException("This Route already exists."); } } + + public RoutePath getRoutePath(){ + if (routePath == null) { + routePath = new RoutePath( + new Position(getSourceAirport().getLatitude(), getSourceAirport().getLongitude()), + new Position(getDestinationAirport().getLatitude(), getDestinationAirport().getLongitude()) + ); + } + return routePath; + } + @Override public String toString(){ diff --git a/src/main/java/seng202/group9/Core/RoutePath.java b/src/main/java/seng202/group9/Core/RoutePath.java new file mode 100644 index 0000000..38bc193 --- /dev/null +++ b/src/main/java/seng202/group9/Core/RoutePath.java @@ -0,0 +1,35 @@ +package seng202.group9.Core; + +import java.util.ArrayList; +import java.util.Collections; + +/** + * Created by brad on 9/09/16. + * Edited by fwy13 + */ +public class RoutePath { + private ArrayList route = new ArrayList(); + + public RoutePath(Position ...points) { + Collections.addAll(route, points); + } + + public RoutePath(){ + + } + + public void addPosition(Position position){ + route.add(position); + } + + public String toJSONArray() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("["); + for (Position pos : route){ + stringBuilder.append( + String.format("{lat: %f, lng: %f}, ", pos.lat, pos.lng)); + } + stringBuilder.append("]"); + return stringBuilder.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/seng202/group9/GUI/FlightSummaryController.java b/src/main/java/seng202/group9/GUI/FlightSummaryController.java index 5fd7d93..74815a7 100644 --- a/src/main/java/seng202/group9/GUI/FlightSummaryController.java +++ b/src/main/java/seng202/group9/GUI/FlightSummaryController.java @@ -6,10 +6,12 @@ import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.ListView; +import javafx.scene.web.WebView; import seng202.group9.Controller.App; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.SceneCode; import seng202.group9.Core.FlightPath; +import seng202.group9.Map.Map; import java.net.URL; import java.util.ArrayList; @@ -25,7 +27,9 @@ public class FlightSummaryController extends Controller { @FXML private Button flightRawData; - + private Map map; + @FXML + private WebView mapView; @FXML ListView flightPathListView; final ObservableList flightList = FXCollections.observableArrayList(); @@ -64,6 +68,7 @@ public class FlightSummaryController extends Controller { } catch (Exception e) { e.printStackTrace(); } + map = new Map(mapView); } } diff --git a/src/main/java/seng202/group9/Map/Map.java b/src/main/java/seng202/group9/Map/Map.java new file mode 100644 index 0000000..16fb220 --- /dev/null +++ b/src/main/java/seng202/group9/Map/Map.java @@ -0,0 +1,39 @@ +package seng202.group9.Map; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.concurrent.Worker; +import javafx.scene.web.WebEngine; +import javafx.scene.web.WebView; +import seng202.group9.Core.Position; +import seng202.group9.Core.RoutePath; + +/** + * Created by fwy13 on 17/09/16. + */ +public class Map { + + private WebEngine webEngine; + private WebView webView; + + public Map(WebView webView){ + this.webView = webView; + webEngine = webView.getEngine(); + initMap(); + } + + public void initMap() { + webEngine.load(getClass().getClassLoader().getResource("map.html").toExternalForm()); + } + + public void displayRoute(final RoutePath newRoute) { + webEngine.getLoadWorker().stateProperty().addListener( + new ChangeListener(){ + public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState){ + String scriptToExecute = "displayRoute(" + newRoute.toJSONArray() + ");"; + webEngine.executeScript(scriptToExecute); + } + }); + } + +} diff --git a/src/main/resources/flight_data_summary.fxml b/src/main/resources/flight_data_summary.fxml index b8c936c..24f8007 100644 --- a/src/main/resources/flight_data_summary.fxml +++ b/src/main/resources/flight_data_summary.fxml @@ -64,8 +64,7 @@ - - + diff --git a/src/main/resources/map.html b/src/main/resources/map.html new file mode 100644 index 0000000..a79ccfa --- /dev/null +++ b/src/main/resources/map.html @@ -0,0 +1,88 @@ + + + + Google Map Demo + + + + + +
+ + + + \ No newline at end of file From 548ffa99f108406f6dcedbf8ae40dd39ab4e40ec Mon Sep 17 00:00:00 2001 From: Michael Wilson Date: Sat, 17 Sep 2016 17:50:35 +1200 Subject: [PATCH 2/3] Added webveiws for later maps implimentation. --- src/main/resources/airline_summary.fxml | 4 ++-- src/main/resources/airport_summary.fxml | 6 ++++-- src/main/resources/routes_summary.fxml | 6 ++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/resources/airline_summary.fxml b/src/main/resources/airline_summary.fxml index 13a97f9..59bd2a1 100644 --- a/src/main/resources/airline_summary.fxml +++ b/src/main/resources/airline_summary.fxml @@ -9,9 +9,9 @@ - + @@ -83,7 +83,7 @@
- + diff --git a/src/main/resources/airport_summary.fxml b/src/main/resources/airport_summary.fxml index a490896..baf4ad2 100644 --- a/src/main/resources/airport_summary.fxml +++ b/src/main/resources/airport_summary.fxml @@ -9,9 +9,9 @@ - + @@ -83,8 +83,10 @@ + + + - diff --git a/src/main/resources/routes_summary.fxml b/src/main/resources/routes_summary.fxml index b56fe76..70f78b3 100644 --- a/src/main/resources/routes_summary.fxml +++ b/src/main/resources/routes_summary.fxml @@ -9,9 +9,9 @@ - + @@ -83,8 +83,10 @@ + + + - From a9edea76905b5e29a1d826f3faa7e0a3da12f785 Mon Sep 17 00:00:00 2001 From: YaFedImYaEatIm Date: Sat, 17 Sep 2016 18:01:35 +1200 Subject: [PATCH 3/3] Finished Google Maps API --- res/userdb.db | Bin 4368384 -> 4374528 bytes .../seng202/group9/Controller/Dataset.java | 6 ++--- .../java/seng202/group9/Core/FlightPath.java | 5 ++-- .../java/seng202/group9/Core/RoutePath.java | 5 ++++ .../group9/GUI/FlightSummaryController.java | 14 ++++++++++- src/main/java/seng202/group9/Map/Map.java | 22 +++++++++++------- src/main/resources/map.html | 13 +++++++++++ 7 files changed, 49 insertions(+), 16 deletions(-) diff --git a/res/userdb.db b/res/userdb.db index f4fd46339aa358e5e4eb86ca9b0d54280489929e..242a755491041fd3eb1324ccab3434535fd94d17 100644 GIT binary patch delta 5464 zcmeHLYj9J?8NIuEZP~`cGO{J!$Pa8;eqgW-7=x{QZDR?^vTUsc;$;k0!85!XOlw*v zHcql3kO>A&Q98*aWJrM)a8lgC`BU(8Iw?t-mSK{iWSWMifoUdTCL|?oA${y#EtdCU zw}1Mp6U|(K?ss12OvjX4GXqDjQH0h&n5?hQBap*k;f< z3{sDTo7#Ts2$*))8!^(q+dt-1itFHJK+DQh_0bsH6)Dx*mp zw;Jhi8MRC3Jv4-#qW_UhC+KyOUZ-ftJZ$sUp;-I#>dRS1>4=1+CJ79|x9LAkG%Uqz zJ#yg@f4adnBiXvH3Puk*=0<-X$Wu%&ftz5CwWbC>?(Xi`ygjn#+uOUkBYV2{c6RM* z?~d%)-Tt3$o6bb1lU2*xWu`LVx=@c0_EragFxFzpHC!_qZV5 zw>uFGb#;sZU6GE?uAN)QekA!CF-Xo-jmfDr-P4j-udtenJZ z{!#Dc=w;Wv;fs4~;ZeUFlY7+V#-cJKuu5i$zWN5kNOO-mf=hux0SN$5Dd_hg` zV?87>YH4Sq`{*ll2Ym)VhOfhC;1*a7Gr*s~2si}V!D5gm{XzPfbXeLVRa3a#Y6ND$ z=awX>dfnDgOPln>mC>Aj?_S@b)6Vs8?fGHR2R4U=W-$)w_BJTZmX+=`6zd+Hzo2OF zOYmpshNUl@Z~Kj$mpujs20E>Rn-za{9Q+sOhQZcPpPc);Jxg4>-tEhZDTh>x>M)ND zH?ZMY!9kBXK76!d$LDF6zVnK+{l^=3{q@7+j%hlqySdptEn4ojm^|yE%LmAN_x5eU^Duxt)OS3XH*59jI z`W!|v7IHT$s*x{I_xLBOFKl;iF5dU^H(q+io-RHJzbBB+NpKEcuDyKpjC1o-v9?(6 z0s9mY=~3_$UxUi%a=w56wVSv0IXAy~tp7$NtGqBxEItrUi$1oBCY>rKRs?6k8tE%7XH8~?k%%5F&C%FI`Y1!s%V~Wv0 z^M(|%IuHod-F(EY*Rh+zi78@|E1r)X*W$&zG=7rk9Ldw@%w6CnMDdp=v{Og^&&sY zhkt{=hR0zK^g}z8z`Niy7yu#Q06@AXos;&*Z0nQqERIq^LTKw#1uo?ZTq4Fa1umIH zfr|xQMO1-{CsAOBh@=Yam`s6-1O-Nca8X==?P6k@0^7L)7m6`WfeR;5;DQ8}DlpO% zxZt5zVtxWey9Q|rJfACYz8KRKI6tnyd4d9?dRN}W3Y;q_Fk%XvJCOqC2sp^(H;3Z5 z1dnPGe5JruVAIx3r=lO1bnLdpMxR%+RmVIbS*Un$OT#=??vr0%dcQke34J6v*Y-WT zZ1jzC$6OH`P<$|YX69m!7*qU8n|ls_Y*N^8eOhpnbM4*B@BOOD@0k4%wn>>C ztLO<}NVy;tqyIv*EqS^H-o{iqESB_zsTSuB(uZ&|8ZoR?? zOyiCUh}!iEZr2x$jc0BRX?A@PUrTS-7wWLgt}l$+^>Y6Dv2zYfBT&xm`T}u`X4e<+ z`So_49hMTFA8B^IjM?=??2u%U0<2+%&;SadQiR}jcnQocrj!*%dYF^GMvQ5sui>fb8-2A7%Sd0%Ne}5_jPwvEJt&YaQ__QzkdDP! zG}1B8Mo)TR49iHDHPQodY=ZPQk#w1o-o{C99UITsk~Pv>`C59?{W>fo-5)2tMIc>P z0xg_$pEyP%-N)zGlin<1HPV~oXEd)E(j0=9I|Ppy(;R|_FQGr9trAI~4q+81L4QVb zi%9Aa+><#3msort?20>tCNVM1AvAG^uu_a^4q+uvT7O1sOkk-)kTr+U$gzntT0;WG znA99XL);;-o-x2{31enQ61=AWqhP4BaFZtW#*CB{gCT{!4fOA9o2b;6Yy0|d&D*qn z{)>Yj7PJd{g3R`W_KEg{jr`HXZGep38~K*7LCjX$5;m}!Ca?kPMXa_Ztmj+8Ix(hg U3G4W?(c6Hv4`G{>wc3{OZ(a#CM*si- delta 1046 zcma)3TWAzl7@nE47i~7pZf?8QwoV#bR~t3aTzb{riA%Du6xu?oP$W=RSV3D5eDJAAiw{2aN%5gY@KIaZ37W(_2%htB{_~yh z`_6x)opNjco|RX~V7RmLV-Yxi54^etka5>$E=?Xvc%dR0B`hyKc*1t{uG2Rxg#ydOJGp@WhzEfUFZaOw-d-E&huAJt2 zefp7+?D&z4?>XqsI$rt7x0R&rY3n1`S+9DuG~+tvM!5FhKtoiEp07oQ{}$oz_V{!B zHoi1xT(4cvRkf=5vGHSbP+e9;UHe5_RBx-xYD!I2J5Fi`7tWk$3&$rX)y2JD;dsfK z`LJYr*734?YQ`#?Wy|pgVSeD2W~Uv~u}+!KPKpfr4Mavq+Q?<}{8NmZHah3!rQY{L zc6%uP$)w-O#Mo108&zh{GtnCT3CZR0f!bW}?`mi$8j2t5^FP@k^@*UIA8S`z7eT0m zMhGH61c?w4CN>e9iRXw0B0@A0&l62Vl!y_{L<`YMv=Qw@oJbH`h!=>h#EZmB#LL7s zLMJ+iSBOqxJMk*<8nJ^&5<7`q#Op*Cv76XK>?OL19%3J{pXep}h<;*#c!PM8c#C+O zc!zkGI6xdEQbhV3jO|OOjZ`f)d_h$IS}+pzz}Ln(E6i_b*0 ZqZB$&@4g%RSCgp|ZPFb5{@gc4 flightPoints; private String departureAirport; private String arrivalAirport; - private RoutePath routePath; + final private RoutePath routePath = new RoutePath(); /** * @@ -91,8 +91,7 @@ public class FlightPath { } public RoutePath getRoutePath(){ - if (routePath == null){ - routePath = new RoutePath(); + if (routePath.getRoute().size() == 0){ for (FlightPoint point: flightPoints){ routePath.addPosition(new Position(point.getLatitude(), point.getLongitude())); } diff --git a/src/main/java/seng202/group9/Core/RoutePath.java b/src/main/java/seng202/group9/Core/RoutePath.java index 38bc193..e8bf10b 100644 --- a/src/main/java/seng202/group9/Core/RoutePath.java +++ b/src/main/java/seng202/group9/Core/RoutePath.java @@ -22,6 +22,10 @@ public class RoutePath { route.add(position); } + public ArrayList getRoute() { + return route; + } + public String toJSONArray() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("["); @@ -32,4 +36,5 @@ public class RoutePath { stringBuilder.append("]"); return stringBuilder.toString(); } + } \ No newline at end of file diff --git a/src/main/java/seng202/group9/GUI/FlightSummaryController.java b/src/main/java/seng202/group9/GUI/FlightSummaryController.java index 74815a7..7acf4ee 100644 --- a/src/main/java/seng202/group9/GUI/FlightSummaryController.java +++ b/src/main/java/seng202/group9/GUI/FlightSummaryController.java @@ -1,5 +1,7 @@ package seng202.group9.GUI; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; @@ -11,6 +13,7 @@ import seng202.group9.Controller.App; import seng202.group9.Controller.Dataset; import seng202.group9.Controller.SceneCode; import seng202.group9.Core.FlightPath; +import seng202.group9.Core.RoutePath; import seng202.group9.Map.Map; import java.net.URL; @@ -68,7 +71,16 @@ public class FlightSummaryController extends Controller { } catch (Exception e) { e.printStackTrace(); } - map = new Map(mapView); + if (theDataSet.getFlightPaths().size() > 0){ + map = new Map(mapView, theDataSet.getFlightPaths().get(0).getRoutePath()); + }else{ + map = new Map(mapView, new RoutePath()); + } + flightPathListView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { + public void changed(ObservableValue observable, String oldValue, String newValue) { + map.displayRoute(theDataSet.getFlightPaths().get(flightPathListView.getSelectionModel().getSelectedIndices().get(0)).getRoutePath()); + } + }); } } diff --git a/src/main/java/seng202/group9/Map/Map.java b/src/main/java/seng202/group9/Map/Map.java index 16fb220..8e65120 100644 --- a/src/main/java/seng202/group9/Map/Map.java +++ b/src/main/java/seng202/group9/Map/Map.java @@ -15,25 +15,29 @@ public class Map { private WebEngine webEngine; private WebView webView; + private boolean canLoad = false; - public Map(WebView webView){ + public Map(WebView webView, final RoutePath newRoute){ this.webView = webView; webEngine = webView.getEngine(); initMap(); + webEngine.getLoadWorker().stateProperty().addListener( + new ChangeListener() { + public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { + if (newState == Worker.State.SUCCEEDED){ + displayRoute(newRoute); + } + } + }); } public void initMap() { webEngine.load(getClass().getClassLoader().getResource("map.html").toExternalForm()); } - public void displayRoute(final RoutePath newRoute) { - webEngine.getLoadWorker().stateProperty().addListener( - new ChangeListener(){ - public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState){ - String scriptToExecute = "displayRoute(" + newRoute.toJSONArray() + ");"; - webEngine.executeScript(scriptToExecute); - } - }); + public void displayRoute(RoutePath newRoute) { + String scriptToExecute = "displayRoute(" + newRoute.toJSONArray() + ");"; + webEngine.executeScript(scriptToExecute); } } diff --git a/src/main/resources/map.html b/src/main/resources/map.html index a79ccfa..f02dc65 100644 --- a/src/main/resources/map.html +++ b/src/main/resources/map.html @@ -36,6 +36,19 @@ }); } + function displayAirport(position){ + map = new google.maps.Map(document.getElementById('map'), { + center: position[0], + zoom: 15 + }); + + new google.maps.Marker({ + position: position[0], + map: map, + title: '\u0048\u0061\u0072\u0061\u006d\u0062\u0065' + }); + } + function displayRoute(flightPath) { // CLEAR EXISTING MARKERS if (marker1 !== undefined && marker2 !== undefined && path !== undefined) {