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

IGN API Géoportail Discussion :

Charger un polygone sur une carte sans KML


Sujet :

IGN API Géoportail

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Merci pour cette précision, mais c'est justement ca que je vois pas comment faire, je n'arrive pas à surcharger la classe pour mettre ma propre function sur le double clic finalisant la forme créée par l'outil de mesure

  2. #22
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 128
    Points : 1 764
    Points
    1 764
    Par défaut
    Il faut regarder le code dans api/js/1.0/lib/geoportal/lib/Geoportal/Control/MeasureToolbar.js.
    Et puis surcharger au bon endroit:
    cntrl.events.on({
    "measure": OpenLayers.Function.bind(this.handleMeasurements,this),
    "measurepartial": OpenLayers.Function.bind(this.handleMeasurements,this)
    });
    Vu le nom, à la fin de la saisie, je pense que "measure" est le point où mettre sa fonction.

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Désolé, je dois sûrement te saouler mais je suis une buse en JS

    J'ai tenté ça mais rien ne se passe quand je termine de dessiner le polygone :
    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
    Geoportal.Control.MeasureToolbar = OpenLayers.Class(Geoportal.Control.Panel, {
              activate: function() {
                    if (Geoportal.Control.Panel.prototype.activate.apply(this, arguments)) {
                        for (var i= 0, len= this.controls.length; i<len; i++) {
                            var cntrl= this.controls[i];
                            if (cntrl.events) {
                                cntrl.events.on({
                                    "measure": alert(kml.features[0].geometry),
                                    "measurepartial": OpenLayers.Function.bind(this.handleMeasurements,this)
                                });
                                cntrl.events.register("activate", cntrl, this.onActivate);
                                cntrl.events.register("deactivate", cntrl, this.onDeactivate);
                            }
                        }
                        return true;
                    } else {
                        return false;
                    }
                }
            });
    C'est la bonne manière de surcharger ? (je l'ai fait sur la version ici : http://www.kiouz.fr/test_api/test.html)

  4. #24
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 128
    Points : 1 764
    Points
    1 764
    Par défaut Non ...
    J'ai modifié ma page pour mettre la surcharge ad-hoc
    http://atlasnw.free.fr/geoportail/exemples/kiouz.html

    Elle est très partielle, il faudra aussi, au minimum, ajouter celle sur le deactivate.

  5. #25
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Ok merci pour ton exemple. Mais il y a quelque chose que je ne comprends pas, c'est comment surcharger en JS en fait ... car même en blindant la fonction de fin de mesure de console.log ou d'alert, il n'y rentre absolument pas

    Tu arrives à récupérer le double clic final de validation de dessin ?

  6. #26
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    J'ai fait un test en insérant exactement le même code que toi, et ma carte est explosée, les console.log ne s'affichent pas.
    Y'a-t-il quelque chose de spécial qui pourrait déconner, du genre la clé ?

  7. #27
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 128
    Points : 1 764
    Points
    1 764
    Par défaut
    Je surcharge avec:
    // la surcharge pour la fin de la mesure
    Geoportal.Control.MeasureToolbar.prototype.activate = function() {
    ...
    }
    Oui, je récupère bien l'objet geometry, cf la console de Firefug

  8. #28
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Bon j'ai trouvé la différence entre nos deux sites, il fallait que je récupère les CSS et les images du Geoportail et les mettre sur le site ... je vais pouvoir commencer à chercher d'où viennent les soucis ...

  9. #29
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Voilà, cette fois-ci je pense que tout devrait aller. Voici pour ceux que ca intéresse le code nécessaire pour afficher un polygone quand on a les coordonnées de tous les points (monLayer.feature[0].geometry) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var poly = new OpenLayers.Layer.Vector("Poly");
      
      var featurePoly = new OpenLayers.Feature.Vector(
        OpenLayers.Geometry.fromWKT(
            "POLYGON((498040.96059818397 5300011.534344669,490616.96059818397 5295083.534344669,496120.96059818397 5291243.534344669,505912.96059818397 5289771.534344669,507832.96059818397 5297643.534344669,502584.96059818397 5304427.534344669,498040.96059818397 5300011.534344669))"
        )
      );
      poly.addFeatures(featurePoly);
      viewer.getMap().addLayer(poly);
    Enjoy ! Et merci à tout ceux qui ont participé à ce grand moment d'émotion !

  10. #30
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 128
    Points : 1 764
    Points
    1 764
    Par défaut Pas si sur ...
    Il faut toujours vérifier les projections avant d'insérer sur une couche:
    - projection de la couche
    - projection de l'objet inséré

    Sur http://atlasnw.free.fr/geoportail/exemples/kiouz.html, j'ai ajouté un bandeau orange avec le WKT obtenu en fin de saisie.

  11. #31
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Ok merci pour cette réponse !

    J'ai ajouté de la même manière le code permettant de récupérer les valeurs pour écrire le polygone et ca a l'air de marcher

    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
    // Récupération des coordonnées du polygone
      for(var i=0; i< elInput.length; i++){
        if(elInput.item(i).name.indexOf('points') > 0){
          valPoly = elInput.item(i).value;
        }
      }
    
      mapProjection = viewer.getMap().getProjection();
      
      var newPoly = new OpenLayers.Geometry.fromWKT(valPoly);
      newPoly.transform(new OpenLayers.Projection("EPSG:4326"),mapProjection);
      
      // Affichage du polygone
      var poly = new OpenLayers.Layer.Vector("Zone");
      var featurePoly = new OpenLayers.Feature.Vector(newPoly);
      poly.addFeatures(featurePoly);
      viewer.getMap().addLayer(poly);

Discussions similaires

  1. [Google Maps] Affichage d'un certain nombre de calques KML sur une carte
    Par VisualCassis dans le forum APIs Google
    Réponses: 3
    Dernier message: 03/07/2014, 19h09
  2. Generer des objets aleatoirement sur une carte
    Par K20 dans le forum Langage
    Réponses: 13
    Dernier message: 24/12/2005, 16h19
  3. MapX, Ajouter des bmp et jpeg sur une carte ...
    Par rorodopuis dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/07/2005, 09h07
  4. Mot de passe sur une carte à puce!?
    Par Le_Che dans le forum C++Builder
    Réponses: 13
    Dernier message: 20/05/2005, 10h37
  5. Calque -> Un point sur une carte de france
    Par TATAYET dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/04/2005, 14h48

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