st_merge linestring example column algorithm geometry gis postgis

algorithm - linestring - st_merge postgis



¿Cómo degradar de manera inteligente o suavizar los datos de GIS(simplificación de polígonos)? (6)

¡En lugar de QGIS, sugiero usar ogr2ogr porque no elimina los polígonos !

ogr2ogr output.shp input.shp -simplify 0.0001

Tengo mapas detallados de los condados de EE. UU., De los conjuntos de datos TIGER LINE . ¿Cómo podría muestrear, suavizar o degradar los datos para obtener formas más rectas, más cuadradas y menos "ruidosas" para representar las características geográficas, en este caso solo los límites del condado y las líneas estatales, pero tal vez también en el caso general?

El muestreo puede ocurrir en el tiempo de renderizado si eso se puede hacer de manera eficiente, o se puede generar y almacenar un conjunto de datos paralelo. Estoy usando PostGIS , y las líneas son multi-polilíneas generadas por shp2pgsql , pero cualquier solución en la que tome una línea ondulada y la reduzca a una línea más uniforme de aproximadamente el mismo significado para un intérprete humano sería muy útil.


Aquí hay un algoritmo de suavizado iterativo simple:

para cada tres puntos secuenciales en cualquier camino, si el punto medio no tiene intersecciones y se encuentra dentro de un pequeño ángulo umbral de la ruta directa entre los dos puntos externos, elimínelo.

Repita hasta que esté satisfecho.


Douglas-Peucker es definitivamente el enfoque correcto. Hay algunas formas simples de acceder a las implementaciones en PostGIS y QGIS que pensé que agregaría aquí para aquellos que encuentren esta publicación con una pregunta similar. El objetivo es comenzar con algo como esto:

y termina con algo como esto:

En PostGIS, Douglas-Peucker se implementa como simplify , la sintaxis, detallada aquí en bostongis.org , es una variante de:

SELECT transform(simplify(transform(the_geom, 2249), 500),4326) from the_geo_table

Esto funcionó muy bien incluso en todo el conjunto de datos nacionales, con algunos errores que parecen deberse a datos subyacentes erróneos. También resulta que en QGIS, el elemento de menú Tools > Geometry Tools > Simplify Geometries exportará un archivo shapefile simplificado de cualquier geometría y lo agregará como una capa a su proyecto actual.

Este es un conjunto de herramientas bastante fundamental y formulé la pregunta a un nivel demasiado bajo, aunque fue bueno aprender las matemáticas subyacentes, hay una buena explicación al respecto aquí: http://www.mappinghacks.com/code/ PolyLineReduction / , junto con un código de muestra que resulta no ser demasiado necesario.


El problema con simplemente tirar puntos es que puedes distorsionar rápidamente la forma del polígono original. Un mejor enfoque es llegar desde la otra dirección; comience con una aproximación básica del polígono y luego refíncelo hacia arriba hacia su forma compleja.

Un excelente ejemplo de este enfoque es el algoritmo de Douglas-Puecker . Comienzas con dos vértices extraídos del polígono completo. Agregue un tercer vértice seleccionando el que se encuentra más alejado de un borde dibujado entre los dos primeros vértices. Continúa agregando puntos hasta que tengas algo que se parezca lo suficiente al polígono original.



También puedes probar el algoritmo de Visvalingam, que elimina iterativamente la parte menos perceptible de una línea. Aquí hay una gran explicación de ese algoritmo: