Tengo un gráfico de red que necesito simplificar en el sentido de reducir el número de bordes . La idea sería fusionar los nodos que se encuentran juntos y eliminar los bordes cortos de conexión.
¿Cómo podría lograrse esto en PostGIS o GRASS? ¿O hay mejores enfoques para simplificar automáticamente una red como esta?
Ya he probado la función ST_SnapToGrid pero no estoy contento con los resultados (gris = original, negro = ajustado):
Respuestas:
Lo más cerca que he llegado hasta ahora es esto:
Está tomando las carreteras con una tolerancia de 5 metros y eliminando todas las líneas de longitud cero. No es una solución óptima, ya que parece ajustarse al azar a algún vértice.
fuente
¿Has probado el GRASS v.generalize ?
v.generalize
le permite elegir el algoritmo de generalización con el atributo de método . Hay un montón: douglas, douglas_reduction, lang, reducción, reumann, boyle, slip_averaging, distance_weighting, chaiken, hermite, serpientes, red, desplazamiento .Y los parámetros adicionales como
threshold
,degree_thresh
,angle_thresh
(dependiendo del algoritmo seleccionado) puede ayudarle a obtener un resultado preciso.Aquí viene un tutorial .
fuente
No he hecho esto, pero creo que puedo sugerir una dirección.
ST_ModEdgeHeal fusionará un borde en el otro. ST_NewEdgeHeal reemplazará ambos con un nuevo borde.
Manual de topología PostGIS
fuente
@underdark, veo que has escrito un herramienta para densificar líneas en Sextante. Por lo tanto, sugiero el siguiente algoritmo para evitar el ajuste "aleatorio" de uno de sus puntos.
Seleccione los segmentos de línea de los que desea deshacerse en función de su longitud.
Para cada uno de esos segmentos, cree un punto en el punto medio
Eliminar el segmento pequeño
Ahora puede usar ST_Snap en PostGIS (vea el ejemplo aquí )
EDITAR: tenga en cuenta que en su caso, también podría usar v.net primero para eliminar los pseudo-nodos (nodo que conecta solo dos líneas)
fuente
Remitiendo cómo Michaël Michaud analizó esto en la lista de desarrolladores de OpenJUMP:
fuente