Aquí hay un breve resumen de lo que estoy tratando de hacer: tengo 3 tablas en Postgres, 'a' y 'b', cada una tiene una columna de Polígono y 'c' tiene una columna de Puntos. Lo que estoy tratando de hacer aquí es obtener las intersecciones de las geometrías entre 'a', 'b' y 'c', y mostrar dichas geometrías en una capa vectorial de OpenLayers.
Ya sé cómo mostrar cualquier tipo de geometría desde 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 ambas columnas de geometría, y aparece 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 traté de expresar la geometría resultante como texto usando ST_AsText como este:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
pero me envió 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 muestro 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é lo 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 valor válido para verificar que solo se están evaluando los polígonos válidos, pero indica que el error está en la intersección ST (a, b), tanto a, byc tienen el mismo SRID, así que estoy realmente confundido, perdón si Estoy pidiendo demasiado, pero soy bastante nuevo con PostGIS, así que espero no molestarte mucho. Gracias.