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

Eclipse Platform Discussion :

Google Maps dans un Browser View


Sujet :

Eclipse Platform

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 26
    Points
    26
    Par défaut Google Maps dans un Browser View
    Bonjour,

    j'essaye d'intégrer une page contenant google maps dans une view (browser)

    voici la page:

    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
     
    <!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN"
     
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
     
      <head>
     
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
     
        <title>Google Maps JavaScript API Example</title>
     
        <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAjZ8pBvAzVnfGqQHM4FBBpRQ_-f1RzMzZY0pMcJ-g0KVm6I4ZERQ11sD7MTBj8Xsf3kP5W7IGaI3kXQ
    &sensor=false"
                type="text/javascript"></script>
        <script type="text/javascript">
     
        var map;
     
        function initialize() {
          if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map_canvas"));
            map.setCenter(new GLatLng(37.4419, -122.1419), 13);
     
         // Enable the Earth map type
            map.addMapType(G_SATELLITE_3D_MAP);
     
            var mapControl = new GMapTypeControl();
            map.addControl(mapControl);
     
          }
     
        }
        </script>
     
      </head>
     
      <body onload="initialize()" >
     
        <div id="map_canvas" style="width: 100%; height: 100%"></div>
     
      </body>
     
    </html>
    Ma viewPart ressemble à ca:

    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
     
    package aircraftTrackingPlugin.views;
     
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
     
    import org.eclipse.jface.util.LocalSelectionTransfer;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.browser.Browser;
    import org.eclipse.swt.dnd.DND;
    import org.eclipse.swt.dnd.DropTarget;
    import org.eclipse.swt.dnd.Transfer;
    import org.eclipse.swt.events.ControlEvent;
    import org.eclipse.swt.events.ControlListener;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.ui.part.ViewPart;
     
    import aircraftTrackingPlugin.Conf;
    import aircraftTrackingPlugin.model.CurrentWatchingAircraftCollection;
     
    public class EarthView extends ViewPart implements PropertyChangeListener{
     
    	public static final String ID = "aircrafttrackingapp.views.EarthView";
    	private Browser browser;
     
     
    	@Override
    	public void createPartControl(Composite arg0) {
    		browser = new Browser(arg0, SWT.SCROLL_LOCK);
            browser.addControlListener(new ControlListener() {
                public void controlResized(ControlEvent e) {
                    // Use Javascript to set the browser width and height
                    browser
                            .execute("document.getElementById('map_canvas').style.width= "
                                    + (browser.getSize().x - 41) + ";");
                    browser
                            .execute("document.getElementById('map_canvas').style.height= "
                                    + (browser.getSize().y - 41) + ";");
                }
     
                public void controlMoved(ControlEvent e) {
                }
            });
    		browser.setUrl(Conf.CONFIGURATION_SERVER_URL+"public/earth.html");
     
    		//the drop listener
    		int operations = DND.DROP_COPY| DND.DROP_MOVE;
    		DropTarget dropTarget = new DropTarget(browser, operations);
    		dropTarget.setTransfer(new Transfer[] {LocalSelectionTransfer.getTransfer()});
    		dropTarget.addDropListener(new AircraftDropListener());
     
    		CurrentWatchingAircraftCollection.getInstance().addPropertyChangeListener(this);
    	}
     
    	@Override
    	public void dispose() {
    		super.dispose();
    		CurrentWatchingAircraftCollection.getInstance().removePropertyChangeListener(this);
    	}
     
    	@Override
    	public void setFocus() {
    		// TODO Auto-generated method stub
     
    	}
    }
    j'ai 2 comportements bizarres:

    Lorsque ma vue se charge (sur une map type plan), la view est vide. Il faut que je la resize pour que la map apparaisse.

    Lorsque je passe en mode (Earth) => je clique sur
    Plan-Satellite-Mixte-Earth
    le plugin ne se lance pas. je me retrouve avec l'image de la terre avec
    Le plug-in Google Earth est maintenant installé/ Redemarrez votre navigateur pour le voir en action

    Quelqu'un a une idée? Pour info, je colle l'adresse de la page dans firefox, IE ou chrome, et tout fonctionne a merveille.

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Déjà, une petite astuce, pour avoir un Browser avec un comportement proche de celui de Firefox, tu devrais lui associer le style SWT.MOZILLA.

    Après, je te conseille d'insérer un Composite avec un Layout entre le parent de ta vue et ton Browser. D'une part, parce qu'une fois que la vue sera fermée, il te faudra faire un dispose() sur ce Composite (explicitement) et d'une autre part pour maîtriser le conteneur de ton Browser.
    Ensuite, tu donnes une taille à ton Browser seulement lorsque celui-ci est retaillé. C'est donc normal que rien ne soit affiché tant qu'il n'a pas encore été retaillé.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Merci pour la réponse, mais je me retrouve avec cette erreur au lancement de l'application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Unhandled event loop exception
    No more handles [Could not detect registered XULRunner to use]
    Lorsque je retire le "SWT.MOZILLA" je n'ai rien dans la view. mon code:
    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
    @Override
    public void createPartControl(Composite arg0) {
    	container = new Composite(arg0, SWT.NONE);
    	browser = new Browser(container, SWT.SCROLL_LOCK/* | SWT.MOZILLA*/);
            browser.addControlListener(new ControlListener() {
                public void controlResized(ControlEvent e) {
                    // Use Javascript to set the browser width and height
                    browser
                            .execute("document.getElementById('map_canvas').style.width= "
                                    + (browser.getSize().x - 41) + ";");
                    browser
                            .execute("document.getElementById('map_canvas').style.height= "
                                    + (browser.getSize().y - 41) + ";");
                }
     
                public void controlMoved(ControlEvent e) {
                }
            });
    	browser.setUrl(Conf.CONFIGURATION_SERVER_URL+"public/earth.html");
     
    	//the drop listener
    	int operations = DND.DROP_COPY| DND.DROP_MOVE;
    	DropTarget dropTarget = new DropTarget(browser, operations);
    	dropTarget.setTransfer(new Transfer[] {LocalSelectionTransfer.getTransfer()});
    	dropTarget.addDropListener(new AircraftDropListener());
     
    	CurrentWatchingAircraftCollection.getInstance().addPropertyChangeListener(this);
    }

  4. #4
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Essaye plutôt ça:
    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
    @Override
    public void createPartControl(Composite arg0) {
    	container = new Composite(arg0, SWT.NONE);
    	container.setLayout(new GridLayout());
    	browser = new Browser(container, SWT.SCROLL_LOCK/* | SWT.MOZILLA*/);
            browser.addControlListener(new ControlListener() {
                public void controlResized(ControlEvent e) {
                    // Use Javascript to set the browser width and height
                    browser
                            .execute("document.getElementById('map_canvas').style.width= "
                                    + (browser.getSize().x - 41) + ";");
                    browser
                            .execute("document.getElementById('map_canvas').style.height= "
                                    + (browser.getSize().y - 41) + ";");
                }
     
                public void controlMoved(ControlEvent e) {
                }
            });
    	browser.setUrl(Conf.CONFIGURATION_SERVER_URL+"public/earth.html");
     
    	//the drop listener
    	int operations = DND.DROP_COPY| DND.DROP_MOVE;
    	DropTarget dropTarget = new DropTarget(browser, operations);
    	dropTarget.setTransfer(new Transfer[] {LocalSelectionTransfer.getTransfer()});
    	dropTarget.addDropListener(new AircraftDropListener());
     
    	CurrentWatchingAircraftCollection.getInstance().addPropertyChangeListener(this);
    }
    Comme je te l'ai dis, il te faut un Composite avec un Layout (très important le layout...).

    Sinon, pour le style SWT.MOZILLA, il te faut à priori avoir installé XULRunner.

    Voilà, à+
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Merci, j'avance. C'est OK, en installant le XUL runner.

    Par contre, quand je lance l'application, la fonction javascript initialize (qui est appelée au onLoad du <body>) n'est pas exécutée. Alors que dans le browser, elle l'est.

  6. #6
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Tu as essayé de mettre un alert() dans ta fonction initialize()?
    Sinon, tu peut rajouter une ProgressListener. Dans la méthode completed(), rien ne t'empêche d'appeler directement ta méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    browser.addProgressListener(new ProgressListener() {
    	@Override
    	public void completed(ProgressEvent event) {
    		System.out.println("Page loaded");
    		System.out.println(browser.execute("alert(\"1\");"));
    	}
     
    	@Override
    	public void changed(ProgressEvent event) {
    	}
    });
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Il y a effectivement un autre problème. la view appelle bien "alert", que ce soit avec ou sans ProgressListener.

    J'ai posté la question dans les forums google maps API et google Earth.

  8. #8
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    À priori, pour contourner ça, il te faut placer le code de ta page HTML dans un fichier (temporaire ou non, c'est toi qui voit). Et ensuite appeler non pas la méthode setText() de ton Browser, mais sa méthode setUrl().
    En gros, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File myHtmlFile = new File("location/of/my/file.html");
    ...
    browser.setUrl(myHtmlFile.toUri().toString());
    Je te conseille de regarder l'exemple complet, ça peut t'aider.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Merci, ca marche tres bien avec SWT.MOZILLA et xul runner.

    Par contre, pour installer xul runner, il faut les droits admin.

    Je fais une application RCP. Est il possible d'inclure le xul runner dans mon produit et éviter de devoir installer xul (xul-runner --register-global)?


    Citation Envoyé par Gueritarish Voir le message
    À priori, pour contourner ça, il te faut placer le code de ta page HTML dans un fichier (temporaire ou non, c'est toi qui voit). Et ensuite appeler non pas la méthode setText() de ton Browser, mais sa méthode setUrl().
    En gros, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File myHtmlFile = new File("location/of/my/file.html");
    ...
    browser.setUrl(myHtmlFile.toUri().toString());
    Je te conseille de regarder l'exemple complet, ça peut t'aider.

    Voilà, à+
    Gueritarish

Discussions similaires

  1. intégration Google map dans access
    Par pkrvz dans le forum Contribuez
    Réponses: 12
    Dernier message: 23/12/2009, 22h44
  2. Récupérer carte de google maps dans Feuil2
    Par damlarumeur dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/02/2009, 14h50
  3. Décalage div (Google Maps) dans un div
    Par paradise dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 14/01/2009, 14h54
  4. Comment obtenir Google Maps dans une Form ?
    Par thibouille dans le forum Web & réseau
    Réponses: 16
    Dernier message: 13/01/2009, 14h30
  5. Integrer google maps dans une application
    Par La Truffe dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 01/11/2006, 16h45

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