¿Encontrar pseudo nodos en el software GIS gratuito?

16

El software gvSIG OA Digital Edition 2010 tiene una topología de herramientas para encontrar pseudonodos en geometría lineal. Establecí la tolerancia de clúster de 0.00002 y el número máximo de errores -10000 para 20000 geometrías lineales de conteo de enlaces. Pero el resultado no tuvo éxito.

¿Existen soluciones que encuentren pseudonodos en el software GIS gratuito?

Necesito colocar pseudonodos (una solución a este problema: usar la topología de herramientas de ArcInfo, pero para mí la prioridad es usar software libre). La geometría lineal creó varios usuarios en QGIS 1.8.0 en la base de datos PostGIS (v. 2.0.1).

Agregar nueva imagen: 12 características lineales con tres pseudonodos en A (línea 4/5), B (línea 6/7), C (línea 9/10). Los pseudonodos deben ser puntos en su lugar: dos entidades lineales con intersección en un punto (nodo) deben ser una entidad lineal (línea 4/5 - línea 4, ...).

¿Es posible realizar una solicitud en PostGIS, lo que resultará en una capa de pseudonodos?

Agregar nueva imagen de ejemplos de pseudo nodos: si recibo pseudo nodos de capa lineal de puntos de punto (rectas azules) corrigí los siguientes errores en la capa lineal: A - agregar geometría faltante, B - línea marcada en la intersección, C - eliminar pseudo nodo.

    
pregunta HasT 16.04.2018 - 22:35

6 respuestas

8

Aquí hay una solución genérica, que puede aplicar a PostGIS o cualquier otro software compatible con OGC.

  

NOTA: como digo anterior , un concepto clave en FOSS y GIS es standardization : las mejores soluciones adoptan estándares, como OGC unos.

Su problema es "encontrar pseudo nodos" ... Pero creo que es un poco más, "encontrar nodos no pseudo y unir líneas de pseudo nodos". Mi solución se puede utilizar para ambos.

Oferta de estándares de OGC:

  • ST_Boundary (geom) : para detectar los nodos de las líneas

  • ST_Dump (geom) : para colocar cada nodo en un registro de la tabla SQL.

  • ST_DWithin, ST_Equals, ST_SnapToGrid, ST_Snap se puede usar para cambiar la tolerancia. Estoy usando ST_DWithin.

Podemos suponer que su problema principal se puede especificar con estos objetos y propiedades,

  • solo hay segmentos de línea (de una tabla linesegment ), representados por una geometría LINESTRING ... No he probado con MULTILNE, si tiene geometrytype = MULTIPOINT, puede dividir y lance MULTILINEs con ST_Dump y ST_LineMerge;

  • cada segmento de línea tiene un (ID de geometría) gid y un (ID de color) idline.

Entonces, el primer paso es obtener los nodos que vienen de unir líneas,

CREATE TABLE cache_bounds AS
  SELECT gid as gid_seg, (ST_Dump(ST_Boundary(the_geom))).geom AS the_geom,
         gid as color 
         -- if you not have something for "color label" of lines, use gid.
  FROM linesegment;
ALTER TABLE cache_bounds ADD column gid serial PRIMARY KEY;

CREATE TABLE cache_joinnodes AS
  -- Use your TOLERANCE instead "1" at ST_DWithin and ST_Buffer.
  SELECT *, array_length(colors,1) as ncolors FROM (
   SELECT gid, array_distinct(array_cat(a_colors,b_colors)) as colors, the_geom FROM (
    SELECT 
      a.gid, array_agg(a.color) as a_colors, array_agg(b.color) as b_colors
      , st_buffer(a.the_geom,1) as the_geom -- any one to represent the join point.
    FROM cache_bounds a, cache_bounds b 
    WHERE a.gid>b.gid AND ST_DWithin(a.the_geom,b.the_geom,1)
    -- use ST_equals(a.the_geom,b.the_geom) if no tolerance.
    GROUP BY a.gid, a.the_geom
   ) as t
  ) as t2;

NOTA: usa cachés porque son más rápidos que las vistas. Use "EXPLAIN SELECT ..." para verificar el tiempo de CPU, puede llevar mucho tiempo.

Aquí los ciclos y las líneas continuas (del mismo color) se detectan como ncolors=1 puntos, y los pseudonodos por ncolors=2 puntos, entonces, tienes una capa con esos puntos.

Su tabla de "nodos buenos" está con los "puntos de delimitación" originales y sin "pseudo nodos".

CREATE VIEW vw_joinnodes_full AS
  SELECT b.*, j.ncolors
  FROM cache_joinnodes j INNER JOIN cache_bounds b 
       ON j.gid=b.gid;

CREATE TABLE cache_good_nodes AS
  SELECT *  
  FROM vw_joinnodes_full 
  WHERE ncolors=1 OR ncolors>2;

-- IF NEED ... CREATE VIEW vw_correct_linesegment AS ... 
    
respondido por el Peter Krauss 09.12.2012 - 15:30
7

Refractions Research ha realizado un limpiador de líneas herramienta que parece hacer lo que quieres.

  

Line Cleaner limpia las redes simplificando las complejas, cíclicas, muy   geometrías cortas y de longitud cero, y eliminación de pseudonodos y   vértices insignificantes. Más significativamente, en la fase de limpieza,   es capaz de garantizar que las coincidencias de características se puedan considerar automáticamente

El código fuente se puede encontrar en GitHub.

    
respondido por el R.K. 09.10.2012 - 19:47
2

Solución no gratuita: FME + MRF + SmartCleaner transformer

Solución gratuita GRASS v.clean (la forma más fácil de usarlo es el último QGIS 1.8.0 con herramientas GRASS) y otras herramientas de limpieza de topología

    
respondido por el simplexio 10.10.2012 - 09:42
2

Aquí hay pasos para encontrar sus pseudonodos utilizando OpenJump, un GIS gratuito.
QGIS y gvSIG tienen el complemento Sextante, por lo que estos mismos pasos deberían funcionar también,
  la unión espacial podría ser ligeramente diferente.
  Utilicé la versión 1.2 para las pruebas.

- guardar los puntos finales de línea
Caja de herramientas de Sextante, Topología, Extraer puntos finales de líneas - > endpt_0

- descompone tus lineas
Cuadro de herramientas Sextante, Herramientas para capas de líneas, Unir líneas adyacentes

- guardar los puntos finales de la línea Unplit
Caja de herramientas de Sextante, Topología, extraer puntos finales de línea - > endpt_1

- los puntos finales eliminados por "Unir líneas adyacentes" son pseudo nodos

Herramientas, Consultas, Consulta Espacial,
  Capa de origen "endpt_0"
  Relación "Intersects"
  Capa de máscara "endpt_1"

  habilitar o hacer clic en Complement Result

    
respondido por el klewis 08.12.2012 - 02:18
2

Solución para encontrar pseudonodos (y otras reglas de topología) disponibles en QGIS 1.9.0 master (2.0) - complemento "Topology Checker". Enlaces: complemento de Topology Checker en YouTube , complemento Topology Checker en GitHub

    
respondido por el HasT 26.07.2013 - 16:09
1

Con PostGIS, puede usar una versión modificada de la consulta para encontrar los peligros discutidos en este tema , ya que los pseudonodos son nodos que interceptan 2 cadenas de cadenas y cuelgan son nodos que interceptan 1 líneas de línea.

WITH nodes AS 
(SELECT ST_StartPoint(geom) AS pt FROM
linestring_table UNION ALL 
SELECT ST_EndPoint(geom) AS pt FROM
linestring_table) 
SELECT pt FROM nodes
GROUP BY pt HAVING count(*) = 2;
    
respondido por el Gauchoguitar10 02.10.2018 - 00:28

Lea otras preguntas en las etiquetas