Voici un bref résumé de ce que j'essaie de faire: j'ai 3 tables dans Postgres, «a» et «b», chacune a une colonne Polygone et «c» a une colonne Point. Ce que j'essaie de faire ici, c'est d'obtenir les intersections de géométries entre 'a', 'b' et 'c', et d'afficher ces géométries sur une couche vectorielle OpenLayers.
Je sais déjà comment afficher tout type de géométrie à partir d'une chaîne dans OpenLayers, mais j'ai des problèmes avec la fonction ST_Intersection de PostGIS, je fais ceci:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
où a.geom et b.geom sont les deux colonnes de géométrie, et je reçois ce message d'erreur:
NOTICE: TopologyException: found non-noded intersection between 515172 2.14408e+06, 497067 2.13373e+06 and 501321 2.13546e+06, 471202 2.14843e+06 500621 2.13576e+06
ERROR: GEOS Intersection() threw an error!
J'ai également essayé d'exprimer la géométrie résultante sous forme de texte en utilisant ST_AsText comme ceci:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
mais il m'envoie ce message d'erreur:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Je ne sais pas ce que je fais mal, je veux juste que le WKT des Polygones l'affiche sur OpenLayers, voici comment j'affiche une géométrie à partir d'un WKT:
var in_options = {
'internalProjection': new OpenLayers.Projection("EPSG:4326"),
'externalProjection': new OpenLayers.Projection("EPSG:4326")
};
var fea= new OpenLayers.Format.WKT(in_options).read(data); //data is the string with the WKT
vectorLayer.addFeatures([fea]); //this piece of code works great
map.zoomToExtent(bounds);
MISE À JOUR: J'ai essayé le suivant:
SELECT ST_Intersection(a.geom, b.geom) as intersect_ab FROM a INNER JOIN b ON
ST_Intersection(a,b) WHERE ST_Overlaps(a.geom, b.geom)
AND ST_isvalid(a.geom)='t' AND ST_isvalid(b.geom)='t';
mais je reçois le message d'erreur suivant:
ERROR: Function st_intersection(a,b) does not exist.
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
J'ai ajouté isvalid pour vérifier que seuls les polygones valides sont en cours d'évaluation, mais cela indique que l'erreur se trouve dans ST_Intersection (a, b), a, b et c ont le même SRID, donc je suis vraiment confus, désolé si je suis demander trop, mais je suis assez nouveau avec PostGIS donc j'espère que je ne vous dérange pas beaucoup. Merci.
SELECT PostGIS_Full_Version();
revient-il?