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
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
Il faut regarder le code dans api/js/1.0/lib/geoportal/lib/Geoportal/Control/MeasureToolbar.js.
Et puis surcharger au bon endroit:
Vu le nom, à la fin de la saisie, je pense que "measure" est le point où mettre sa fonction.cntrl.events.on({
"measure": OpenLayers.Function.bind(this.handleMeasurements,this),
"measurepartial": OpenLayers.Function.bind(this.handleMeasurements,this)
});
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 :
C'est la bonne manière de surcharger ? (je l'ai fait sur la version ici : http://www.kiouz.fr/test_api/test.html)
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; } } });
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.
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 ?
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é ?
Je surcharge avec:
Oui, je récupère bien l'objet geometry, cf la console de Firefug// la surcharge pour la fin de la mesure
Geoportal.Control.MeasureToolbar.prototype.activate = function() {
...
}
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 ...
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) :
Enjoy ! Et merci à tout ceux qui ont participé à ce grand moment d'émotion !
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);
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.
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);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager