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

JavaScript Discussion :

openlayers - événement tap


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 13
    Points
    13
    Par défaut openlayers - événement tap
    Bonjour à toutes et tous,

    J'ai monté une petite web appli (php) toute simple qui dispose d'un fond de carte OSM.
    Sur cette carte des marqueurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <....>
    marker = new OpenLayers.Marker(lonLat2,icon);
    markers.addMarker(marker);
    <.....>
    Ces marqueur sont intéractifs, quand on clique on déclenche la fonction cliquemys:
    marker.events.register("click", marker,cliquemys);
    Dans cliquemys, on ouvre une autre page php (encore merci à Sylvainpv pour la résolution du pb précédent )

    Savez-vous par quoi je pourrais remplacer "click" pour que ça marche aussi sur mobile (tablettes) ?

    Je vous remercie par avance de votre aide.
    Cordialement
    fmdr

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Regarde ici :
    http://dev.openlayers.org/docs/files.../Click-js.html

    La propriété pixelTolerate te permettra de fixer l'approximation de l'évènement au doigt

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Encore merci pour ta réponse,

    Je suis allé voir sur le lien, le pb, c'est qu'ils expliquent ce qu'on peut faire mais pas comment faire et il n'y a pas d'exemples
    Donc ce que je comprends, c'est qu'il faut créer une nouvelle instance donc j'ai essayé de faire un truc simple:

    Creation de la nouvelle instance
    var tap= new OpenLayers.Handler.Click();

    On renseigne la valeur de la propriété:
    tap.pixelTolerance = 0

    et après je remplace le "touchstart" par mon nouveau tap
    marker.events.register("tap", marker,cliquemys);

    Mais ça marche pas.

    Merci encore pour ton aide
    Cordialement
    fmfr

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    http://dev.openlayers.org/examples/click-handler.html
    https://github.com/openlayers/openla...k-handler.html

    Un petit effort de recherche, je fais des recherches Google pour toi là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map.addControl(new OpenLayers.Control.Click({ pixelTolerance: 10 });

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Globalement, j'arrive à faire pas mal de trucs mais là, je cale complètement, et vraiment merci pour ton aide.

    Alors, j'ai ajouté ton code, mais du coup j'ai une erreur JS: OpenLayers.Control.Click is not a constructor.

    Je mets le code source entier, en espérant que mon code n'est pas trop fouilli....

    Encore un grand merci à toi.

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
     
     
    <!DOCTYPE html>
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
     
    <head>
    	<title>test carte osm</title>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1">
     
     
    	<style>
    			html { height: 100% }
    			body { height: 100%; 
    			width:100%;
    			margin:auto;
    			border: 0px solid red;}
    			#map { 
     
    					border-top: 3px solid grey;
    					height:100%;
    					width: 100%;
     
    			}
     
     
    			div.olControlAttribution{
    			  font-family: Verdana;
    			  font-size: 0.5em;
    			  bottom: 20px;
    		  }
     
    		  div.olControlScaleLine {
    			  font-family: Verdana;
    			  font-size: 0.8em;
    			  bottom: 20px;
    		  }		
     
    	</style>
     
    <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
     
    <script type="text/javascript">
     
    //petite fonction lien pour marqeur intéractif
    function cliquemarker(evt) {
    window.location.href="testlien.php";
    }
     
     
    function init() {
     
    var zoom=14;
     
    //Création du fond de carte OSM --> qui s'affichera dans le div (id="map") de la page html
    var map = new OpenLayers.Map("map");
    map.addLayer(new OpenLayers.Layer.OSM());
     
    //création d'un point 0 pour le centrage de la carte
    var lonLat0 = new OpenLayers.LonLat(-0.144656,46.221248)
    .transform(
    new OpenLayers.Projection("EPSG:4326"), 
    map.getProjectionObject() // Transformation des coordonnées dans la projection de la carte
    );
     
    //ajout de l'échelle sur la carte
    map.addControl(new OpenLayers.Control.ScaleLine({bottomOutUnits: ''}))
     
    //ajout de la possibilité de zoomer et dezoomer sur l'ensemble du monde
    map.zoomToMaxExtent();
     
    //On centre la carte sur le point0 avec un niveau de zoom à 14 (moyen)
    map.setCenter (lonLat0, zoom);
     
    //Création d'un layer qui va contenir des marqueurs
    var markers = new OpenLayers.Layer.Markers( "Markers" );
    map.addLayer(markers);
     
    // creation d'un marqueur aux coordonnées longlat1 et transformation en coord de projection
     
    var lonLat1 = new OpenLayers.LonLat(-0.146432,46.220610)
    .transform(
    new OpenLayers.Projection("EPSG:4326"), 
    map.getProjectionObject() 
    );
     
    //creation d'un marqueur icone		
    var size = new OpenLayers.Size(30,30);
    var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
    var icon = new OpenLayers.Icon('../icon/mystere.png', size, offset);
    marker = new OpenLayers.Marker(lonLat1,icon);
     
    //ajout du marker		
    markers.addMarker(marker);
     
    //tentative de creation d'un "evenement tap"
     
    map.addControl(new OpenLayers.Control.Click({ pixelTolerance: 10 }));
     
     
    //le marqueur devient intéractif: click : PC uniquement !
    marker.events.register("click", marker,cliquemarker);	
    //click ne marche pas sous openlayers sur mobile alors on met touchstart....
    marker.events.register("touchstart", marker,cliquemarker);		
     
    var lonLatlabel = new OpenLayers.LonLat(-0.146432,46.220610)
    .transform(
    new OpenLayers.Projection("EPSG:4326"), 
    map.getProjectionObject() 
    );
    var pointlabel = new OpenLayers.Geometry.Point(lonLatlabel.lon,lonLatlabel.lat);
    var calquelabel = new OpenLayers.Layer.Vector("labels");
    map.addLayer(calquelabel);
    var featurePoint = new OpenLayers.Feature.Vector(
            pointlabel, null, {label:"label ici",fontColor:"blue"}
         );
    calquelabel.addFeatures(featurePoint);
     
     
    }		
     
     
    </script>
     
    </head>
     
    <body onload="init()">
     
    	<div id="map"></div>
     
    </body>
    </html>

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Regarde le code source de l'exemple, il définit OpenLayers.Control.Click comme une extension de OpenLayers.Control. Si la documentation ne suffit pas, il faut regarder la source, pas le choix !

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Merci pour ton message.
    J'ai essayé de m'adapter sur l'exemple mais pour un débutant sous openlayers c'est vraiment pas facile à comprendre, c'est pourquoi je demande de l'aide.
    l'erreur javascript que ça génère n'est pas très claire, je vais essayer de chercher.
    Merci encore de ton aide
    cordialement
    fmdr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  2. Réponses: 5
    Dernier message: 09/01/2003, 11h55
  3. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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