Aqui está um rápido resumo sobre o que estou tentando fazer: tenho 3 tabelas no Postgres, 'a' e 'b', cada uma com uma coluna Polígono e 'c' com uma coluna Point. O que estou tentando fazer aqui é obter as interseções de geometrias entre 'a', 'b' e 'c' e exibir essas geometrias em uma camada vetorial OpenLayers.
Eu já sei como exibir qualquer tipo de geometria de uma String em OpenLayers, mas estou tendo problemas com a função ST_Intersection do PostGIS, estou fazendo o seguinte:
SELECT ST_Intersection(a.geom, b.geom) as inter from a, b;
onde a.geom e b.geom são as colunas de geometria, e recebo esta mensagem de erro:
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!
Também tentei expressar a geometria resultante como texto usando ST_AsText assim:
SELECT ST_AsText(ST_Intersection(a.geom, b.geom)) as inter from a, b;
mas ele me enviou esta mensagem de erro:
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Não sei o que estou fazendo de errado, só quero que o WKT dos polígonos o exiba no OpenLayers, eis como mostro uma geometria de um 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);
UPDATE: Tentei o seguinte:
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';
mas recebo a próxima mensagem de erro:
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.
Eu adicionei o isvalid para verificar que apenas polígonos válidos estão sendo avaliados, mas está dizendo que o erro está na ST_Intersection (a, b), ambos a, bec têm o mesmo SRID, então estou realmente confuso, desculpe se estou pedindo demais, mas eu sou muito novo no PostGIS, então espero não estar incomodando muito. Obrigado.
SELECT PostGIS_Full_Version();
retorna?