mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Created a canvas map class to fetch map image from google
- also added Bound class to encapsulate map boundary. - created TestMapView and its controller just for testing. #story[928]
This commit is contained in:
@@ -13,67 +13,68 @@ public class App extends Application
|
|||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws Exception {
|
public void start(Stage primaryStage) throws Exception {
|
||||||
Parent root = FXMLLoader.load(getClass().getResource("/views/MainView.fxml"));
|
// Parent root = FXMLLoader.load(getClass().getResource("/views/MainView.fxml"));
|
||||||
|
Parent root = FXMLLoader.load(getClass().getResource("/views/TestMapView.fxml"));
|
||||||
primaryStage.setTitle("RaceVision");
|
primaryStage.setTitle("RaceVision");
|
||||||
primaryStage.setScene(new Scene(root));
|
primaryStage.setScene(new Scene(root));
|
||||||
primaryStage.setMaximized(true);
|
// primaryStage.setMaximized(true);
|
||||||
|
|
||||||
primaryStage.show();
|
primaryStage.show();
|
||||||
primaryStage.setOnCloseRequest(e -> {
|
// primaryStage.setOnCloseRequest(e -> {
|
||||||
StreamParser.appClose();
|
// StreamParser.appClose();
|
||||||
StreamReceiver.noMoreBytes();
|
// StreamReceiver.noMoreBytes();
|
||||||
System.out.println("[CLIENT] Exiting program");
|
// System.out.println("[CLIENT] Exiting program");
|
||||||
System.exit(0);
|
// System.exit(0);
|
||||||
});
|
// });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
// public static void main(String[] args) {
|
||||||
StreamReceiver sr = null;
|
// StreamReceiver sr = null;
|
||||||
|
//
|
||||||
new ServerThread("Racevision Test Server");
|
// new ServerThread("Racevision Test Server");
|
||||||
|
//
|
||||||
try {
|
// try {
|
||||||
Thread.sleep(2000);
|
// Thread.sleep(2000);
|
||||||
} catch (InterruptedException e) {
|
// } catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
// e.printStackTrace();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (args.length == 1 && args[0].equals("-standalone")){
|
// if (args.length == 1 && args[0].equals("-standalone")){
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (args.length == 3 && args[0].equals("-server")){
|
// if (args.length == 3 && args[0].equals("-server")){
|
||||||
|
//
|
||||||
sr = new StreamReceiver(args[1], Integer.valueOf(args[2]), "RaceStream");
|
// sr = new StreamReceiver(args[1], Integer.valueOf(args[2]), "RaceStream");
|
||||||
|
//
|
||||||
} else if(args.length == 2 && args[0].equals("-server")){
|
// } else if(args.length == 2 && args[0].equals("-server")){
|
||||||
switch (args[1]) {
|
// switch (args[1]) {
|
||||||
case "internal":
|
// case "internal":
|
||||||
sr = new StreamReceiver("localhost", 4949, "RaceStream");
|
// sr = new StreamReceiver("localhost", 4949, "RaceStream");
|
||||||
break;
|
// break;
|
||||||
case "staffserver":
|
// case "staffserver":
|
||||||
sr = new StreamReceiver("csse-s302staff.canterbury.ac.nz", 4941, "RaceStream");
|
// sr = new StreamReceiver("csse-s302staff.canterbury.ac.nz", 4941, "RaceStream");
|
||||||
break;
|
// break;
|
||||||
case "official":
|
// case "official":
|
||||||
sr = new StreamReceiver("livedata.americascup.com", 4941, "RaceStream");
|
// sr = new StreamReceiver("livedata.americascup.com", 4941, "RaceStream");
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
//Change the StreamReceiver in this else block to change the default data source.
|
// //Change the StreamReceiver in this else block to change the default data source.
|
||||||
else{
|
// else{
|
||||||
sr = new StreamReceiver("localhost", 4949, "RaceStream");
|
// sr = new StreamReceiver("localhost", 4949, "RaceStream");
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
sr.start();
|
// sr.start();
|
||||||
StreamParser streamParser = new StreamParser("StreamParser");
|
// StreamParser streamParser = new StreamParser("StreamParser");
|
||||||
streamParser.start();
|
// streamParser.start();
|
||||||
|
//
|
||||||
launch(args);
|
// launch(args);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package seng302.models.map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Bound class is to represent square territorial bounds on a map. It contains
|
||||||
|
* four extremity double values(N, E, S, W). N and S are represented as latitudes
|
||||||
|
* in radians. E and W are represented as longitudes in radians.
|
||||||
|
*
|
||||||
|
* Created by Haoming on 10/5/17
|
||||||
|
*/
|
||||||
|
public class Bound {
|
||||||
|
|
||||||
|
private double north, east, south, west;
|
||||||
|
|
||||||
|
public Bound(double north, double east, double south, double west) {
|
||||||
|
this.north = north;
|
||||||
|
this.east = east;
|
||||||
|
this.south = south;
|
||||||
|
this.west = west;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getCentreLat() {
|
||||||
|
return (north + south) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getCentreLng() {
|
||||||
|
return (east + west) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getNorth() {
|
||||||
|
return north;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getEast() {
|
||||||
|
return east;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getSouth() {
|
||||||
|
return south;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getWest() {
|
||||||
|
return west;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package seng302.models.map;
|
||||||
|
|
||||||
|
import javafx.scene.image.Image;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class CanvasMap {
|
||||||
|
|
||||||
|
private Bound bound;
|
||||||
|
private double width, height; // desired image size
|
||||||
|
private int zoom;
|
||||||
|
private String KEY = "AIzaSyC-5oOShMCY5Oy_9L7guYMPUPFHDMr37wE";
|
||||||
|
|
||||||
|
public CanvasMap(Bound bound, double width, double height) {
|
||||||
|
this.bound = bound;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Image getMapImage() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
System.out.println(getRequest());
|
||||||
|
URL url = new URL(getRequest());
|
||||||
|
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
|
||||||
|
|
||||||
|
return new Image(connection.getInputStream());
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getRequest() {
|
||||||
|
zoom = 14;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("https://maps.googleapis.com/maps/api/staticmap?");
|
||||||
|
sb.append(String.format("center=%f,%f", bound.getCentreLat(), bound.getCentreLng()));
|
||||||
|
sb.append(String.format("&zoom=%d", zoom));
|
||||||
|
sb.append(String.format("&size=%.0fx%.0f&scale=2", width / 2, height / 2));
|
||||||
|
sb.append(String.format("&key=%s", KEY));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package seng302.models.map;
|
||||||
|
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.canvas.Canvas;
|
||||||
|
import javafx.scene.canvas.GraphicsContext;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
public class TestMapController implements Initializable{
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Canvas mapCanvas;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(URL location, ResourceBundle resources) {
|
||||||
|
GraphicsContext gc = mapCanvas.getGraphicsContext2D();
|
||||||
|
Bound bound = new Bound(57.662943, 11.848501, 57.673945, 11.824966);
|
||||||
|
CanvasMap canvasMap = new CanvasMap(bound, 1280, 960);
|
||||||
|
gc.drawImage(canvasMap.getMapImage(), 0, 0, 1280, 960);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
<?import java.lang.*?>
|
||||||
|
<?import javafx.scene.canvas.*?>
|
||||||
|
|
||||||
|
|
||||||
|
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="960.0" prefWidth="1280.0" style="-fx-background-color: #ddd;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng302.models.map.TestMapController">
|
||||||
|
<children>
|
||||||
|
<Canvas fx:id="mapCanvas" height="960.0" width="1280.0" />
|
||||||
|
</children>
|
||||||
|
</Pane>
|
||||||
Reference in New Issue
Block a user