Update End of Term Assignment authored by Zorenböhmer Christina's avatar Zorenböhmer Christina
...@@ -102,15 +102,15 @@ Scanner askServiceInfo = new Scanner(System.in); //warning coming from non-close ...@@ -102,15 +102,15 @@ Scanner askServiceInfo = new Scanner(System.in); //warning coming from non-close
## Step 1: Conceptualisation and Creating a Main, Executable Class ## Conceptualisation and Creating a Main Executable Class
### 1.1: Concept ### Concept
At the outset we began gathering ideas and drawing up concepts for our approach. We have visualised our concept below: At the outset we began gathering ideas and drawing up concepts for our approach. We have visualised our concept below:
![SWD1](uploads/d5adef0d9577217d56ef2b8d1614458c/SWD1.png) ![SWD1](uploads/d5adef0d9577217d56ef2b8d1614458c/SWD1.png)
### 1.2: Create Main, Executable Class ### The Main Executable Class
Although this class could not be completed until we had created all other classes, we will begin with this class since it provides a neat summary of how all components for our project come together. Although this class could not be completed until we had created all other classes, we will begin with this class since it provides a neat summary of how all components for our project come together.
...@@ -120,17 +120,16 @@ As stated above, we aimed to make the whole programme run smoothly without the u ...@@ -120,17 +120,16 @@ As stated above, we aimed to make the whole programme run smoothly without the u
```java ```java
package Test2; package eot_Sahinovic_Woehs_Zorenboehmer;
public class execute_programme { public class GoogleEarthTweetMapper {
public static String directory = "C:\\Users\\Christina\\Documents\\EoT"; //ADAPT NAME public static String directory = "C:\\Users\\Public\\Documents";
// public static String directory = setDirectories.directory; public static String google_earth_filepath = "C:\\Program Files\\Google\\Google Earth Pro\\client\\googleearth.exe";
public static String google_earth_filepath = "C:\\Program Files\\Google\\Google Earth Pro\\client\\googleearth.exe"; // ADAPT to where Google Earth is
public static String wms_url ="http://maps.heigit.org/osm-wms/service?service=WMS&request=GetCapabilities&version=1.1.0"; public static String wms_url ="http://maps.heigit.org/osm-wms/service?service=WMS&request=GetCapabilities&version=1.1.0";
public static String wms_png = directory + "\\boston.png"; public static String wms_png = directory + "\\boston.png";
public static String wms_kml = directory + "\\wms_kml_structure.kml"; public static String wms_kml = directory + "\\boston.kml";
public static String twitter_url = "http://www.berndresch.com/work/twitter.csv"; public static String twitter_url = "http://www.berndresch.com/work/twitter.csv";
public static String twitter_csv = directory + "\\tweets.csv"; public static String twitter_csv = directory + "\\tweets.csv";
...@@ -140,30 +139,32 @@ public class execute_programme { ...@@ -140,30 +139,32 @@ public class execute_programme {
public static void main(String[] args) { public static void main(String[] args) {
// setDirectories.askUser(); // Welcome, inform user of local directory and ask to proceed
userInput1.askUser();
// run method getMap from class bostonWMS_GetMap // getMap and store locally
wms_GetMap.getMap(); wms_GetMap.getMap();
System.out.println("Step 1 completed.\n"); System.out.println(" --- Step 1 completed. ---\n");
// turn wms into kml // Turn WMS into KML
wms_ImageToKML.wmsTOkml(); wms_ImageToKML.wmsTOkml();
System.out.println("Step 2 completed.\n"); System.out.println(" --- Step 2 completed. --- \n");
// dowload tweets CSV from web // Download tweets CSV from web
tweets_download.downloadCSV(); tweets_download.downloadCSV();
System.out.println("Step 3 completed.\n"); System.out.println(" --- Step 3 completed. --- \n");
// access local CSV tweets file and turn into kml // Access local CSV tweets file and turn into KML
tweets_CSVtoKML.CSVtoKML(); tweets_CSVtoKML.CSVtoKML();
System.out.println("Step 4 completed.\n"); System.out.println(" --- Step 4 completed. --- \n");
// ask if user wants to continue // Ask to proceed with launch
userInput2.userInput2(); userInput2.askUser2();
System.out.println("Continued.\n"); System.out.println("Continued.\n");
// Launch
googleEarth_launch.launchGoogleEarth(); googleEarth_launch.launchGoogleEarth();
System.out.println("Step 5 completed.\n"); System.out.println(" --- Step 5 completed. --- \n");
} }
} }
...@@ -171,6 +172,66 @@ public class execute_programme { ...@@ -171,6 +172,66 @@ public class execute_programme {
</details> </details>
## Step 1: Inform User, Ask for Permission to Store Files Locally
In this first step we ask the user to give us the "thumbs up" for downloading the required files onto their PC. We specify the location, which is set to "C:/Users/Public/Documents", which is a default file path that can apply to any PC.
<details><summary> See the Code for the "userInput1.java class here</summary>
```java
package eot_Sahinovic_Woehs_Zorenboehmer;
import java.util.Scanner;
public class userInput1 {
String directory = GoogleEarthTweetMapper.directory;
static void askUser() {
Scanner askUser = new Scanner(System.in); // warning coming from non-closed scanner. Note: if we close it, subsequent scanners fail to work.
String answer;
System.out.println("Hello! Welcome to this Google Earth Tweet and WMS Mapper!\n\n"
+ "This programme will:\n"
+ "1: download an image of Boston from a WMS\n"
+ "2: convert it into a KML structure\n"
+ "3: download a tweets.csv file from the web\n"
+ "4: convert it into a KML structure\n"
+ "5: launch both kml files in Google Earth\n\n"
+ "The downloaded files will be stored at C:\\Users\\Public\\Documents\n"
+ "If this is fine, please enter Y below and hit enter to continue! If not, we will stop the programme and you can manually change the directory at the very top of this class's code.");
answer = askUser.next();
// askUser.close();
if(answer.contains("Y") || answer.contains("y") || answer.contains("yes") || answer.contains("Yes")) {
System.out.println("Great! Lets get started!\n");
} else {
System.out.println("We've stopped the programme. Please adjust the code and start again!");
System.exit(0);
}
} // askUser()
} // class
```
<details><summary> See the console output </summary>
```java
Hello! Welcome to this Google Earth Tweet and WMS Mapper!
This programme will:
1: download an image of Boston from a WMS
2: convert it into a KML structure
3: download a tweets.csv file from the web
4: convert it into a KML structure
5: launch both kml files in Google Earth
The downloaded files will be stored at C:\Users\Public\Documents
If this is fine, please enter Y below and hit enter to continue! If not, we will stop the programme and you can manually change the directory at the very top of this class's code.
y
Great! Lets get started!
```
</details>
## Step 2: Web Map Service ## Step 2: Web Map Service
...@@ -187,8 +248,7 @@ First, we created a [non-executable class "wms_GetMap"](https://git.sbg.ac.at/s1 ...@@ -187,8 +248,7 @@ First, we created a [non-executable class "wms_GetMap"](https://git.sbg.ac.at/s1
<details><summary> See the Code for the "wms_GetMap.java" class here</summary> <details><summary> See the Code for the "wms_GetMap.java" class here</summary>
```java ```java
package eot_Sahinovic_Woehs_Zorenboehmer;
package Test2;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
...@@ -209,22 +269,19 @@ public class wms_GetMap { ...@@ -209,22 +269,19 @@ public class wms_GetMap {
static void getMap() { static void getMap() {
String wms_url = execute_programme.wms_url; String wms_url = GoogleEarthTweetMapper.wms_url;
String directory = execute_programme.directory; String wms_png = GoogleEarthTweetMapper.wms_png;
String wms_png = execute_programme.wms_png;
System.out.println("Accessing WMS and downloading .png of Boston to local directory at: " + wms_png + "... ");
// Constructing a WebMapServer object: // Check if WMS URL is valid
URL url = null; URL url = null;
try { try {
System.out.println("Testing Heigit's wms service URL... "); System.out.print("Testing Heigit's wms service URL... ");
url = new URL(wms_url); url = new URL(wms_url);
System.out.println("URL vaid.");
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
System.out.println("Error related to URL."); System.out.println("Error related to URL.");
} }
// Construct WMS object
WebMapServer wms = null; WebMapServer wms = null;
try { try {
wms = new WebMapServer(url); wms = new WebMapServer(url);
...@@ -235,17 +292,17 @@ public class wms_GetMap { ...@@ -235,17 +292,17 @@ public class wms_GetMap {
} }
System.out.println("No errors in communicating with the server."); System.out.println("No errors in communicating with the server.");
// You can retrieve a WMSCapabilities directly from your WebMapService. This capabilities bean is split into three sections: Service, Request, and Layer. // Access WMSCapabilities directly from the WMS. This capabilities bean is split into three sections: Service, Request, and Layer.
WMSCapabilities capabilities = wms.getCapabilities(); WMSCapabilities capabilities = wms.getCapabilities();
// Get information on the service // Get information on the service
String serverName = capabilities.getService().getName(); String serverName = capabilities.getService().getName();
String serverTitle = capabilities.getService().getTitle(); String serverTitle = capabilities.getService().getTitle();
// Get Map Request: ask the client to create a GetMapRequest object. MAKE SURE TO IMPORT THE CORRECT GETMAPREQUEST: import org.geotools.ows.wms.request.GetMapRequest; // Get Map Request: ask client to create a GetMapRequest object
GetMapRequest request = wms.createGetMapRequest(); GetMapRequest request = wms.createGetMapRequest();
// Configure the request object: // Configure the request object
request.addLayer("osm_auto:all", "default"); request.addLayer("osm_auto:all", "default");
request.setFormat("image/png"); request.setFormat("image/png");
request.setDimensions("1000", "1000"); request.setDimensions("1000", "1000");
...@@ -254,39 +311,37 @@ public class wms_GetMap { ...@@ -254,39 +311,37 @@ public class wms_GetMap {
request.setVersion("1.1.1"); request.setVersion("1.1.1");
request.setBBox("-71.13,42.32,-71.03,42.42"); request.setBBox("-71.13,42.32,-71.03,42.42");
Scanner askServiceInfo = new Scanner(System.in); //warning coming from non-closed scanner // user interaction: offer additional information
Scanner askServiceInfo = new Scanner(System.in); //warning coming from non-closed scanner. Note: if scanner is closed subsequent scanners fail to work.
String answer; String answer;
System.out.println("Would you like additional information on the WMS service while the programme runs? Type Y for yes or anything else for no and hit enter."); System.out.println("\nWould you like additional information on the WMS service while the programme runs? Type Y for yes or anything else for no and hit enter.");
answer = askServiceInfo.next(); answer = askServiceInfo.next();
// askServiceInfo.close(); // askServiceInfo.close();
if(answer.contains("Y") || answer.contains("y") || answer.contains("yes") || answer.contains("Yes")) { if(answer.contains("Y") || answer.contains("y") || answer.contains("yes") || answer.contains("Yes")) {
System.out.println("The WMS capabilities are being retreived from a server called: " + serverName +"\nAnd the server's title is :" + serverTitle +".\n\n" + System.out.println("\tThe WMS capabilities are being retreived from a server called: " + serverName +"\n\tAnd the server's title is: " + serverTitle +"\n\t" +
"The requested image will be stored as a .png with dimensions of 1000 x 1000 pixels." + "The requested image will be stored as a .png with dimensions of 1000 x 1000 pixels.\n\t" +
"The coordinate reference system is set to ESPG:4326"); "The coordinate reference system is set to ESPG:4326.");
System.out.println("\tRequested GetMap URL: " + request.getFinalURL());
} else { } else {
System.out.println("Alright."); System.out.println("Alright.");
} }
System.out.println("\n\nRequested URL: " + request.getFinalURL());
try { try {
GetMapResponse response = (GetMapResponse) wms.issueRequest(request); GetMapResponse response = (GetMapResponse) wms.issueRequest(request);
BufferedImage image = ImageIO.read(response.getInputStream()); BufferedImage image = ImageIO.read(response.getInputStream());
ImageIO.write(image, "png", new File(directory + "\\boston.png")); ImageIO.write(image, "png", new File(wms_png));
} catch (IOException e) { } catch (IOException e) {
System.out.println("There was an error writing the image."); System.out.println("\nThere was an error writing the image.");
} catch (ServiceException e) { } catch (ServiceException e) {
e.printStackTrace(); e.printStackTrace();
} }
System.out.println("Image was successfully saved at: " + directory + "\\boston.png"); System.out.println("\nImage was successfully saved at: " + wms_png);
}
} }
}
``` ```
</details> </details>
...@@ -295,21 +350,19 @@ public class wms_GetMap { ...@@ -295,21 +350,19 @@ public class wms_GetMap {
<details><summary>See Console Output</summary> <details><summary>See Console Output</summary>
``` ```
Accessing WMS and downloading .png of Boston to local directory at: C:\Users\Christina\Documents\EoT\boston.png... Testing Heigit's wms service URL... No errors in communicating with the server.
Testing Heigit's wms service URL...
URL vaid.
No errors in communicating with the server.
Would you like additional information on the WMS service while the programme runs? Type Y for yes or anything else for no and hit enter. Would you like additional information on the WMS service while the programme runs? Type Y for yes or anything else for no and hit enter.
y y
The WMS capabilities are being retreived from a server called: OGC:WMS The WMS capabilities are being retreived from a server called: OGC:WMS
And the server's title is :OSM-WMS Uni Heidelberg. And the server's title is :OSM-WMS Uni Heidelberg.
The requested image will be stored as a .png with dimensions of 1000 x 1000 pixels.
The coordinate reference system is set to ESPG:4326
Requested GetMap URL: http://maps.heigit.org/osm-wms/service?REQUEST=GetMap&FORMAT=image%2Fpng&SRS=EPSG:4326&BBOX=-71.13,42.32,-71.03,42.42&VERSION=1.1.1&STYLES=default&SERVICE=WMS&WIDTH=1000&HEIGHT=1000&TRANSPARENT=TRUE&LAYERS=osm_auto%3Aall
The requested image will be stored as a .png with dimensions of 1000 x 1000 pixels.The coordinate reference system is set to ESPG:4326 Image was successfully saved at: C:\Users\Public\Documents\boston.png
--- Step 1 completed. ---
Requested URL: http://maps.heigit.org/osm-wms/service?REQUEST=GetMap&FORMAT=image%2Fpng&SRS=EPSG:4326&BBOX=-71.13,42.32,-71.03,42.42&VERSION=1.1.1&STYLES=default&SERVICE=WMS&WIDTH=1000&HEIGHT=1000&TRANSPARENT=TRUE&LAYERS=osm_auto%3Aall
Image was successfully saved at: C:\Users\Christina\Documents\EoT\boston.png
Step 1 completed.
``` ```
</details> </details>
... ...
......