Initial load for GoogleMaps done

main
YaFedImYaEatIm 9 years ago
parent 2613489dad
commit ae3fbefd0d

@ -7,6 +7,7 @@ public class FlightPath {
private ArrayList<FlightPoint> 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;
}
}

@ -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;
}
}

@ -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(){

@ -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<Position> route = new ArrayList<Position>();
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();
}
}

@ -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<String> flightPathListView;
final ObservableList<String> flightList = FXCollections.observableArrayList();
@ -64,6 +68,7 @@ public class FlightSummaryController extends Controller {
} catch (Exception e) {
e.printStackTrace();
}
map = new Map(mapView);
}
}

@ -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<Worker.State>(){
public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState){
String scriptToExecute = "displayRoute(" + newRoute.toJSONArray() + ");";
webEngine.executeScript(scriptToExecute);
}
});
}
}

@ -64,8 +64,7 @@
</Pane>
<Pane prefHeight="934.0" prefWidth="474.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<WebView prefHeight="431.0" prefWidth="310.0" />
<Rectangle arcHeight="5.0" arcWidth="5.0" fill="#0d93e0" height="432.0" layoutX="5.0" layoutY="-1.0" smooth="false" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" width="305.0" />
<WebView fx:id="mapView" prefHeight="431.0" prefWidth="310.0" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html>
<head>
<title>Google Map Demo</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
var map;
var marker1;
var marker2;
var path;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 39.144684, lng: -84.510079},
zoom: 15
});
new google.maps.Marker({
position: {lat: 39.144684, lng: -84.510079},
map: map,
title: '\u0048\u0061\u0072\u0061\u006d\u0062\u0065'
});
}
function displayRoute(flightPath) {
// CLEAR EXISTING MARKERS
if (marker1 !== undefined && marker2 !== undefined && path !== undefined) {
marker1.setMap(null);
marker2.setMap(null);
path.setMap(null);
}
if (flightPath.length < 2) {
return;
}
// CREATE MARKERS AT START AND FINISH
marker1 = new google.maps.Marker({
position: flightPath[0],
map: map
});
marker2 = new google.maps.Marker({
position: flightPath[flightPath.length - 1],
map: map
});
// DRAW POLYLINE FOR ROUTE
path = new google.maps.Polyline({
path: flightPath,
geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2
});
path.setMap(map);
repositionMap(flightPath);
}
function repositionMap(flightPath) {
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < flightPath.length; i++) {
bounds.extend(flightPath[i]);
}
map.fitBounds(bounds);
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBnt2PJyKZsh-qrsTkbZwSGuUNWPromlLg&callback=initMap" defer></script>
</body>
</html>
Loading…
Cancel
Save