Quiero encontrar un algoritmo de PostGIS para unir los puntos de dos geometrías que están "cerca" el uno del otro.
Eso es: Quiero una función, que toma como entrada dos geometrías, y devuelve 1 geometría, que consiste en puntos de la primera geometría, la segunda geometría, y puntos que están en radio especificado de ambos geometrías.
Actualmente estoy utilizando dicha función para esto (el radio de tolerancia es de 2 metros):
SELECCIONE ST_AsText( ST_Buffer( ST_Union( ST_Buffer( ST_GeomFromText( 'POLÍGONO ((0 0, 0 4,5, -2 4,5, -2 5,5, 0 5,5, 0 10, 1 10, 1 0, 0 0))', 3301 ), 2 ), ST_Buffer( ST_GeomFromText( 'POLÍGONO ((2 5, 5 8, 5 2, 2 5))', 3301 ), 2 ) ) , -2) );
Funciona razonablemente bien para unir puntos de dos geometrías, que están cerca la una de la otra.
Sin embargo, tiene efectos secundarios. Por ejemplo:
Geometrías de entrada:
Geometría resultante:
Como se puede ver en la imagen, se añade un área extra a la geometría "azul" donde están los ángulos obtusos. Esto es así porque al utilizar
ST_Buffer(ST_Buffer(geom, tolerance), -tolerance)
añade espacio adicional a los lugares donde hay ángulos obtusos.
¿Existe un algoritmo que produzca el resultado que pido? La naturaleza exacta de cómo se "pegan" las dos geometrías entre sí no es tan importante. El algoritmo de pegado deja una curva suave, pero algo como esto también sería un resultado válido (dibujado a mano, traté de añadir puntos que están en la distancia de 2 metros de ambas geometrías):
Si hay muchos algoritmos, el más rápido será el que mejor se adapte a mis necesidades. Pero para comparar, los algoritmos más lentos también serán bienvenidos (votados), si sobresalen por algún otro criterio.