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

APIs Google Discussion :

Enregistrer la map au clic droit est-ce possible ? [Google Maps]


Sujet :

APIs Google

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut Enregistrer la map au clic droit est-ce possible ?
    Bonjour,

    A l'aide de php et l'api google maps v3 je génère un itinéraire de points issus de ma bdd. J'aimerai savoir si cette map dynamique peut-elle lors d'un clic droit, être enregistrer sous le format jpeg ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    google.maps.event.addListener(map, 'rightclick', function() {
    		...
    	});
    Avez-vous une idée de comment faire ?

    Merci.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 867
    Points
    44 867
    Par défaut
    Bonjour,
    deux sortes de réponse sont possibles,

    - la brève : surement !!!! mais surement pas en direct il n'existe pas encore la méthode google.maps.copyToJpeg.

    - l'autre : cela va dépendre de biens des choses.

    Les maps sont intégrées dans le fichier HTML sous forme de canvas ou de svg pour les non canvas. Il y à donc toujours dans le cas de canvas possibilité de récupérer les data de ceux ci, je ne connaît pas le SVG (je me rassures ce n'est pas la seule chose qui m'échappe)

    La question qui se pose, c'est pour quoi faire car il existe également une API pour créer des image à partir d'une requête, voir Google Maps Image APIs avec la possibilité d'intégrer un tracé.
    Si c'est pour enregistrer en base de données attention à comparer la taille par rapport à de simples références de centre, largeur, hauteur...

    voilà quelques éléments de réponses.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Merci pour la réponse.

    C'est simplement pour permettre à l'utilisateur d'enregistrer la carte google maps en jpeg ou autre png ...

    Static Api ? C'est une carte généré dynamiquement via ma bdd et je laisse à l'utilisateur la possibilité de zoomer etc donc je ne peux me permettre d'utiliser static api qui me génèrera une image où je ne pourrai zoomer etc. Après j'ai peut-être pas compris votre remarque

    Je vais m'orienter vers la conversion canvas vers image jpg alors.

    Comment être sur que ma map est une canvas ?

    Merci.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 867
    Points
    44 867
    Par défaut
    donc je ne peux me permettre d'utiliser static api qui me génèrera une image
    rien ne t'empêche de faire la requête vers la static image au moment opportun, il te suffit de récupérer les informations pertinentes tel que centre de la carte, zoom et type de map par exemple pour composer ton url.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Je vais creuser ça

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Par contre, c'est possible d'afficher l'itinéraire ? Car j'ai pas seulement des markers j'ai aussi un itinéraire.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    J'ai fais un truc du genre :

    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
    function enregistrer() {
        downloadUrl("../...php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("activite");
            var idProduct = document.getElementById('id_product').value; //hidden
            for (var i = 0; i < markers.length; i++) {
                if (markers[i].getAttribute("id_product") === idProduct) {
                    var pointCenter = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("latSecteur")),
                        parseFloat(markers[i].getAttribute("lngSecteur"))
                        );
                    var pointMarker = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lng"))
                        );
                    var position = markers[i].getAttribute("position");
                }
            }
            document.location.href="http://maps.googleapis.com/maps/api/staticmap?center="+pointCenter+"&zoom=7&size=600x380&maptype=roadmap&markers=color:red%7Clabel:"+position+"%7C"+pointMarker+"&sensor=false";
        });
    }
    Ce qui me renvoit une carte bien centrée et avec un marker bien situé mais j'ai simplement un seul marker alors que j'aimerai les avoir tous. Pour le moment j'ai que le dernier marker de ma boucle ..

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 867
    Points
    44 867
    Par défaut
    Il faut que tu construises ta chaine, concernant les markers, dans la boucle.

    un bout de code qui me traine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      for( var i=0; i < tabMarkers.length; i++){
        sTmp.push( 'markers=' +tabMarkers[i].position.lat().toFixed(6) +',' +tabMarkers[i].position.lng().toFixed(6));
      }
      sTmp = sTmp.join('&'); // à ajouter à la chaine existante
    il y aura surement un aménagement à faire

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Merci NoSmoking pour ton aide et ton bout de code qui m'a bien aidé.

    Voici le code qui affiche bien tout mes markers :

    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
     
    /**
     * Fonction enregistrer la map en image
     */
    function enregistrer() {
        downloadUrl("../....php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("activite");
            var idProduct = document.getElementById('id_product').value;
            marker = new Array();
            for( var i=0; i < markers.length; i++){
                if (markers[i].getAttribute("id_product") === idProduct) {
                    var pointCenter = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("latSecteur")),
                        parseFloat(markers[i].getAttribute("lngSecteur"))
                        );
                    var pointMarker = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lng"))
                        );
                    var position = markers[i].getAttribute("position");
                    var point = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lng")));
                    marker.push( 'markers=' +point+'');
                }
            }
            marker = marker.join('&');
            document.location.href="http://maps.googleapis.com/maps/api/staticmap?center="+pointCenter+"&zoom=7&size=600x380&maptype=roadmap&"+marker+"&sensor=false";
        //document.location.href="http://maps.googleapis.com/maps/api/staticmap?center="+pointCenter+"&zoom=7&size=600x380&maptype=roadmap&markers=color:red%7Clabel:"+position+"%7C"+pointMarker+"&sensor=false";
        });
    }
    Maintenant je vais m'attaquer à l'itinéraire, peut-être avec Path !?
    Et le zoom de la map ! pour le moment j'ai le même zoom .. Sauf que suivant la carte qui est générée, le zoom ne devrait pas être le même car j'ai par exemple un map avec des markers se situant à Lyon essentiellement, et d'autres se situant dans un plus large périmètre (exemple en PJ).
    Images attachées Images attachées   

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    En enlevant le zoom et center de l'url, ça se gère automatiquement finalement.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    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
     
    /**
     * Fonction enregistrer la map en image
     */
    function enregistrer() {
        downloadUrl("../....php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("activite");
            var lastPosition = document.getElementById('lastPosition').value;
            var idProduct = document.getElementById('id_product').value;
            marker = new Array();//marker
            path = new Array();//path : itinéraire polyline
            for( var i=0; i < markers.length; i++){
                if (markers[i].getAttribute("id_product") === idProduct) {
                    var position = markers[i].getAttribute("position");
                    if (position === '0') {
                        position = 'D';//D pour Départ
                    }
                    if (position === lastPosition) {
                        position = 'A';//A pour Arrivée
                    }
                    var pointMarker = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lng")));
                    marker.push('markers=color:red%7Clabel:'+position+'%7C' +pointMarker+'');//ajout d'un marker
                    path.push(pointMarker);//ajout d'un path
                }
            }
            marker = marker.join('&');//pour insérer plusieurs markers
            path = path.join('|');//pour insérer plusieurs path
            document.location.href="http://maps.googleapis.com/maps/api/staticmap?size=600x380&maptype=roadmap&"+marker+"&path=color:0x0000ff|weight:5|"+path+"&sensor=false";
        });
    }
    Pour ceux que ça intéresse ! NoSmoking, avec static map api il est possible de retracer l'itinéraire plutôt que des tracés d'un point à un autre comme dans ma pièce jointe ?
    Images attachées Images attachées  

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 867
    Points
    44 867
    Par défaut
    NoSmoking, avec static map api il est possible de retracer l'itinéraire plutôt que des tracés d'un point à un autre comme dans ma pièce jointe ?
    pas sur de comprendre mais, je dirais que si tu calcules un itinéraire, dans la réponse tu retrouves le PolyLine encodé ce qui est très intéressant pour ne pas atteindre la taille limite de l'URL.

    Voir routes[0].overview_polyline.points.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    En fait, avoir un itinéraire comme dans ma 1ère pièce jointe, plutôt que dans ma 2ème pièce jointe ..

    Je cherche des infos sur overview_polyline mais y'en a pas beaucoup !
    Images attachées Images attachées   

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 867
    Points
    44 867
    Par défaut
    Tiens, c'est vrai overview_polyline n'est pas documenté alors que overview_path l'est.
    Il en parle quand même dans cette page https://developers.google.com/maps/d...on/directions/

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Merci encore une fois pour tes réponses.

    Je vois pas comment l'utiliser, ça prend un array de tous mes chemins et ensuite dans l'url ? &overview_path=monarray ?

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    J'ai tenté ç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
    function enregistrer() {
        downloadUrl("../....php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("activite");
            var lastPosition = document.getElementById('lastPosition').value;
            var idProduct = document.getElementById('id_product').value;
            marker = new Array();//marker
            path = new Array();//path : itinéraire polyline
            for (var i = 0; i < markers.length; i++) {
                if (markers[i].getAttribute("id_product") === idProduct) {
                    var position = markers[i].getAttribute("position");
                    if (position === '0') {
                        position = 'D';//D pour Départ
                    }
                    if (position === lastPosition) {
                        position = 'A';//A pour Arrivée
                    }
                    var pointMarker = new google.maps.LatLng(
                            parseFloat(markers[i].getAttribute("lat")),
                            parseFloat(markers[i].getAttribute("lng")));
                    marker.push('markers=color:red%7Clabel:' + position + '%7C' + pointMarker + '');//ajout d'un marker
                    path.push(pointMarker);//ajout d'un path
                }
            }
            marker = marker.join('&');//pour insérer plusieurs markers
            path = google.maps.geometry.encoding.encodePath(path);
            document.location.href = "http://maps.googleapis.com/maps/api/staticmap?size=600x380&maptype=roadmap&" + marker + "&path=weight:4|color:red|enc:" + path + "&sensor=false";
        });
    }
    ... sans succès ! J'ai toujours mes tracés mais linéaire, ça ne prend pas en compte une itinéraire. C'est de simple ligne à vol d'oiseau en gros ^^

  17. #17
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 867
    Points
    44 867
    Par défaut
    IL faut reprendre l'ordre des choses
    - tu récupéres/affiches les markers en provenance de ta BdD, l'affichage n'est pas forcément indispensable
    - SURTOUT il te faut récupérer le trajet, il ne s'invente pas comme cela.

    Le 2éme point se fait à travers une requête en utilisant un objet google.maps.DirectionsService(). C'est uniquement au retour serveur que tu pourras exploiter la réponse qui contient tous les éléments nécessaire (Directions Service).

    Regarde cette exemple https://developers.google.com/maps/d...ections-simple

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Oui j'ai déjà une fonction itineraire() dans mon fichier qui fait ça. Je sais comment tracé un itinéraire mais après c'est comment l'intégrer à static map api où je bloque, je dois pas être très loin j'imagine et j'espère.

    Voici ma fonction itineraire() présente dans le même fichier que ma fonction enregistrer(). Je vais essayer de faire marcher tout ça aujourd'hui.

    Merci.

    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
    function itineraire() {
        var idProduct = document.getElementById('id_product').value; 
        var start = document.getElementById('start').value;
        var end = document.getElementById('end').value; 
     
        wayPointArray = new Array();
     
        downloadUrl("../....php", function(data) {
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("activite");
            for (var i = 1; i < (markers.length - 1); i++) {
                if (markers[i].getAttribute("id_product") === idProduct) {
                    var point = new google.maps.LatLng(
                            parseFloat(markers[i].getAttribute("lat")),
                            parseFloat(markers[i].getAttribute("lng")));
                    wayPointArray.push({
                        location: point,
                        stopover: true
                    });
                }
            }
            var request = {
                origin: start,
                destination: end,
                waypoints: wayPointArray,
                travelMode: google.maps.TravelMode.DRIVING
     
     
            };
            directionsService.route(request, function(response, status) {
                if (status === google.maps.DirectionsStatus.OK) {
                    directionsDisplay.setDirections(response);
                }
        });
    }

  19. #19
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 098
    Points : 44 867
    Points
    44 867
    Par défaut
    Une fois ta requête aboutie, toutes les infos sont contenues dans directionsDisplay.directions.routes[0];.

    Pour récupérer les valeurs nécessaires au tracé tu pourrais faire par exemple (*)
    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
      function showImage(){
        // les données utiles sont contenues dans data.routes[0]
        var oRecup = directionsDisplay.directions.routes[0];
        if( oRecup){
          // récup données carte
          var centre  = oMap.getCenter(),
              zoom    = oMap.getZoom(),
              size    = oMap.getDiv(),
              maptype = oMap.getMapTypeId();
          // init URL de l'image
          var imageURL = ['http://maps.googleapis.com/maps/api/staticmap?'];
          imageURL.push( 'center=' +centre.toUrlValue());
          imageURL.push( 'zoom=' +zoom);
          imageURL.push( 'size=' +size.offsetWidth +'x' +size.offsetHeight);
          if( maptype !=='roadmap'){
            imageURL.push( 'maptype=' +maptype);
          }
          var i, nbLegs = oRecup.legs.length;
          // marker de debut
          imageURL.push('markers=label:A|' +oRecup.legs[0].start_location.toUrlValue());
          // marker de fin
          imageURL.push('markers=label:B|' +oRecup.legs[nbLegs -1].end_location.toUrlValue());
          // traitement des wayPoints
          for( i=1; i <nbLegs; i++){
            imageURL.push('markers=color:green|' +oRecup.legs[i].start_location.toUrlValue());
          }
          // l'itinéraire encryté
          imageURL.push('path=weight:5|color:0x0088ffa0|enc:' +oRecup.overview_polyline.points);
          // le reste
          imageURL.push('sensor=false');
          imageURL = imageURL.join('&');
          // affiche l'image
          oImage.src = imageURL;
        }
      }
    [EDIT]
    (*)extrait d'une source que je mettrais en ligne dès que finalisée

    Exemple de réalisation Création d'une Static Map à partir d'un itinéraire

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 199
    Points : 71
    Points
    71
    Par défaut
    Ouahhhh un grand merci j'ai adapté à mon code et ça fonctionne parfaitement !!

    Grand grand merci !

    PS : très intéressant ton site perso.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. enregistrer fichier dans un dossier :ceci est il possible??
    Par info007 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/05/2014, 14h07
  2. map<string, MaClasse<T>*> est ce possible ?
    Par julie_n3k0 dans le forum C++
    Réponses: 4
    Dernier message: 03/09/2009, 00h11
  3. [Free Pascal] Connaître le nombre d'enregistrements par un clic droit
    Par JoseF dans le forum Contribuez
    Réponses: 2
    Dernier message: 08/12/2007, 14h14
  4. Est-il possible de bloquer le clic-droit de la souris?
    Par Jahprend dans le forum Windows
    Réponses: 1
    Dernier message: 09/06/2006, 12h56
  5. Est t il possible d'avoir un menu sur un clic droit ???
    Par almisuifre dans le forum C++Builder
    Réponses: 6
    Dernier message: 21/12/2004, 11h21

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