Pages: 1
- Sujet précédent - [OL] Comment réaliser une intersection entre deux couches sous OL ? - Sujet suivant
#1 Fri 20 May 2011 17:40
- zac
- Participant occasionnel
- Date d'inscription: 16 Apr 2009
- Messages: 27
[OL] Comment réaliser une intersection entre deux couches sous OL ?
Bonjour,
J'ai un bouton "dessin" dans mon appli webmapping qui me permet de dessiner des polygones (contrôle DrawFeature). J'aimerais à la suite du dessin d'un polygone, réaliser une intersection entre le polygone dessiné et une couche stockée sous Postgis. Si le polygone et la couche s'interceptent, il y aura un affichage déclenché.
Pour cela, je me suis aidé de l'exemple d'OL : http://dev.openlayers.org/sandbox/pinch … sects.html.
Voici le contrôle drawFeature :
Code:
var dessin_ctrl = new OpenLayers.Control.DrawFeature( vlayer, OpenLayers.Handler.Polygon, { handlerOptions: { layerOptions: {styleMap: styleMap} }, featureAdded: intersection} );
Le featureAdded permet de déclencher un évènement (pour mon cas, j'aimerais que ce soit une fonction) après le dessin du polygone.
Voici maintenant la function intersection :
Code:
function intersection(e) { // polygone juste dessiné var polygone= e.feature; // couche stockée dans postgis et appelée précédemment var couche_postgis = wfs.feature; // intersection intersect = polygone.geometry.intersects(couche_postgis.geometry); //Y a-t-il intersection ? if (intersect){alert ("ca coupe!");} };
La couche stockée sous Postgis a été appelée précédemment dans mon programme en WFS.
Firebug me dit que la variable polygone n'est pas définie.
Conclusions :
- Est-ce que j'utilise la bonne méthode ?
- Si c'est la bonne méthode :
- la variable polygone n'est pas définie : faut-il passer par un "this"? (En gros le programme n'arrive pas à accéder au polygone tout fraichement dessiné ?)
- J'ai accédé à la couche stockée sous PostGIS par du WFS. Faut-il l'appeler par OpenLayers.Layer.Vector ?
Comme vous le voyez, ça n'est pas gagné.
Si vous avez quelques conseils pour m'aiguiller je suis preneur.
Merci d'avance
Hors ligne
#2 Fri 20 May 2011 18:48
Re: [OL] Comment réaliser une intersection entre deux couches sous OL ?
Bonsoir,
Je me permets de déplacer votre message ici.
Bon week-end,
Bruno
Hors ligne
#3 Sat 21 May 2011 13:58
- khalid_sig
- Participant actif
- Date d'inscription: 7 Apr 2011
- Messages: 52
Re: [OL] Comment réaliser une intersection entre deux couches sous OL ?
Bonjour
Je vous invite à voir ce lien http://workshops.opengeo.org/postgis-sp … union.html dans le menu en haut cliquer sur education et chercher dans les sous menu peut-être que vous pouvez trouver quelque chose qui vous inspirera.
Bon courage
Hors ligne
#4 Mon 23 May 2011 17:10
- zac
- Participant occasionnel
- Date d'inscription: 16 Apr 2009
- Messages: 27
Re: [OL] Comment réaliser une intersection entre deux couches sous OL ?
Bonjour Khalid,
Merci pour ton lien qui regorge d'informations intéressantes.
Toutefois, l'article qui s'approche le plus de mon besoin permet de fusionner des polygones stockés dans une base de données.
Je repars donc sur le début de code que je mettais en place.
J'ai donc comme mesage d'erreur "polygone is undefined".
Il ne comprend donc pas le var polygone=e.features.
Une idée d'où cela pourrait venir ?
Hors ligne
#5 Tue 24 May 2011 01:12
Re: [OL] Comment réaliser une intersection entre deux couches sous OL ?
Bonjour,
Dans votre code, avez vous essayé de sortir polygone de la fonction que vous utilisez? Cela vous permettrait de vérifier si vos opérations sont liées à un problème de portée javascript.
Ainsi
Code:
function intersection(e) { // polygone juste dessiné var polygone= e.feature; // couche stockée dans postgis et appelée précédemment var couche_postgis = wfs.feature; // intersection intersect = polygone.geometry.intersects(couche_postgis.geometry); //Y a-t-il intersection ? if (intersect){alert ("ca coupe!"); }
devrait devenir
Code:
var polygone; function intersection(e) { // polygone juste dessiné polygone= e.feature; // couche stockée dans postgis et appelée précédemment var couche_postgis = wfs.feature; // intersection intersect = polygone.geometry.intersects(couche_postgis.geometry); //Y a-t-il intersection ? if (intersect){alert ("ca coupe!"); }
Cette action polluera l'espace des variables globales mais devrait vous permettre de plus facilement identifier votre erreur.
Si l'erreur vient de là, (que vous n'avez plus "polygone is undefined") je vous conseille de lire http://www.commentcamarche.net/contents
/javascript/jsvar.php3
Vous pouvez aussi jouer avec un console.log(e) dans votre fonction pour voir si e est déjà retourné (avant même de chercher à accéder à l'objet géométrique) en admettant que vous utilisez un outil comme firebug.
Cordialement
ThomasG
Hors ligne
#6 Tue 24 May 2011 14:29
- zac
- Participant occasionnel
- Date d'inscription: 16 Apr 2009
- Messages: 27
Re: [OL] Comment réaliser une intersection entre deux couches sous OL ?
Bonjour,
J'ai essayé de sortir les variables de la fonction, sans résultat.
Par contre l'utilisation de console.log m'a appris certaines choses :
- le consol.log(e) me montre que le polygone e est bien retourné (je vois ses coordonnées qui correspondent à ce que j'ai dessiné).
- le consol.log(couche_postgis) me retourne effectivement les coordonnées de ma couche stockée en postgis et appelée en wfs.
- le consol.log(polygone) me retourne "undefined". Comme s'il ne comprenait pas l'écriture e.features alors que dans le cas de ma couche wfs, cette syntaxe fonctionne.
- le console.log(couche_postgis.geometry) me retourne "undefined.
Je suis donc encore dans le flou...
Hors ligne
Pages: 1
- Sujet précédent - [OL] Comment réaliser une intersection entre deux couches sous OL ? - Sujet suivant