-
LinArc: Estructuración topológica de líneas y conversiones entre archivos ARC/NOD y VEC
Acceso directo de la ayuda en Internet: LinArc
Acceso a la aplicación desde el menú: "Edición | Estructuración topológica | Arcos/Nodos"
Presentación y opciones
Esta aplicación hace la transformación entre ficheros vectoriales de líneas de tipo VEC y ficheros ARC y NOD del formato vectorial estructurado Top-MM. Ambos formatos son soportados por MiraMon. Los ficheros VEC son una ampliación de los ficheros VEC de Idrisi.
Dispone de las siguientes opciones:
De ARC a VEC (opción 1):
Convierte una familia ARC, de ficheros de arcos topológicamente estructurados, en un fichero VEC, que es un fichero ASCII con líneas que no presentan relaciones topológicas explícitas. El atributo del fichero resultante puede ser el identificador gráfico, un atributo constante o un campo de la base de datos del fichero ARC (A.REL y A.DBF). El programa soporta que exista más de un registro de la base de datos para cada elemento gráfico, y en este caso escribe tantos vectores coincidentes como registros existen para aquél elemento gráfico; cada vector tendrá uno de los múltiples atributos.
De VEC a ARC/NOD (opción 2):
Estructura topológicamente, creando nodos donde intersecan los arcos y conectando aquellos que están por debajo del límite de la tolerancia. Posteriormente guarda una familia topológica ARC/NOD. Los ficheros origen pueden ser un solo fichero VEC, un solo fichero ARC o un conjunto de ficheros VEC y ARC, explicitados en un fichero lista. Esta última posibilidad permite la superposición (overlay) de capas de arcos. Los campos de la base de datos originales se combinan en la base de datos de salida A.DBF, fusionándose en uno solo cuando tienen el mismo nombre (promocionándose a un tipo y tamaño compatible entre ellos) o restando como campos separados en caso de tener nombres diferentes. Los campos de las posibles bases de NODOS originales no se heredan en la de salida. Un fichero VEC se trata como una base de datos de un solo campo del tipo indicado en su fichero de documentación o con el nombre del campo que figura en la línea de comandos o en la lista.
De VEC a ARC/NOD (opción 3):
Convierte del formato VEC a una familia topológica ARC/NOD. Esta opción trabaja igual que la anterior a excepción que alberga ninguna fase de estructuración topológica. El único cambio en la geometría del fichero original es el siguiente: dados dos nodos a distancia inferior a la tolerancia, se considerarán el mismo nodo; la posición del segundo nodo coincidente se modificará igualándola a la del primero.
Fusiona (opción 4):
Fusiona parejas con sus atributos temáticos iguales de arcos que comparten un nodo y, a la vez, ningún otro arco no coincide con el nodo. Esta operación no realiza estructuración topológica (no parte arcos, ni realiza conexiones, etc). Suele ser conveniente al importar ficheros de otros formatos que presentan limitaciones en el número de vértices por objeto y se ven obligados a hacer más de un objeto por tira de vértices ya que al no tener en MiraMon prácticamente ninguna limitación con lo que respecta al número de vértices por arco, es conceptualmente mejor unir los arcos contiguos; obsérvese que una estructuración convencional podría generar intersecciones no deseadas (por ejemplo carreteras a dos niveles que pasasen a tener un cruce a nivel).
Análisis de distancias mínimas (opción 5):
Analiza las distancias mínimas locales entre arcos. Genera una tabla que puede ser representada en forma de histograma de frecuencias de distancias mínimas; útil para determinar los umbrales de tolerancia de acortamientos que hay que aplicar en la opción 2. También genera un fichero VEC de segmentos (líneas) que unen los puntos entre los diferentes arcos que están a distancias mínimas comprendidas entre UmbralMínimo y UmbralMáximo. Este fichero permite ver representados todos los movimientos que se producirán entre los arcos al aplicar la opción 2 y determinar el porcentaje de errores resueltos correctamente de manera automática.
Los ficheros vectoriales de líneas de tipo VEC son de ficheros ASCII que no presentan topología (como mínimo ésta no está explicitada) y no están vinculados a bases de datos (cada objeto gráfico soporta un solo atributo). Los acompaña un fichero de documentación (DVC).
Los ficheros estructurados Top-MM de tipo ARC y NOD son ficheros binarios, habitualmente con topología arco-nodo y que están vinculados a una base de datos relacional (A.REL, A.DBF, N.REL y N.DBF). En la versión 3.x los acompaña un fichero de documentación (DVA y DVN), el cual queda integrado en el correspondiente fichero REL en las versiones posteriores.
Si tenemos una familia de vectores estructurados como la antes descrita, se puede convertir al formato VEC de líneas con la opción 1 de la aplicación LinArc. Esto es útil para digitalizar y cuando se quiere el fichero en un formato de texto.
Hasta la versión 3.x de MiraMon, la digitalización de líneas se realiza sobre ficheros no estructurados. La estructuración topológica de arcos y nodos posterior a la digitalización es un proceso tan complejo que resulta casi imposible llevar a cabo manualmente, tarea que realiza la opción 2 de la aplicación LinArc.
A veces un fichero VEC de líneas puede contener arcos y nodos de forma implícita, por ejemplo cuando proviene de una conversión de una familia de ficheros arco-nodo a VEC a través de LinArc con la opción 1. En este caso podemos indicar a LinArc, a través de la opción 3, que no realice los cálculos de estructuración topológica, lo cual es mucho más rápido. Esta opción sólo puede utilizarse cuando la estructura topológica no es esencial, como sucede a veces en las capas de líneas como las curvas de nivel. En una capa sobre la que es necesario construir polígonos solo se puede aplicar esta opción cuando el fichero VEC contiene estructura arco-nodo implícita, ya que las relaciones topológicas son esenciales para poder ciclar polígonos. El análisis de redes es otro caso donde la topología es esencial.
La opción 2 de la aplicación soporta un fichero VEC de polígonos como fichero de entrada, pero la opción 3 no. En el primer caso, los contornos de los polígonos se tratan simplemente como líneas.
La aplicación crea en la base de datos el campo LONG_ARC, que indica la longitud de cada arco. Los valores de los campo LONG_ARC se calculan sobre las coordenadas de la proyección (del mapa) y, por tanto, no dan distancias sobre la Tierra sino sobre el mapa, calculadas como lo haría normalmente un programa de dibujo asistido por ordenador (CAD). En proyecciones como la UTM, estos valores son suficientemente precisos para la mayor parte de propósitos. Por ejemplo, dentro de un huso UTM, una distancia sobre el mapa puede diferir de la distancia sobre el elipsoide terrestre en un factor entre 0.9996 y 1.0009811009).
Cuando la proyección cartográfica es conocida (vea listado de proyecciones conocidas), además del campo LONG_ARC, la aplicación también crea el campo LONG_ARCE, que indica la longitud real de cada arco calculada sobre el elipsoide terrestre con criterios geodésicos precisos. Este nuevo campo resulta especialmente indicado en proyecciones cartográficas en las que los cálculos sobre el mapa dan valores claramente diferentes a los reales sobre la superficie terrestre (por ejemplo, la proyección Mercator) o en proyecciones en mapas en los que la diferencia es pequeña pero aparecen líneas largas que pueden acumular errores importantes.
Según la proyección cartográfica utilizada la aplicación declara visible LONG_ARC o LONG_ARCE y deja oculto el otro campo, según sea el más comúnmente usado como medida de longitud en aquella proyección. Puede cambiar estos criterios de visibilidad en el fichero REL.
En las opciones 2 y 3, la aplicación elimina las coordenadas repetidas (sólo se conserva una). Por otro lado, las entidades formadas por un solo vértice son eliminadas.
Tipos de tolerancia y su aplicación en la aplicación LinArc.
LinArc define 6 tipos de tolerancias diferentes para 6 casos que se pueden encontrar en la estructuración de un fichero vectorial. Esta sección explica a qué situación geométrica corresponde cada tipo de tolerancia y cómo se aplica dentro de la aplicación LinArc (sólo en la opción 2).
Muy importante: todos estos tipos de tolerancias son habitualmente innecesarias si se digitaliza utilizando correctamente las herramientas de conexión de MiraMon. Sin embargo, cuando un fichero ha sido digitalizado sin seguir estas normas básicas de conexión, o bien ha estado generado conotro software que no conecta correctamente los elementos, puede ser necesario aplicar estas tolerancias.
- Precisión (Tolerancia borrosa/Fuzzy tolerance) [Prec]
- Mínima distancia entre vértices. Tiene que ser un valor muy pequeño, prácticamente infinitesimal.
- Tolerancia de pseudogeneralización. [T_Psgen]
- Tolerancia para eliminar vértices situados sobre un mismo trazado rectilíneo (fig 1.a). (Es una definición local en cada arco)
- Tolerancia entre arcos(Arc snap tolerance) [T_Arc]
- Distancia que un vértice se puede mover (fig 1.b1) o un segmento se puede doblar, generándose un nuevo vértice (fig 1.b2) para conectar con otro (implica una relación entre un arco y los otros).
- Tolerancia de acortamiento (fig 1.c) (Arc snap tolerance) [T_Esc]
- Distancia que se puede mover un nodo final para conectarse con un arco. El movimiento del nodo efectúa de forma que el desplazamiento sea mínimo. (Implica una relación entre un nodo final y los arcos.)
- Tolerancia entre nodos (fig 1.d) (Node snap tolerance) [T_Nod]
- Distancia mínima entre dos nodos. Es la distancia a la que un nodo absorbe o es absorbido por sus vecinos. (Implica una relación entre un nodo y los otros.)
- Tolerancia de alargamiento (fig 1.e) (Dangle tolerance) [T_Allg]
- Los arcos que son más cortos que esta tolerancia serán eliminados si presentan uno o dos nodos finales. (Es una definición local a un solo arco)

Fig 1. La figura muestra los vectores originales en negro y el resultado del proceso de estructuración topológica en rojo.
- La tolerancia de pseudogeneralització reduce el número de vértices de los vectores, eliminando alineaciones.
- La tolerancia entre arcos tiende a conectar vectores que están próximos. El vértice del vector digitalizado con posterioridad se mueve para conectarse sobre el otro (1). El segmento superior se dobla para conectarse al vértice próximo digitalizado con anterioridad (2).
- La tolerancia de acortadas conecta un vértice final que ha quedado cerca de otro arco. En la figura el vector superior ha sido digitalizado antes que el otro.
- La tolerancia entre nodos mueve el nodo inferior para conectarlo con el superior, que había sido generado anteriormente.
- La tolerancia de alargadas hace desaparecer el trozo de vector que sobresale de otro vector sobre el que se quería conectar.
|

Fig 2. Cuando tres objetos están a una distancia inferior a la tolerancia de acortadas, no se busca un trazado intermedio entre ellos, sino que el objeto que ha sido digitalizado primero permanece inmóvil (en la figura el superior) mientras que el que ha sido digitalizado en segundo lugar (el de la izquierda) se mueve hasta encontrarse con el primero, y el tercero, se mueve hasta conectar con los otros dos en el mismo punto. |
¿Cómo se pueden definir todas estas tolerancias?
LinArc 2 F_Ori F_Arc T_Arc DescriptorCamp NomCamp Prec T_Psgen T_Esc T_Nod T_Allg
Para garantizar un resultado óptimo, es muy recomendable seguir las indicaciones siguientes:
- Prec <= T_Psgen <= T_Acor <= T_Nod <= T_Alarg
- Prec T_Psgen infinitesimal (a la práctica ponga 0).
Para la eliminación de nodos finales, se recomienda utilizar:
- Prec=T_Psgen=T_Arc=T_Nod=0
- T_Esc con un valor moderado y T_Allg de valor alto.
En la sintaxis simplificada, el parámetro tolerancia es equivalente a las tolerancias ampliadas siguientes:
- T_Nod=T_Acor=T_Alarg=Tolerancia
- Prec=T_Psgen=1e-5
Si en alguna de las tolerancias se indica 0 (excepto en la precisión), se elimina el procesado de la aplicación referente a aquella tolerancia, lo que resulta en una ejecución más rápida. Esto se recomienda en caso de saber que el fichero o ficheros a procesar no presentan algún determinado tipo de problema. En el caso de la precisión, 0 resulta en 1e-5. Si en la notación simplificada se indica tolerancia=0 el resultado es:
- T_Arc=T_Nod=T_Esc=T_Allg=0
- Prec=T_Psgen=1e-5
IMPORTANTE: Habitualmente, estas tolerancias bastan en ficheros digitalizados en otros softwares o digitalizados en MiraMon sin utilizar adecuadamente las herramientas de conexión. Cuando se digitaliza correctamente con MiraMon una tolerancia simplificada y de valor 0 es la elección adecuada, resultando en procesos rápidos y sin problemas:
LinArc 2 F_Vec F_Arc 0
Formato del fichero lista (para estructuración de diversos ficheros a la vez).
- Formato simple
Este formato es una lista de nombres de ficheros escritos uno tras otro separados por retornos de carro o espacios (si algún nombre de fichero contiene espacios es necesario especificarlo entre comillas dobles). Esta posibilidad es simple pero no permite el nivel de control ni las posibilidades que permite el segundo formato. Ejemplo de formato simple
primer.arc
segon.vec
tercer.vec
Formato avanzado
Este formato se basa en el formato INI del fichero de configuración de Windows o en los formatos PAR de MiraMon. Está constituido por una sección [FITXERS] i diversas secciones [FITXER_#] (#representa un valor numérico). La sección [FITXERS] sólo tiene una clave 'Llista' que es igual a los valores numéricos '#' de cada una de las secciones [FITXER_#] separados por una coma. La sección [FITXER_#] tiene 5 claves posibles:
- 'NomFitxer' es el nombre de un fichero VEC (extensión optativa) o ARC (extensión obligatoria). Debe estar siempre presente.
- 'NomCamp' es el nombre del campo de la base de datos (A.DBF) a crear donde se escribirá el atributo del fichero VEC (obligatorio para VEC's).
- 'DescriptorCamp' es el descriptor del 'NomCamp' anterior (obligatorio para VEC's).
- 'Marc' indica si el fichero actúa como marco de corte. Si vale 1 una vez cortados se ignoran todos los vectores de otros ficheros que queden fuera del marco. En este caso, 'NomFitxer' debe ser un fichero VEC de polígonos. Por defecto vale 0.
- 'Incloure' indica si es necesario incluir este marco en el fichero resultado. En caso de valer 0, el fichero se usa como límite de corte pero sus elementos no se incluyen en la salida. Por defecto vale 1.
Las secciones [FITXER_#] no precisan estar ordenadas (el orden se establece en la clave 'Llista') o pueden no estar presente en la clave 'Llista' y en este caso los ficheros no se usarán (cuidado, pues, de no olvidar la inclusión en la llista).
En el siguiente ejemplo presentamos un fichero lista, con un fichero VEC y un fichero ARC. El fichero ARC se procesará antes que el VEC. Ejemplo de formato avanzado
[FITXERS]
Llista=2,1,3
[FITXER_1]
NomFitxer=segundo.vec
NomCamp=ATRIBUTO
DescriptorCamp=Atributo
[FITXER_2]
NomFitxer=primero.arc
[FITXER_3]
NomFitxer=marco.vec
NomCamp=ATRIBUTO
DescriptorCamp=Atributo
Marc=1
Incloure=1
Si la clave Llista de [FITXERS] supera los 255 caracteres, es posible escribir la lista en diversas líneas haciendo:
[FITXERS]
Llista=1,2,3,4,5,6,7,8,9,10,11,12
Llista2=13,14,15,16,17,18,19,20,21,22,23,24
Llista3=25,26
...

Caja de diálogo de la aplicación
|
Caja de diálogo de LinArc. |

Sintaxis
Sintaxis:
- LinArc 1 F_Arco_in F_Vec [NDigitos] [/TAULA] [/CAMP] [/SI_EN_BLANC] [/ATRIBUT_CONSTANT] [/ALCADA] [/AJUST_ENV]
- LinArc 2 F_Ori F_Arco_out T_Arco [DescriptorCampo] [NombreCampo] [Prec] [T_Psgen] [T_Esc] [T_Nod] [T_Allg] [/AJUST_ENV] [/ALGORISME]
- LinArc 3 F_Ori F_Arco_out T_Arco [DescriptorCampo] [NombreCampo] [Prec] [T_Psgen] [T_Esc] [T_Nod] [T_Allg] [/AJUST_ENV]
- LinArc 4 F_Arco_in F_Arco_out
- LinArc 5 F_Ori F_Resultado UmbralMinimo UmbralMaximo PuntosDecada
Opciones:
- 1:
Convierte un fichero ARC a un fichero VEC.
- 2:
Convierte un fichero VEC o ARC/NOD a una familia ARCO/NODO mediante estructuración topológica. Admite una sintaxis ampliada para matizar las diferentes tolerancias.
- 3:
Convierte un fichero VEC con relaciones topológicas implícitas a una familia ARCO/NODO.
- 4:
Fusiona parejas de arcos con sus atributos temáticos iguales que comparten un nodo y, a la vez, ningún otro arco coincide con el nodo.
- 5:
Análisis de distancias mínimas entre vectores. Las distancias estudiadas están comprendidas en el intervalo [UmbralMínimo,UmbralMáximo] y el histograma define PuntosDécada intervalos.
Parámetros:
- F_Arco_in
(Fichero Arc -
Parámetro de entrada): Es el nombre de un fichero ARC de entrada.
- F_Vec
(Fichero VEC -
Parámetro de salida): Es el nombre de un fichero VEC.
- NDigitos
(Numero de dígitos -
Parámetro de entrada): Es el número de dígitos decimales usados para escribir las coordenadas; por defecto es 6.
- F_Ori
(Fichero Origen -
Parámetro de entrada): Es el nombre de un fichero VEC (con o sin extensión), de un fichero ARC indicando su extensión o de un fichero lista (con extensión diferente de VEC o ARC) descrito más abajo. En este último caso los parámetros DescriptorCampo y NombreCampo son ignorados.
- F_Arco_out
(Fitxero Arc -
Parámetro de salida): Es el nombre de un fichero ARC de salida
- T_Arco
(Tolerancia Entre Arcos -
Parámetro de entrada): Distancia que un vértice se mueve (fig 1.b1) o un segmento se puede doblar, generándose un nuevo vértice (fig 2.b2) para conectar con otro (implica una relación entre un arco y los otros).
- DescriptorCampo
(Descriptor del campo -
Parámetro de entrada): Es una cadena de texto (hace falta poner cometas si lleva espacio) que describe el campo Atributo (máximo 40 carácteres); per defecto esta vacío.
- NombreCampo
(Nombre del campo -
Parámetro de entrada): Es el nombre del campo de la base de datos (A.DBF) a crear donde se escribirá el atributo del fichero VEC (obligatorio para VEC's).
- Prec
(Tolerancia de Precisión -
Parámetro de entrada): Mínima distancia entre vértices. Ha de ser un valor muy pequeño, prácticamente infinitesimal.
- T_Psgen
(Tolerancia de pseudogeneralización -
Parámetro de entrada): Tolerancia para eliminar vértices situados sobre un mismo trazado rectilíneo. (Es una definición local en cada arco)
- T_Esc
(Tolerancia de acortamiento (Arc snap tolerance) -
Parámetro de entrada): Distancia que un arco se puede alargar para conectar con un otro. (Implica una relación entre un arco y los otros)
- T_Nod
(Tolerancia entre nodos -
Parámetro de entrada): Distancia mínima entre dos nodos. Es la distancia a la que un nodo absorbe o es absorbido por sus vecinos. (Implica una relación entre un nodo y los otros.)
- T_Allg
(Tolerancia de alargamiento -
Parámetro de entrada): Los arcos que son más cortos que esta tolerancia serán eliminados si presentan uno o dos nodos finales. (Es una definición local a un solo arco)
- F_Resultado
(Fichero Resultado -
Parámetro de salida): Es el nombre de la tabla CSV (texto separado por ";") que contiene el histograma de distancias y del fichero VEC de distancias.
- UmbralMinimo
(Umbral Mínimo -
Parámetro de entrada): Umbral Mínimo en el análisis de distancias mínimas.
- UmbralMaximo
(Umbral Máximo -
Parámetro de entrada): Umbral Máximo en el análisis de distáncias mínimas.
- PuntosDecada
(Puntos Década -
Parámetro de entrada): Puntos Década.
Modificadores:
/TAULA=
(Nombre de la tabla)
Indica la tabla de la base de datos que se exporta a formato VEC. Para saber más sobre los valores de estos parámetros siga las consideraciones del documento de sintaxis general. (Parámetro de entrada) /CAMP=
(Nombre de campo)
Indica el camp de la base de datos que se exporta a formato VEC. Para saber más sobre los valores de estos parámetros siga las consideraciones del documento de sintaxis general. (Parámetro de entrada) /SI_EN_BLANC=
(Campo en blanco)
Indica el comportamiento que tendrá la exportación a VEC cuando no exista atributo en la base de datos (campo en blanco). Puede valer "CONSTANT" para un valor constante, "ID_GRAFIC" para identificador gráfico o "IGNORAR" para ignorar los vectores sin atributo (valor por defecto). (Parámetro de entrada) /ATRIBUT_CONSTANT=
(Valor Constante)
Indica la constante que quiere exportar a formato VEC como atributo de los objetos. Si se usa en combinación con /TAULA=, /CAMP= y /SI_EN_BLANC=CONSTANT es el atributo que se usará cuando no haya datos (campo en blanco). (Parámetro de entrada) /ALCADA=
(Altura)
Indica cual de las posibles alturas se escribe en el VEC. Para saber más sobre los valores de este parámetro siga las consideraciones del documento de sintaxis general. (Parámetro de entrada) /ALGORISME=
(Algoritmo de estructuración topológica)
Este modificador sirve para determinar el algoritmo que la aplicación utilizará para detectar las posibles intersecciones entre los segmentos de los elementos lineales y de los bordes de polígonos durante la estructuración topológica. Véase Algoritmos disponibles para la estructuración topológica (/ALGORISME) para una explicación más detallada y sugerencias sobre situaciones en las que es más adecuado uno u otro algoritmo.- ESCOMBRATGE (barrido): Basado en la intersección de segmentos de Bentley-Ottmann. Para líneas que intersecan en nuevos vértices.
- DIRECTE (directo): Basado en la exploración de las intersecciones de cada segmento contra todos los demás. Para polígonos explícitos o para capas con topología implícita (intersecciones ya convertidas en vértices).
- AUTOMATIC (automático): El programa decide automáticamente cuál de los dos algoritmos se utilizará. En ocasiones resulta más lento que el más rápido de los dos anteriores.
(Parámetro de entrada) /AJUST_ENV (Ajustar envolvente) Ajusta el envolvente documentado en los metadatos al mínimo rectángulo (opciones 1, 2,3). (Parámetro de entrada)
Esta aplicación soporta formato REL v.4 y formato ARC v. 1.1 con o sin coordenadas 3D.

Idrisi es un programario © de J.Ronald Eastman and Clark University.
MiraMon® es un programario de Xavier Pons.