¿Ajustar líneas a puntos automáticamente?

19

Tengo dos archivos de formas vectoriales: un archivo es puntos que representan pozos de registro y el otro es un archivo de polilínea que representa tuberías que conducen hacia y desde los pozos de registro. Necesito ajustar las líneas dentro de una distancia especificada a la boca de inspección más cercana.

¿Hay una manera fácil de lograr esto sin hacerlo manualmente?

líneas -> puntos

Actualizar

Según Alexandre, he exportado mis archivos de forma a formato espacial. No estoy seguro de qué hacer a continuación.

ingrese la descripción de la imagen aquí

Actualización n. ° 2 Creé un nuevo archivo de base de datos e importé archivos de forma en la nueva base de datos usando spatialite-gui, ajusté mi consulta SQL pero, como puede ver, recibo el error "no existe esa columna: f.geom"

ingrese la descripción de la imagen aquí

GreyHippo
fuente
En una tabla espacial (capa) de Spatialite, las geometrías de entidades se guardan en un atributo. Los nombres pueden ser diferentes. En la tabla "pipe" ese atributo se llama Geometry. Actualizaré mi respuesta asumiendo que mh también como un atributo Geometry.
Alexandre Neto
Recibí un error "no hay tal función: ST_Snap". Estoy usando QGIS 1.8 en Windows 7 de 64 bits.
GreyHippo
¿Qué Spatialite tienes? Puede verificarlo en QGIS> Ayuda> Acerca de
Alexandre Neto
"no existe esa columna: f.geom" - prueba con f.Geometry
vinayan
Mi versión de Spatialite es 3.0.1
GreyHippo

Respuestas:

26

Si está dispuesto a poner sus datos en Postgis (o Spatialite ), puede usar ST_Snap para hacer lo que quiera.

Simplemente use líneas layer \ table como entrada, y su capa de puntos como referencia, y configure la tolerancia. Algo como esto:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

El resultado es este:

ingrese la descripción de la imagen aquí

Luego puede actualizar sus geometrías utilizando el identificador de la característica.

Alexandre Neto
fuente
¿Dónde pondría el código "Seleccionar ... de ..."? ¿Qué significa "usar el identificador de función"?
GreyHippo
Después de importar sus archivos en la base de datos (postgis o espacial), puede usar DB Manager para ver las tablas de su base de datos y ejecutar la consulta SQL (el código) en la Ventana SQL, y luego cargarla en su lienzo. Dime si eso funciona para ti, y luego haremos la parte de actualización.
Alexandre Neto
Alexandre, ver actualización arriba. Exporté el archivo a dos archivos de espacial.
GreyHippo
Debe colocar ambos archivos en la misma Base de datos de Spatialite, simplemente arrastre decir "pipe" a la base de datos "mh.sqlite". Después de eso, actualice el Código SQL para cambiar "puntos" a "mh" y "líneas" a "canalización". También adapte "gid" a su identificación de "tubería". Después de eso, puede ejecutar y cargar los resultados.
Alexandre Neto
3

No sé mucho acerca de QGIS o GRASS, pero algunas búsquedas rápidas en Google han arrojado v.clean en GRASS.

Echa un vistazo a esta publicación y esta .

Alternativas a QGIS y GRASS:

Si tuviera que hacer esto en ArcGIS, probablemente almacenaría mis datos en un Conjunto de datos de entidades en una Geodatabase de archivos y crearía una Topología para identificar áreas donde la capa de puntos no estaba en los puntos finales de las líneas. Luego puede corregir los errores utilizando el Inspector de errores .

Pero, probablemente la solución más rápida y fácil estaría en FME. Puede intentar usar la herramienta Snapper o mejor aún, la herramienta AnchoredSnapper . Si usa AnchoredSnapper, asegúrese de que su tipo de ajuste sea Ajuste de punto final. Por supuesto, necesitará una licencia para FME. Pero puede descargar una versión de prueba de 14 días si no tiene una.

Fezter
fuente
Miré v.clean pero solo usa una capa, necesito comparar una capa con otra. Además, estaba más buscando una opción QGIS / opensource.
GreyHippo
1
@GreyHippo, GRASS es de código
abierto
1
Sé que GRASS es de código abierto, pero sus otras opciones no lo son.
GreyHippo
-1

Forma manual

Qgis -> Configuración -> Opciones de ajuste (y no estoy seguro, pero podría necesitar la extensión CadTools) y habilitar la edición topológica.

Manera automática

v.clean que se encuentra en las herramientas GRASS en la caja de herramientas SEXTANTE en QGIS. Si tiene PostGIS 2.0, entonces ST_Snap y ST_SnapToGrid () (y no hay ninguna razón por la que no pueda usarlo, es una herramienta espacial muy buena)

Forma comercial

Herramienta FME y MRF (extensión comercial, tenía una versión de evaluación. Muy buena).

También estoy interesado en la gestión de tuberías de agua / alcantarillado con herramientas de código abierto, ¿tiene alguna pista?

simplexio
fuente
Creo que eso es lo que GreyHippo quiere decir con "hacerlo manualmente". Simplemente usando las opciones de Ajuste, tendrá que mover cada nodo colgante a mano para activar el ajuste. ¿O me estoy perdiendo algo?
Jake
No. Estaba ciego.
simplexio
Simplexio, NO quiero hacerlo manualmente. Esperaba un complemento o proceso que no conozco.
GreyHippo
¿No pensé que podrías usar GRASS v.clean en dos capas?
GreyHippo
1
Si recuerdo correctamente, puede arreglar líneas demasiado cortas. usted ve, el problema que tiene no es que sus pozos de registro no estén en los lugares correctos, es que su red de alcantarillado no es topológicamente correcta. Y eso solo necesita una capa de tuberías. Todos los sistemas de redes de servicios públicos que he visto suponen que hay alcantarillas en cada intersección de alcantarillado. Este curso supone que desea tener una topología correcta.
simplexio