Cuando se recortan los polígonos de una tabla con polígonos de otra, ST_Intersection puede devolver un conjunto de resultados que pueden ser manejados con ST_Dump. Las geometrías múltiples devueltas no son necesariamente ST_Polygon sino también ST_LineString (probablemente también un punto). Así que cuando se ejecuta una consulta
INSERT INTO c (geom)
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom));
al intentar rellenar la tabla "c" con polígonos recortados, falla con ERROR: El tipo de geometría (LineString) no coincide con el tipo de columna (Polygon)
Hice otra sentencia SELECT anidada para que sólo salieran las geometrías de los polígonos, como:
INSERT INTO c (geom)
(SELECT geom FROM
(SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom
FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom))) AS cl
WHERE ST_GeometryType(cl.geom)='ST_Polygon');
Como esto es un poco engorroso, me pregunto si hay una solución más elegante para eliminar las geometrías no válidas.
0 votos
Por cierto, he puesto <!-- language: lang-sql --> antes de los bloques de código pero sigue sin haber highligting. ¿Algún consejo para un novato?
0 votos
Para formatear el código, simplemente péguelo, selecciónelo y utilice el botón de muestra de código
{}
por encima de la ventana de edición de preguntas.0 votos
Hm, lo he hecho, el código está marcado como "código", pero las palabras clave siguen sin estar coloreadas.
0 votos
Normalmente no trato de embellecer el código SQL aquí, pero acabo de encontrar una publicación de Meta que parece útil en meta.stackexchange.com/questions/90521/ - ¿ha dejado una "línea en blanco entre el comentario y el código"?
0 votos
Una intersección de dos geometrías puede producir cualquier tipo de geometría, por lo que creo que su solución actual es la más directa.
0 votos
@PolyGeo, dejé una línea en blanco entre el comentario y el código, pero todavía no se resalta. Me ocuparé de eso cuando reciba la iluminación :-)
0 votos
No hay problema - Meta SO (o los próximos Meta SE ) será el lugar donde se intentará arreglar el código SQL de forma bonita