- Herramientas de análisis topológico avanzado: geoprocesos topológicos
- Introducción
- Geoproceso "Invertir sentido de líneas"
- Geoproceso "Generalizar capa"
- Geoproceso "Convertir de capa de líneas/polígonos a capa de puntos"
- Geoproceso "Convertir capa de polígonos a capa de líneas sin duplicar geometría compartida"
- Geoproceso "Suavizar capa mediante curvas matemáticas"
- Geoproceso "Calcular triangulación de Delaunay/Poligonación de Thiessen-Voronoi"
- Geoproceso "Transformación de capas vectoriales mediante vectores de desplazamiento (Links)"
- Introducción
- Digitalizar un nuevo vector de error (punto de control) de la transformación
- Eliminar un vector de error existente
- Inhabilitar un vector de error para el cálculo de la transformación
- Usar como vector de error una capa del ToC de la vista
- Cálculo de la transformación
- Geoproceso "Build" (Construir capa de polígonos a partir de capa de líneas)
- Geoproceso "Clean" (Limpiar topología según el modelo de coberturas)
- Geoproceso "Aplicar correcciones topológicas en modo Batch"
Herramientas de análisis topológico avanzado: geoprocesos topológicos
Introducción
En ocasiones es necesario transformar todas las geometrías de una capa completa, para adecuarlas a un determinado tratamiento que se vaya a hacer de los datos. En estos casos las herramientas de edición topológica vistas en el apartado anterior no suelen ser suficientes, necesitándose geoprocesos que se apliquen sobre un subconjunto o todas las geometrías de las capas.
Los geoprocesos topológicos proporcionados por la extensión de topología y análisis vectorial avanzado de gvSIG son:
- Inversión del sentido de digitalización de líneas.
- Generalización de las geometrías de una capa.
- Conversión de una capa de polígonos a una capa de líneas (sin repetir las geometrías compartidas).
- Suavizar/Densificar líneas mediante curvas parametrizadas matemáticas.
- Calcular triangulación de Delaunay / Polígonos de Thiessen.
- Transformación de capas vectoriales mediante vectores de desplazamiento (link).
- BUILD: Construcción de topología según el modelo de coberturas de Arc/Info.
- CLEAN: Limpieza de topología según el modelo de coberturas de Arc/Info.
- Correcciones en BATCH: Aplicar correcciones topológicas por lotes.
En los siguientes apartados describiremos estos geoprocesos y cómo hacer uso de ellos en gvSIG.
Geoproceso "Invertir sentido de líneas"
Este geoproceso es de utilidad cuando se necesitan que las líneas de una capa vectorial tengan un sentido determinado, pero han sido digitalizadas justamente en el sentido opuesto. Un ejemplo claro de esto es la construcción de redes dirigidas, como redes hidrográficas, canalizaciones, etc. Para el cálculo de algoritmos sobre estas redes como conectividad, transmisición de flujo, etc. es necesario que las geometrías de las líneas que forman parte de la red tengan el mismo sentido que el flujo que representan (flujo de agua, etc.)
Para ejecutar el geoproceso, es necesario cargar previamente en una vista la capa vectorial de cuyas líneas deseamos invertir el orden de los puntos. Seguidamente, abrimos el gestor de geoprocesos vectoriales de gvSIG y localizamos el geoproceso "Invertir líneas", en el path "Geoprocesos/Conversion De Datos/Invertir Líneas".
Pulsando aceptar se nos muestra el siguiente diálogo, en el que habrá que seleccionar la capa vectorial cuyas líneas se desean invertir, la capa de salida (en formato .shp) y si se desea trabajar con todas las líneas originales o solamente con las seleccionadas.
Como resultado, tendremos una nueva capa de líneas en las que el orden de los puntos se habrá invertido.
Geoproceso "Generalizar capa"
La funcionalidad de este geoproceso es similar a la de la herramienta de edición topológica "Generalizar geometría", pero en vez de trabajar con una única geometría (o una selección de múltiples geometrías) permite trabajar con una capa vectorial completa. El geoproceso permite generalizar capas lineales según el algoritmo de Douglas-Peucker, o capas de polígonos según un algoritmo implementado por la librería JTS, basado en aplicar el algoritmo DP por separado a cada una de las partes (borde exterior, huecos) del polígono, verificando que el polígono resultante cumple las restricciones definidas por el antiguo modelo de geometrías SFS de OGC.
Para ejecutarlo, hay que abrir el gestor de geoprocesos de gvSIG y localizar el geoproceso en el path "Geoprocesos/Conversión de Datos/Generalización".
En la siguiente figura se nos muestra el diálogo asociado a este geoproceso. El usuario debe especificar la capa con la que desea trabajar, el tipo de generalización a aplicar (Douglas-Peuckert o generalización topológica de gvSIG), la tolerancia de Douglas-Peuckert a emplear y la capa resultante en formato .shp.
Geoproceso "Convertir de capa de líneas/polígonos a capa de puntos"
Este geoproceso permite convertir una capa de polígonos o líneas (dimensiones 1 o 2) en una capa de puntos (dimensión 0), lo cual es de utilidad como paso intermedio para determinados análisis. Como este geoproceso puede operar con cualquier capa vectorial de dimensión superior a 0, con independencia de que pertenezca o no a una topología, es necesario especificar una tolerancia de cluster, para que todos los puntos de la capa resultado que se encuentren a una distancia inferior a la de la tolerancia de cluster sean fusionados en uno solo.
Geoproceso "Convertir capa de polígonos a capa de líneas sin duplicar geometría compartida"
gvSIG ya permite convertir una capa de polígonos en una capa de líneas, a través de las extensiones vectoriales de SEXTANTE. No obstante, la implementación de SEXTANTE no tiene en cuenta la geometría compartida por dos polígonos adyacentes, de tal forma que esta geometría es repetida en la capa de líneas resultante.
El geoproceso "Convertir capa de polígonos a líneas sin duplicar geometría compartida" justamente mejora esta característica: no almacena dos veces la geometría compartida (líneas compartidas por dos polígonos adyacentes). En su lugar, almacena un solo registro con la geometría compartida que tendrá el FID (identificador) de los polígonos adyacentes que la comparten.
Podemos localizar el geoproceso en el gestor de geoprocesos de gvSIG, a través del path "Geoprocesos/Conversión de Datos/Polígonos a líneas".
Una vez ejecutado el geoproceso, podemos convertir que las líneas compartidas por dos polígonos no se han duplicado seleccionando una de ellas, y viendo el número de registros seleccionados en la tabla asociada a la capa de gvSIG.
Seleccionado una línea de la capa resultante, vemos que solo seleccionamos un registro en la tabla asociada. Si la geometría se huebiese duplicado aparecerían dos registros seleccionados.
Geoproceso "Suavizar capa mediante curvas matemáticas"
La funcionalidad de este geoproceso es similar a la de la herramienta de edición topológica "Suavizar línea mediante curva matemática", pero en vez de trabajar con una única geometría (o una selección de múltiples geometrías) permite trabajar con una capa vectorial completa.
Para ejecutar el geoproceso, es necesario abrir el gestor de geoprocesos de gvSIG y buscar el path "Geoprocesos/Conversión de datos/Suavizar capa", mostrándosenos el diálogo de la siguiente figura.
En este diálogo, además de seleccionar la capa de entrada y cual va a ser la capa de salida del geoproceso, se especificará el tipo de curva matemática al que queremos ajustar las geometrías de la capa de partida. Al tratar la herramienta de edición topológica "Suavizar geometría mediante curva matemática" ya enumeramos los tipos de curva posibles. En sucesivas versiones de este manual se incluirá como anexo una descripción de los tipos de curva.
Geoproceso "Calcular triangulación de Delaunay/Poligonación de Thiessen-Voronoi"
El cálculo de la triangulación de Delaunay y del diagrama de Voronoi/polígonos de Thiessen es una funcionalidad de gran utilidad para la realización de determinados análisis, como subdivisión del espacio en zonas de influencia, interpolación, generación de isolíneas, etc.
Escapa del alcance de este manual profundizar en esta estructura de datos topológica, o los algoritmos existentes para su cálculo. Se pueden consultar referencias como la Wikipedia [8] o el portal de matemáticas MathWorld [9].
En la extensión de Topología y análisis vectorial avanzado de gvSIG se ha incluído un geoproceso que permite calcular tanto la triangulación de Delaunay de una nube de puntos como su diagrama de Voronoi. Dentro de la propia extensión de Topología y análisis vectorial, este geoproceso ha servido como punto de partida para el geoproceso "Georreferenciación vectorial a partir de capa de links". Cuando veamos este geoproceso trataremos esto con más detalle.
La implementación del geoproceso dentro de la arquitectura interna de gvSIG ha seguido una aproximación extensible, basada en plugins.Esto permitirá añadir nuevos algoritmos además de los actualmente implementados para realizar el cálculo de la triangulación.
Otro aspecto novedoso de la implementación del geoproceso en gvSIG es la posibilidad de triangular cualquier geometría, con independencia de que sea o no puntual. El único requisito es que la capa con las geometrías a triangular sea capaz de proporcionar para cada una de sus geometrías un punto de inserción en la triangulación. Si se trabaja con capas normales de gvSIG, por defecto las geometrías lineales o polígonales serán insertadas en la triangulación a partir de su primer punto. No obstante, se pueden desarrollar plugins que permitan triangular geometrías a partir de otros puntos (punto medio para líneas, centroides para polígonos, etc.)
Para ejecutar el geoproceso, hay que abrir el gestor de geoprocesos de gvSIG y buscar el path "Geoprocesos/Análisis/Geometría Computacional/Voronoi".
Pulsando el botón "Abrir geoproceso" o haciendo doble click en el árbol de geoprocesos, se nos abre el diálogo asociado al geoproceso.
En este diálogo, al igual que con el resto de geoprocesos vectoriales de gvSIG, hay que especificar las capas de entrada y de resultado del geoproceso. Además, para el caso concreto del geoproceso "TIN/Voronoi" es necesario especificar:
- Si se desea calcular la triangulación de Delaunay o el diagrama de Voronoi.
- El algoritmo a aplicar. Tal y como hemos comentado anteriormente, este geoproceso permite realizar el cálculo empleando varios algoritmos. Actualmente los algoritmos implementados son: + Algoritmo incremental a partir de un triángulo envolvente (Chew [10]). + Algoritmo incremental a partir de un rectángulo envolvente.
En las siguientes figuras vemos los distintos resultados que podemos obtener en función de que se emplee un algoritmo u otro, y de que se calcule el TIN o el diagrama de Voronoi.
Geoproceso "Transformación de capas vectoriales mediante vectores de desplazamiento (Links)"
Introducción
El geoproceso ajuste espacial permite aplicar una transformación sobre los elementos geográficos de una capa vectorial. La funcionalidad proporcionada por este geoproceso es equivalente a la proporcionada por la extensión de georreferenciación de imágenes raster, pero para capas de información vectorial, viniendo a cubrir el vacío existente hasta el momento para capas vectoriales. Esta herramienta no solamente es útil para georreferenciar capas vectoriales, también es de utilidad para ajustar distintas capas, procedentes de distintas fuentes o elaboradas con diferentes requisitos de precisión, de tal forma que encajen los distintos elementos cartográficos.
Escapa del alcance del presente manual profundizar en los aspectos matemáticos subyacentes a la teoría de transformación de sistemas de coordenadas, remitiendo al lector a las referencias bibliográficas [11], [12], [13], [14] y [15], entre otros.
Actualmente admite los siguientes tipos de transformación:
- Proyectiva.
- Afín.
- De similaridad.
- Bursa Wolf .
- Rubber - sheet diferencial. Esta transformación consiste en cubrir completamente el espacio de la capa a transformar mediante una triangulación de Delaunay, y calcular una transformación afín para cada triángulo del TIN. Para cada punto de las geometrías de las capas a transformar se aplicará la transformación afín definida por el triángulo que lo contiene.
- Afín con restricciones.
Aunque el número de transformaciones soportadas puede ser extendido haciendo uso del API de gvSIG.
Para poder ejecutarse, además de las capas de entrada y de salida el geoproceso requiere un conjunto de puntos de control (links) que representan la posición de un punto antes de la transformación, y la posición que este mismo punto deberá tener como resultado de la misma.
En función del tipo de transformación será necesario un número mínimo de puntos de control. Lo habitual es proporcionar un número muy superior al mínimo, en cuyo caso gvSIG realizará un ajuste mínimo cuadrático de los parámetros de la transformación requerida. Como parámetro que refleje la bondad de la transformación se proporciona el error medio cuadrático (RMS) de cada punto de control individual, y el error medio cuadrático global de todos los puntos de control.
Para ejecutar el geoproceso, hay que abrir el gestor de geoprocesos vectoriales de gvSIG y buscar el path "Geoprocesos /Conversión de datos/Ajuste Espacial". La siguiente figura nos muestra el diálogo asociado al geoproceso de transformación de capas vectoriales.
Como podemos apreciar, el diálogo del geoproceso tiene una parte común a todos los geoprocesos,para especificar la capa a transformar y dónde se van a guardar los resultados, y una parte central específica del ajuste vectorial, en la que se pueden especificar los puntos de control de la transformación -denominados vectores de error- y el tipo de transformación a aplicar.
El primer paso para aplicar una transformación sobre una capa determinada es definir los "vectores de error" de la transformación, es decir, los puntos de control que nos indican la posición de un punto de la capa antes y después de la transformación. El geoproceso permite crear los puntos de control desde cero (a través de los botones "Añadir vector de error" y "Borrar vector de error") o recuperar una capa de vectores de error generada en una sesión de trabajo anterior (a través del botón "Cargar vectores de error"). Seguidamente veremos como funciona la extensión en cada uno de estos casos.
Digitalizar un nuevo vector de error (punto de control) de la transformación
Para añadir un nuevo vector de error, debemos pulsar el botón "Añadir botón de error". Tras pulsar el botón, el diálogo asociado al geoproceso se ocultará, para que podamos digitalizar sobre el mapa el vector de error. Puesto que la ventana del gestor de geoprocesos nos estorbará, podemos cerrarla pulsando el botón "Cerrar". No obstante, este paso no es necesario puesto que el gestor de geoprocesos no es un diálogo modal. Si en este momento pulsamos con el ratón sobre la vista del mapa, y arrastramos, veremos como se dibuja un vector cuyo segundo punto sigue el puntero del ratón.
En cualquier momento podemos cancelar la digitalización del vector de error, y volver al diálogo asociado al geoproceso pulsando la tecla "Esc". De igual forma, si queremos modificar el nivel de zoom para incrementar el grado de detalle de la cartografía de base para la digitalización, podemos pulsar la tecla "Ctrl", y en funcion de que pulsemos el botón izquierdo o el derecho del ratón haremos un "zoom más" o un "zoom menos".
Conforme vayamos digitalizando vectores de error, éstos se nos mostrarán en la tabla de puntos de control del diálogo del geoproceso. Para cada punto de control se muestran sus coordenadas de origen, sus coordenadas de destino, el error medio cuadrático de ese punto y un cuadro de selección que nos permitirá introducir o excluir el punto del cálculo de la transformación.
Además, en el TOC de la vista con la que estamos trabajando se crea una nueva capa, dentro de una agrupación, denominada "Sesión de Ajuste Espacial", junto con un número que identifica la capa de puntos de control (1, 2, 3, ... etc.). Esto es así porque podemos tener abiertas varias capas de punto de control simultáneamente.
Cada tipo de transformación requerirá de un número mínimo de puntos de control. Hasta que no se alcance ese mínimo, el diálogo no podrá mostrarnos el error médio cuadrático de la transformación definida por los puntos de control digitalizados (y marcados como activos). En este caso, en el texto reservado para el error medio cuadrático aparecerá el mensaje: "Número de puntos insuficiente".
Si existen suficientes puntos de control para resolver analíticamente la transformación, se mostrará el error medio cuadrático para cada vector de error y el error medio cuadrático para el global de la transformación (para los puntos de control definidos).
Cuanto mayor sea el número de vectores de error, y mayor superficie de la capa a transformar cubran, mayor será la bondad del ajuste. En este sentido, cabe destacar que transformaciones como la proyectiva o la afín son transformaciones globales, los parámetros de la transformación son los mismos para todos los puntos de la capa a transformar. El geoproceso hace un ajuste mínimo cuadrático, calculando los parámetros de la transformación que minimizan el error. En cambio, la transformación "Rubber-sheet diferencial" es una transformación local. Lo que hace es generar un TIN que cubra toda la superficie definida por los puntos de control digitalizados, tomando como punto de inserción para la triangulación el primer punto del vector de error. Para cada triángulo del TIN se calculará una transformación afin, que será la aplicar para todos los puntos de la capa a transformar que caigan dentro de este triángulo.
Eliminar un vector de error existente
Si detectamos que hemos cometido un error grosero al digitalizar un vector de error, de forma que éste siempre degradará la precisión de la transformación a aplicar, podemos eliminarlo de la lista de puntos de control seleccionándolo en la tabla y pulsando el botón "Borrar link".
Inhabilitar un vector de error para el cálculo de la transformación
Como hemos visto anteriormente, para cada uno de los vectores de error digitalizados el diálogo del geoproceso nos muestra su error medio cuadrático para el tipo de transformación seleccionada. Es recomendable, de cara a alcanzar la máxima bondad en el ajuste, digitalizar el máximo número posible de vectores de error. Posteriormente, y de forma previa a lanzar la ejecución del geoproceso de transformación, podemos probar a deshabilitar aquellos vectores de error que tienen un error medio cuadrático mayor, para ver si con esto se consigue reducir el error medio cuadrático global de la transformación.
Usar como vector de error una capa del ToC de la vista
Tal y como venimos viendo, para obtener la máxima bondad en el ajuste, de forma que la transformación a aplicar minimize el error de los puntos de control, es conveniente trabajar con el mayor número posible de puntos de control. La tarea de digitalizar puntos de control para ajustar fuentes cartográficas de distinta procedencia puede ser una tarea intensiva, que requiera de gran número de horas de trabajo. Para no perder este trabajo, se recomienda encarecidamente guardar la capa de vectores de error. Para ello, hay que seleccionar la capa de puntos de control en el TOC, e ir al menú "Capa->Exportar", seleccionando a continuación el formato de almacenamiento deseado.
Las capas de vectores de error se almacenan en memoria, así que si no se guardan explícitamente se perderán entre distintas sesiones de trabajo.
Si deseamos transformar una capa con este geoproceso, utilizando una capa de vectores de error ya existente, tan solo tenemos que haber cargado previamente esta capa en la vista. Si desde el diálogo del geoproceso pulsamos el botón "Cargar puntos de control", se nos mostrará un diálogo con una lista desplegable en la que aparecerán todas las capas de líneas cargadas en el TOC. Para aquellas capas que tengan líneas de más de dos puntos, solo se considerarán los dos primeros puntos de la línea. Tras pulsar aceptar, la tabla de puntos de control se rellenará con los vectores definidos en la capa seleccionada.
Cálculo de la transformación
Una vez que tenemos una capa de puntos de control que nos garantice una mínima bondad del ajuste, y una cobertura adecuada para la capa a transformar, estamos en condiciones de ejecutar el geoproceso. Cada vez que cambiemos el tipo de transformación en la lista desplegable de transformaciones, se recalcularán los parámetros de la misma y los errores medio cuadrático global e individual para cada punto.
En la siguiente figura aparece una capa antes de aplicar una transformación afín sobre ésta, los vectores de error/puntos de control que han permitido definir la transformación afín a aplicar, y la capa resultante de aplicar la transformación.
Como siempre que se trabaja con aplicaciones GIS, aquí entra en juego el conocimiento del analista SIG sobre los métodos más apropiados para cada tipo de situación: cuando aplicar una transformación Afín, cuando una transformación proyectiva, etc.
Geoproceso "Build" (Construir capa de polígonos a partir de capa de líneas)
Este geoproceso genera una capa de polígonos a partir de aquellos elementos de una capa de líneas que encierren superficies cerradas. Puesto que es posible que no todas las líneas de la capa de entrada participen en la formación de polígonos cerrados, opcionalmente se pueden construir capas auxiliares con líneas sueltas y con líneas colgantes, activando el check, de "Añadir geometrias de error".
Para ejecutar este geoproceso, hay que abrir el gestor de geoprocesos y buscar el path "Geoprocesos/Conversión de Datos/Build".
Si lo desea, puede ejecutar el geoproceso Clean desde el geoproceso Build, para ello active el check "Clean" y establezca las tolerancias fuzzy y dangle. Si activa el check "Clean", gvSIG ejecutará primero el Clean y luego el build, y la capa resultante del Clean será la capa a partir de la cual hará el Build. Si además de esto activa el check sobre "Añadir geometrías de error" añadira varias capas (lineas de corte, lineas colgantes, capa de nodos colgantes y pseudonodos...) con los errores.
Geoproceso "Clean" (Limpiar topología según el modelo de coberturas)
Este geoproceso corrige topológicamente las geometrías de una capa de líneas, de forma que esta capa pase a tener una topología de líneas correcta. Por "topología correcta de líneas", entendemos que las geometrías lineales de esta capa no se autointersecten, y que solamente intersecten con otras geometrías de líneas por sus puntos extremos (nodos). Si durante la ejecución del mismo se detecta que dos líneas intersectan en un punto que no es nodo (pseudonodo), se fragmentará estas geometrías originando cuatro nuevas líneas que sí intersectarán en sus extremos. Que la intersección de todas las líneas de una capa sea en puntos que son nodo (extremo de línea) es esencial para que funcionen correctamente algoritmos de análisis de redes como cálculo de rutas, etc.
El geoproceso sí permite la presencia de un tipo de pseudonodos: nodos de valencia par, es decir, puntos extremos de líneas que solo sirven para conectar dos líneas (en vez de tres).
Para ejecutar este geoproceso, hay que abrir el gestor de geoprocesos de gvSIG y buscar el path "Geoprocesos/Conversión de datos/Clean".
En el diálogo asociado, además de especificar las capas de entrada y de salida, tiene que establecer la tolerancia fuzzy (fusionará nodos que se encuentre dentro de esta tolenrancia) y la tolerancia dangle(elimina los nodos que estén dentro de esta tolerancia). Además puede elegir que se añadan las geometrias de error detectadas, y que ésta capa se cargue en el TOC de la vista activa. Así estará mucho más claro por qué el geoproceso ha subdividido determinadas geometrías de la capa original.
Geoproceso "Aplicar correcciones topológicas en modo Batch"
En la sección dedicada a la tabla de errores topológicos del diálogo de propiedades de una topología, vimos que si pulsábamos con el botón derecho del ratón sobre un error individual, se nos mostraba un menú desplegable en el que se daba la opción de aplicar una serie de correcciones automáticas. Todo error topológico tiene una corrección por defecto, así que si se desea aplicar esta corrección para todos los errores de un mismo tipo, se puede aplicar mediante el geoproceso "correcciones topológicas por lotes". Este geoproceso no se puede ejecutar desde el gestor de geoprocesos de gvSIG, sino que hay que ejecutarlo desde la pestaña de errores topológicos del diálogo de propiedades de una topología.
Partiendo de una topología cargada en el TOC, con errores topológicos, abrimos su diálogo de propiedades y activamos la pestaña de errores topológicos. Seguidamente, en la lista desplegable que nos muestra las reglas infringidas por las capas de la topología, es necesario seleccionar aquella regla cuyos incumplimientos queremos corregir por lotes. Este paso es necesario porque determinadas correcciones topológicas no son completamente automáticas, y necesitan la interacción con el usuario. Solo se podrán corregir por lotes aquellos errores cuyas reglas tengan como corrección por defecto una regla automática. Si el usuario selecciona una regla cuya correción por defecto no sea automática, se le mostrará un diálogo indicándoselo.
Otra diferencia con respecto de los geoprocesos normales es que el resultado de aplicar las correcciones en batch no se guardará en una nueva capa, sino en las capas originales de la topología (que se habrán puesto previamente en modo edición). Hasta que el usuario no termine la edición para cada capa modificada, estos cambios no se almacenarán de forma persistente.