IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Affichage d'informations au survol d'une carte


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 64
    Par défaut Affichage d'informations au survol d'une carte
    Bonjour à tous,

    Désolé d'avance si je ne postes pas dans la partie adéquate mais je savais pas vraiment où poster !

    Voila je vous explique mon problème :

    Je suis en train de réaliser un système d'informations géographiques, j'arrive à afficher un lieu avec sa carte dans mon application, j'arrive également à ajouter sur la carte des points d'intérêt avec la méthode paintpoint. J'aimerais pouvoir afficher le nom du point d'intérêt lorsque je le survol sur la carte, or je n'ai pas trouvé de tutoriel pour effectuer cette fonctionnalité.

    Auriez vous des pistes de solutions ?

    D'avance merci.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Avec quel API tu gères la carte parce que sans ca ou un morceau de code ca va être compliqué.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 64
    Par défaut
    L'API est awt, voici le code pour afficher la carte et peindre un point d'intérêt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    package affichage;
     
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
     
    import traitement.POI;
     
    public class Carte extends JPanel {
     
    	private static final long serialVersionUID = 1L;
     
     
    	/*** DESSINER UN OBJET ***/
     
     
        POI poi1 = new POI("blabla", "paris je t'aime", "description",100,100);
     
     
    	public void paintComponent(Graphics g){
            try {
                Image img = ImageIO.read(new File("images/londres.jpg"));
                g.drawImage(img, 0, 0, this);
                paintPoint(g, 30,30);
     
     
        } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
     
        }   
     
     
     
     
     
        // dessiner une POI
        public void paintPoint(Graphics x, int positionX, int positionY){
     
         try {
                Image img = ImageIO.read(new File("images/POI.gif"));
                x.drawImage(img, positionX, positionY, this);
     
        } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
     
     
        }    
     
    	/*
     
        // dessiner une POI
        public void paintPoint(Graphics x, POI p){
        	
        	
        	int positionX = p.getPositionX();
        	int positionY = p.getPositionY();
         try {
                Image img = ImageIO.read(new File("images/POI.gif"));
                x.drawImage(img, positionX, positionY, this);
                            
        } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
     
            
        }    */
     
    }

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Si tu veux juste afficher son nom, il suffit d'utiliser dans ta fonction d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x.DrawString("String", positionx, positiony);
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 64
    Par défaut
    C'est un premier pas, au dessus du POI dessiné sur la carte "String" s'affiche, merci beaucoup.

    Cependant ce n'est que le début ! En effet, je dois récupérer le String en base (ça pas de problèmes) mais je voudrais que le String s'affiche uniquement lorsque la souris survole le POI sur la carte, aurais tu une idée ? (Ouais je sais, jamais content ^^)

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Tu pourrais :

    - Au moment du mousemoved,regarder la position de la souris et des different POI que tu as et tu en selectionne un (en la gardant dans une variable genre POI_Selection) qui est pres de la souris ou je ne sais quoi.
    - Ensuite, Quand tu affiche les POI alors tu regarde si le POI que tu dessine est == au POI_Selection et alors tu le dessien d'une autre couleur (j'invente la)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 64
    Par défaut
    En fait lorsqu'on demande l'affichage d'un lieu, les POI associés s'affichent directement sur la carte, ça c'est ok, et ce que je veux ce n'est pas de montrer un POI d'une autre couleur mais en gros que lorsque la souris passe sur un POI affiché sur la carte, le nom qui est associé à ce POI s'affiche au dessus de lui (je sais pas si tu vois ce que je veux dire, demande moi si tu veux plus d'explications)

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Non non moi j'ai tres bien compris ^^

    Par contre toi tu ne sembles pas avoir compris ce que je disait c'etait la solution pour ton truc.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 64
    Par défaut
    Hmmm effectivement je n'ai pas bien du comprendre, pourrais-je avoir de plus amples explications stp ? Merci ^^'

  10. #10
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    La solution de wax78 est jouable uniquement si tu n'as pas beaucoup de points à afficher et aussi en fonction de la machine qui va exécuter le programme.

    Par contre, tu ne devrais pas charger l'image dans le paintComponent. Ce n'est pas son rôle. Tu devrais stocker un BufferedImage en donnée membre de ta classe.
    Une seconde BufferedImage serait celle à afficher.
    Exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ma classe
    {
      BufferedImage mon_image;
      BufferedImage image_affiche;
     
      void modifier_image_de_fond() { mon_image = ImageIO.read( ... ); }
      void compute_image( des parametres... )
      {
        image_affiche.getGraphics().drawImage( mon_image );
        //ajouter des trucs et des bidules sur image_affiche
      }
     
      void paintComponent( Graphics g ) { g.drawImage( image_affiche ); }
    }
    La méthode compute_image permet de reconstruire l'image à afficher. Il suffirait par exemple de lui donner la chaine et les coordonnées à afficher.

    Pour la recherche des coordonnées de souris, il y a la méthode classique et très efficace du masque. De manière basique, il faut construire une image off_image de même taille que celle affichée. off_image est une image en noir et blanc : le noir signifie rien à afficher, le blanc signifie une chaine à afficher.
    off_image peut être construite dynamiquement ou statiquement une fois pour toute si ton image affichée est statique.
    Lors d'un mouvement de souris, on vérifie simplement la couleur du pixel de off_image aux coordonnées de la souris. Si c'est blanc, alors on cherche le texte dans une liste associant des chaines à des coordonnées, si c'est noir on ne fait rien.

    De cette solution, on peut tirer énormément d'amélioration :
    • très souvent inutile d'avoir une off_image de taille égale à l'image affichée. Il suffit de diviser toutes les dimensions par 2 ou 4 selon la taille des zones à reconnaitre par la souris. On réduit ainsi la taille mémoire utilisée,
    • au lieu de faire blanc/noir sur off_image, autant utiliser les 3 octets de chaque pixel (RVB) et coder chaque zone différente d'une couleur différente. Une liste associe un entier à une chaine,
    • s'il y a plus de 16 millions de chaines, il est possible de coder sur 4 octets (RVB + alpha) pour arriver à 4 milliards ;-)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. blocs d'infos au survol d'une carte
    Par Droopy19 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/11/2009, 13h39
  2. affichage infos pays en survol d'une carte d'Europe
    Par picoule dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/09/2008, 13h33
  3. Afficher des informations dans une bulle au survol d'une partie d'une carte
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/06/2008, 09h43
  4. Ouverture d'une popup avec affichage d'information
    Par leloup84 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/02/2006, 20h53
  5. affichage d'un calques (?) au survol d'une image.
    Par Space Cowboy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/09/2005, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo