Publié le 11/06/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

Afficher une carte avec les API Google Map

Lancé en 2004, Google Maps est le service de cartographie crée par Google à partir d'image satellite. Voyons comment afficher une carte d'un point du monde dans un JPanel avec le langage JAVA.

Découvrir les API Google Map

googleMapAPILes API autour de GoogleMap sont faciles à utiliser pour représenter un lieu ou une ville. Prévu pour le WEB 2.0 (javascript/AJAX), voici un exemple de carte statique avec le composant JEditorPane.

Obtenir une clé GoogleMap
Vous devez disposer d'un compte Google puis faire la demande d'une GoogleMap Api Key.


Documentation des API GoogleMap
Pour comprendre un peu mieux les fonctions de cette API, je vous conseille de lire:
Static Maps API V2 Developer Guide
et le guide de développement avec JAVA

Afficher une carte avec JAVA

En fait pour afficher une carte simple d'une ville de n'importe quel endroit du monde, c'est très simple:
- renseigner les paramètres de l'URL à envoyer à http://maps.google.com/maps/api/staticmap,
- définir un code HTML simple affichant une image.

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
 
/**
 * Afficher une carte GoogleMap dans un JEditorPane
 * http://www.fobec.com/java/922/afficher-une-carte-avec-api-google-map.html
 * @author fobec 2010
 */
public class JGoogleMapEditorPan extends JEditorPane {
 
    private int zoomFactor = 7;
    private String ApiKey = "";
    private String roadmap = "roadmap";
    public final String viewTerrain = "terrain";
    public final String viewSatellite = "satellite";
    public final String viewHybrid = "hybrid";
    public final String viewRoadmap = "roadmap";
 
    /**
     * Constructeur: initialisation du EditorKit
     */
    public JGoogleMapEditorPan() {
        HTMLEditorKit kit = new HTMLEditorKit();
        HTMLDocument htmlDoc = (HTMLDocument) kit.createDefaultDocument();
        this.setEditable(false);
        this.setContentType("text/html");
        this.setEditorKit(kit);
        this.setDocument(htmlDoc);
    }
 
    /**
     * Fixer le zoom
     * @param zoom valeur de 0 à 21
     */
    public void setZoom(int zoom) {
        this.zoomFactor = zoom;
    }
 
    /**
     * Fixer la clé de developpeur
     * @param key APIKey fourni par Google
     */
    public void setApiKey(String key) {
        this.ApiKey = key;
    }
 
    /**
     * Fixer le type de vue
     * @param roadMap
     */
    public void setRoadmap(String roadMap) {
        this.roadmap = roadMap;
    }
 
    /**
     * Afficher la carte d'après des coordonnées GPS
     * @param latitude
     * @param longitude
     * @param width
     * @param height
     * @throws Exception erreur si la APIKey est non renseignée
     */
    public void showCoordinate(String latitude, String longitude, int width, int height) throws Exception {
        this.setMap(latitude, longitude, width, height);
    }
 
    /**
     * Afficher la carte d'après une ville et son pays
     * @param city
     * @param country
     * @param width
     * @param height
     * @throws Exception erreur si la APIKey est non renseignée
     */
    public void showLocation(String city, String country, int width, int height) throws Exception {
        this.setMap(city, country, width, height);
    }
 
    /**
     * Assembler l'url et Générer le code HTML
     * @param x
     * @param y
     * @param width
     * @param height
     * @throws Exception
     */
    private void setMap(String x, String y, Integer width, Integer height) throws Exception {
        if (this.ApiKey.isEmpty()) {
            throw new Exception("Developper API Key not set !!!!");
        }
 
        String url = "http://maps.google.com/maps/api/staticmap?";
        url += "center=" + x + "," + y;
        url += "&zoom=" + this.zoomFactor;
        url += "&size=" + width.toString() + "x" + height.toString();
        url += "&maptype=" + this.roadmap;
        url += "&markers=color:blue" + x + "," + y;
        url += "&sensor=false";
        url += "&key=" + this.ApiKey;
 
        String html = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>";
        html += "<html><head></head><body>";
        html += "<img src='" + url + "'>";
        html += "</body></html>";
        this.setText(html);
    }
 
    /**
     * Exemple : JGoogleMapEditorPan dans un JFrame
     */
    public static void main(String[] args) {
        JGoogleMapEditorPan googleMap = new JGoogleMapEditorPan();
        try {
            googleMap.setApiKey("maCleGoogleMap");
            //  googleMap.setRoadmap(googleMap.viewHybrid);
 
            /**
            Afficher la ville de Strabourg
             */
            googleMap.showLocation("strasbourg", "france", 390, 400);
            /**
             * Afficher Paris en fonction ses coordonnées GPS
             */
            //  googleMap.showCoordinate("48.8667", "2.3333",390, 400);
        } catch (Exception ex) {
            Logger.getLogger(JGoogleMapEditorPan.class.getName()).log(Level.SEVERE, null, ex);
        }
 
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(googleMap);
        frame.setSize(400, 420);
        frame.setLocation(200, 200);
        frame.setVisible(true);
    }
}

Pensez y ! lorsque l'on souhaite afficher une carte dans une application JAVA, Google Map peut etre une bonne solution puisque c'est gratuit et le composant JEditorPane reprend les propriétés d'une page HTML.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Arthur

Publié par Arthur

le 18/04/2016 à 13:27:49

Salut!
J'ai repris ton code pour un projet mais en testant le programme rien ne s'affiche. Pourquoi ?
Dois-je mettre a jour quelque chose ? Importer ?
La seule modification que j'ai apporte, est au niveau de la cle : j'ai mis la mienne (bien entendu ^^).

avatar Fobec

Publié par Fobec

le 18/04/2016 à 17:38:42

As-tu essaye sans le parametre de la cle ?
(supprimer la ligne url += "&key=" + this.ApiKey;)
A priori, cela fonctionne sans aucune authentification sur l'api ;)

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - class
Mise a jour
11/06/2010
Visualisation
vu 6416 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par mido dans java

si je veut extraire les liens a partir de google searche c'est a dire utiliser la raquette suivante "http://www.google.tn/search?q=" avec java bien sur ..merci d'avance :)

Publié par Fobec dans tuto

Bonjour,

Sur Fobec.com, nous utilisons mod_expires.c pour envoyer automatiquement un code 304 au navigateur internet.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType im...

Publié par iliass dans CMS

aebgksdktu hsmu yailsh iliass jqd ou azmwt wa ikraame

Publié par neuro dans CMS

exemple edifaint et trés interessant

Publié par jpa71 dans java

Efficace.. Bien commente.. Du code bien pense
Bravo