diff --git a/Ohj2HT/src/Luokat/kartanPiirtaja.java b/Ohj2HT/src/Luokat/kartanPiirtaja.java new file mode 100644 index 0000000000000000000000000000000000000000..dcb3abc6ae12f021cfd4f960ac204e24f9cf4ac0 --- /dev/null +++ b/Ohj2HT/src/Luokat/kartanPiirtaja.java @@ -0,0 +1,106 @@ +package Luokat; + +import fi.jyu.mit.fxgui.Dialogs; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; + +public class kartanPiirtaja { + + public static void haeKoordinaatti(String answer) { + try{ + if (answer.equals("ei")) { + return; + } + System.out.println(answer); + String paikka = answer.toLowerCase().replace(' ', '+').replace('ä','a').replace('ö','o'); + System.out.println(paikka); + //Valmistellaan paikka poistamalla skandit ja laittamalla se pieniin kirjaimiin + String urlJono = "https://nominatim.openstreetmap.org/search?q=" +paikka +"+Suomi" +"&format=json"; + //Lisätään vielä suomi jokaiseen api kutsuun, jotta vältytään tilanteelta, missä saadaan kaksi eri maasta olevaa paikkaa + URI uri = new URI(urlJono); + URL url = uri.toURL(); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder content = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + in.close(); + //Luetaan palautettu viesti + System.out.println(content); + String[] split = content.toString().split(","); + String[] coords = new String[2]; + for(String s : split) { + if(s.contains("lat")){ + System.out.println(s); + coords[0] = s; + } + if(s.contains("lon")){ + System.out.println(s); + coords[1] = s; + + } + //haetaan koordinaatit viestistä "," merkki jakoi jonon parhaiten + } + String[] lat = coords[0].split(":"); + String[] lon = coords[1].split(":"); + //Koordinaatissa oli vielä lon:62 joten täytyy saada vain numero + double lng = Double.parseDouble(lon[1].replace("\"","")); + double la = Double.parseDouble(lat[1].replace("\"","")); + double tunlat = 61; + double tunlon = 25.7; + double liikex = 32.15; + double liikey = 71.45; + //Yllä tunnetut koordinaatit sekä yhden lat/lon yksikön liike kartalla + int x = (int) (300 + (lng - tunlon) * liikex); + int y = (int) (670 - (la - tunlat) * liikey); + //300 ja 670 olivat tunnetun koordinaattien pikseli kartalla + if(piirraKuvaan(x,y)){ + Dialogs.showMessageDialog("Kuva päivitettiin käynnistä sovellus uudestaan, jotta näet päivitykset"); + } + + } + catch(Exception e){ + e.printStackTrace(); + } + + } + + + + private static boolean piirraKuvaan(int x, int y) { + try{ + File file = new File(System.getProperty("user.dir") +"/src/media/UusiKarttakopio.png"); + BufferedImage kartta = ImageIO.read(file); + Graphics2D sivellin = kartta.createGraphics(); + sivellin.setColor(Color.BLACK); + sivellin.fillOval(x - 10, y - 10, 20, 20); + sivellin.dispose(); + //Piirretään kuvaan koordinaatteihin piste, -10, jotta säde saadaan oikein + File uusi = new File(System.getProperty("user.dir")+"/src/media/UusiKarttakopio.png"); + if(uusi.exists()){ + System.out.println("tiedosto luotu"); + ImageIO.write(kartta, "png", uusi); + return true; + } + //tallennetaan uusi versio kuvasta vanhan päälle ja asetetaan kuva takaisin (toisaalta javafx ei taida lukea kuin kerran kuvan joten ei ehkä tarvitsisi tehdä) + return false; + + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/Ohj2HT/src/fxHeatMapTesti/HeatMapTestiGUIController.java b/Ohj2HT/src/fxHeatMapTesti/HeatMapTestiGUIController.java index 54fec6002c53735f4516b8ef1f4cbbdc0b803597..c1988732555fc2b284833075e788ac682b7d83c5 100644 --- a/Ohj2HT/src/fxHeatMapTesti/HeatMapTestiGUIController.java +++ b/Ohj2HT/src/fxHeatMapTesti/HeatMapTestiGUIController.java @@ -54,6 +54,7 @@ public class HeatMapTestiGUIController implements Initializable { try { Files.copy(kopio.toPath(), vanha.toPath(), StandardCopyOption.REPLACE_EXISTING); Dialogs.showMessageDialog("Kartan nollaus onnistui!"); + } catch (IOException e) { Dialogs.showMessageDialog("Virhe nollauksessa: " + e.getMessage()); } diff --git a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java index dfa68e27180cede6139d3e564dfa55a22616a532..8851b2e3cfbe4c2bdc9ec94f830b745e7ebf3562 100644 --- a/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java +++ b/Ohj2HT/src/fxKalenteri/KalenteriGUIController.java @@ -13,14 +13,19 @@ import javafx.scene.control.Label; import javafx.scene.control.TextField; import java.awt.Desktop; +import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.util.List; import java.util.ResourceBundle; import Luokat.*; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; /** * @author konst @@ -29,7 +34,7 @@ import Luokat.*; public class KalenteriGUIController implements Initializable { private Kalenteri kalenteri; - + @FXML private ImageView Kartta; @FXML private ListChooser<String> Saaliisi; @FXML private Label reissuLkm; @FXML private ListChooser<Reissu> reissutLista; @@ -101,18 +106,32 @@ public class KalenteriGUIController implements Initializable { * Nollaa kartan */ private void nollaaKartta() { - Dialogs.showQuestionDialog("Nollataanko", "Nollataanko kartta?", "Kyllä", "Ei"); + boolean vastaus = Dialogs.showQuestionDialog("Nollataanko", "Nollataanko kartta?", "Kyllä", "Ei"); + if (vastaus) { + File kopio = new File(System.getProperty("user.dir")+"/src/media/Kartta_backup.png"); + File vanha = new File(System.getProperty("user.dir")+"/src/media/UusiKarttakopio.png"); + try { + Files.copy(kopio.toPath(), vanha.toPath(), StandardCopyOption.REPLACE_EXISTING); + Platform.runLater(() -> Kartta.setImage(new Image("/media/UusiKarttakopio.png"))); + Dialogs.showMessageDialog("Kartan nollaus onnistui!"); + } catch (IOException e) { + Dialogs.showMessageDialog("Virhe nollauksessa: " + e.getMessage()); + } + } } /** * avaa uuden ikkunan "LisaaReissu", lisää reissun käyttöliittymään ja kasvattaa laskureita */ private void LisaaReissu(){ + Kartta.setImage(null); ModalController.showModal(KalenteriMain.class.getResource("/fxLisaaReissu/LisaaReissuGUIView.fxml"), "Lisää reissu", null,kalenteri); kalenteri.paivitaTulkit(); + Platform.runLater(() -> Kartta.setImage(new Image("/media/UusiKarttakopio.png"))); kirjoitaReissut(); tekstienPaivitys(); + } diff --git a/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml b/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml index cdd9107d523229eeddb3908b133f8304f134beb1..5365b4345c1809cb1e152c4530f81b80633876fc 100644 --- a/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml +++ b/Ohj2HT/src/fxKalenteri/KalenteriGUIView.fxml @@ -82,9 +82,9 @@ </BorderPane> </left> <center> - <ImageView fitHeight="409.0" fitWidth="330.0" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="TOP_LEFT"> + <ImageView fx:id="Kartta" fitHeight="409.0" fitWidth="330.0" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="TOP_LEFT"> <image> - <Image url="@../media/UusiKartta.png" /> + <Image url="@../media/UusiKarttakopio.png" /> </image> </ImageView> </center> diff --git a/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java b/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java index d80953c5d01b2aeafdb49630a4aeb78b1274ab2b..c3f73bb547a7f639aa2026d1af723450ecd1b5d9 100644 --- a/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java +++ b/Ohj2HT/src/fxLisaaReissu/LisaaReissuGUIController.java @@ -102,7 +102,8 @@ public class LisaaReissuGUIController implements Initializable, ModalControllerI String pvm = Pvm.getText(); Reissu a = new Reissu(Reissu.sToDate(pvm), sijainti.getText(),keli.getText(),saaliit, false); kale.lisaaReissu(a, saaliit); - ModalController.closeStage(pane); + kartanPiirtaja.haeKoordinaatti(sijainti.getText()); + ModalController.closeStage(pane); } diff --git a/Ohj2HT/src/media/UusiKarttakopio.png b/Ohj2HT/src/media/UusiKarttakopio.png index 86a004114e0f22a2c72b11c182b87a2e07067475..33fd61576c2a472dbf418bf5670a6dfafa4a4ffa 100644 Binary files a/Ohj2HT/src/media/UusiKarttakopio.png and b/Ohj2HT/src/media/UusiKarttakopio.png differ