Aquí hay un resumen rápido sobre lo que estoy tratando de hacer: tengo 3 tablas en Postgres, 'a' y 'b', cada una tiene una columna Polígono y 'c' tiene una columna Punto. Lo que estoy tratando de hacer aquí es obtener las intersecciones de geometrías entre 'a', 'b' y 'c', y mostrar esas geometrías en una capa vectorial de OpenLayers.
Ya sé cómo mostrar cualquier tipo de geometría de una Cadena en OpenLayers, pero tengo problemas con la función ST_Intersection de PostGIS, estoy haciendo esto:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
donde a.geom y b.geom son las dos columnas de geometría, y recibo este mensaje de error:
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!
También intenté expresar la geometría resultante como texto usando ST_AsText así:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
pero me envía este mensaje de error:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
No sé qué estoy haciendo mal, solo quiero que el WKT de los polígonos lo muestre en OpenLayers, así es como visualizo una geometría de 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);
ACTUALIZACIÓN: probé el siguiente:
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';
pero recibo el siguiente mensaje de error:
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.
Agregué el válido para verificar que solo se están evaluando polígonos válidos, pero indica que el error está en la intersección ST_ (Intersección, a, b), tanto a, byc tienen el mismo SRID, así que estoy realmente confundido, lo siento si estoy preguntando demasiado, pero soy bastante nuevo con PostGIS, así que espero no molestarte mucho. Gracias.
SELECT PostGIS_Full_Version();
devuelve?