Ecco un breve riassunto di ciò che sto cercando di fare: ho 3 tabelle in Postgres, 'a' e 'b', ognuna ha una colonna Poligono e 'c' ha una colonna Punto. Quello che sto cercando di fare qui è di ottenere le intersezioni delle geometrie tra 'a', 'b' e 'c' e di visualizzare tali geometrie su un livello vettoriale OpenLayers.
So già come visualizzare qualsiasi tipo di geometria da una stringa in OpenLayers, ma ho problemi con la funzione ST_Intersection di PostGIS, sto facendo questo:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
dove a.geom e b.geom sono entrambe le colonne della geometria e viene visualizzato questo messaggio di errore:
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!
Inoltre ho provato ad esprimere la geometria risultante come testo usando ST_AsText in questo modo:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
ma mi invia questo messaggio di errore:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Non so cosa sto facendo di sbagliato, voglio solo far visualizzare il WKT dei poligoni su OpenLayers, ecco come visualizzo una geometria da 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);
AGGIORNAMENTO: ho provato il prossimo:
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';
ma ricevo il messaggio di errore successivo:
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.
Ho aggiunto l'isvalido per verificare che vengano valutati solo i poligoni validi, ma sta dicendo che l'errore si trova nella ST_Intersection (a, b), sia a, b che c hanno lo stesso SRID, quindi sono davvero confuso, mi dispiace se lo sono chiedendo troppo, ma sono abbastanza nuovo con PostGIS, quindi spero di non disturbarti molto. Grazie.
SELECT PostGIS_Full_Version();
ritorna?