banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoDataDays 2025

#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

Bruno
Membre du bureau
Lieu: Toulouse
Date d'inscription: 22 Jun 2005
Messages: 12283
Site web

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

ThomasG
Membre
Lieu: Nantes
Date d'inscription: 9 Sep 2005
Messages: 951
Site web

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

 

Pied de page des forums

Copyright Association GeoRezo