Usare Google Maps in JavaFX

Mattepuffo's logo
Usare Google Maps in JavaFX

Usare Google Maps in JavaFX

Sto creando un piccolo programmino per la visualizzazione delle immagini con JavaFX.

Quello che volevo aggiungere era la possibilità di aprire una finestra con Google Maps centrata sulle coordinate della foto.

Senza entrare nel dettaglio di come reperire le coordinate dalle immagini (sarà argomento di un eventuale altro articolo), vediamo come integrare Google Maps in JavaFX.

In effetti è stato abbastanza semplice usando GMapsFX!

Se usate Maven:

        <!-- https://mvnrepository.com/artifact/com.lynden/GMapsFX -->
        <dependency>
            <groupId>com.lynden</groupId>
            <artifactId>GMapsFX</artifactId>
            <version>2.12.0</version>
        </dependency>

Questo è il layout FXML che sto usando io:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.AnchorPane?>
<?import com.lynden.gmapsfx.GoogleMapView?>
<?import javafx.scene.layout.VBox?>

<AnchorPane id="mapPane" fx:controller="com.mp.photogallery.MapsController"
            prefHeight="616.0"
            prefWidth="737.0"
            xmlns="http://javafx.com/javafx/8"
            xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <GoogleMapView fx:id="mapView" prefHeight="750.0"
			prefWidth="761.0" AnchorPane.bottomAnchor="-185.0"
            AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="-441.0" 
			AnchorPane.topAnchor="0.0"/>
        <VBox alignment="TOP_CENTER" fillWidth="false" 
			layoutX="26.0" layoutY="29.0" prefHeight="478.0"
            prefWidth="221.0" spacing="10.0" styleClass="panel-background"
            AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="26.0" 
			AnchorPane.topAnchor="88.0">
        </VBox>
    </children>
</AnchorPane>

Questo invece il controller:

import com.lynden.gmapsfx.GoogleMapView;
import com.lynden.gmapsfx.MapComponentInitializedListener;
import com.lynden.gmapsfx.javascript.object.*;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;

import java.net.URL;
import java.util.ResourceBundle;

public class MapsController implements Initializable, MapComponentInitializedListener {

    private GoogleMap map;
    private double lat;
    private double lon;

    @FXML
    private GoogleMapView mapView;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        mapView.addMapInializedListener(this);
    }

    @Override
    public void mapInitialized() {
        LatLong latLong = new LatLong(41.9102415, 12.3959136);
        MapOptions mapOptions = new MapOptions();
        mapOptions.center(latLong)
                .overviewMapControl(false)
                .panControl(false)
                .rotateControl(false)
                .scaleControl(false)
                .streetViewControl(false)
                .zoomControl(false)
                .zoom(12);

        map = mapView.createMap(mapOptions);
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latLong);
        Marker marker = new Marker(markerOptions);
        map.addMarker(marker);

        InfoWindowOptions infoWindowOptions = new InfoWindowOptions();
        infoWindowOptions.content("<h2>ROMA</h2>Location di Roma<br>");
        InfoWindow infoWindow = new InfoWindow(infoWindowOptions);
        infoWindow.open(map, marker);
    }
}

Se avete già usato Google Maps in altri linguaggi, vi accorgerete che le opzioni sono le stesse; cambia solo la sintassi del linguaggio.

Abbiamo anche impostato del codice HTML nel marker, giusto per vedere una cosa in più!

Non so, invece, quanto si può personalizzare nel layout; non ho ancora fatto test.

Comunque è tutto abbastanza semplice.


Condividi

3 Commenti

  • lino

    penso che il problema sia il cambiamento nei permessi di google, o meglio le policy di sicurezza. l'atricolo è del 2018, google ne ha fatti di cambiamenti

    07/05/2021
  • Franco

    Scusi a lei come fa a funzionare il mapInizialited(), perchè a me quando faccio il run del programma mi apre la finestra bianca ma non crea la mappa? Faccio un progetto maven con javaFX

    06/05/2021
  • andrea

    sto cercando di fare anche io la stessa cosa, ho scaricato GMapsFx, ho visto diversi esempi su diversi forum, ho preso il tuo codice, ma all'atto dell'esecuzione del programma mi appare una semplice finestra vuota, senza niente al suo interno. uso eclipse, e non so usare Maven, anche se mi sembra che non sia fondamentale. su alcuni blog ho letto della Api key per google maps, forse devo scaricare quella? se riesci a dirmi qualcosa per favore.

    20/12/2018

Commentami!