-
LinArc: Estructuració topològica de línies i conversions entre fitxers ARC/NOD i VEC
Accés directe de l'ajuda a Internet: LinArc
Accés a l'aplicació des del menú: "Edició | Estructuració topològica | Arcs/Nodes"
Presentació i opcions
Aquesta aplicació permet transformar entre fitxers vectorials de línies de tipus VEC i fitxers ARC i NOD del format vectorial estructurat Top-MM. Ambdós formats són suportats pel MiraMon. Els fitxers VEC són un superconjunt dels fitxers VEC ASCII d'Idrisi.
Disposa de les següents opcions:
D'ARC a VEC (opció 1):
Converteix una família ARC, de fitxers d'arcs topològicament estructurats, a un fitxer VEC, que és un fitxer ASCII amb línies que no presenten relacions topològiques explícites. L'atribut del fitxer resultant pot ser l'identificador gràfic, un atribut constant o un camp de la base de dades del fitxer ARC (A.REL i A.DBF). El programa suporta que existeixi més d'un registre de la base de dades per cada element gràfic, i en aquest cas escriu tants vectors coincidents com registres existeixen per a aquell element gràfic; cada vector tindrà un dels múltiples atributs.
De VEC/ARC a ARC/NOD (opció 2):
Estructura topològicament, creant nodes on intersequen els arcs i connectant aquells que estan per sota del límit de la tolerància. Posteriorment desa una família topològica ARC/NOD. Els fitxers origen poden ser un sol fitxer VEC, un sol fitxer ARC o un conjunt de fitxers VEC i ARC, explicitats en una fitxer llista. Aquesta darrera possibilitat permet la superposició (overlay) de capes d'arcs. Els camps de la base de dades originals es combinen en la taula de sortida A.dbf, fusionant-se en un de sol quan tenen el mateix nom (promocionant-se a un tipus i mida compatible entre ells) o restant com a camps separats en cas de tenir noms diferents. Els camps de les possibles bases de NODES originals no s'hereten a la de sortida. Un fitxer VEC és tractat com una base de dades d'un sol camp del tipus indicat en el seu fitxer de documentació o amb el nom del camp que figura en la línia de comanda o en la llista.
De VEC a ARC/NOD (opció 3):
Converteix del format VEC a una família topològica ARC/NOD. Aquesta opció treballa igual que l'anterior excepte que no té lloc cap fase d'estructuració topològica. L'únic canvi en la geometria del fitxer original és el següent: donats dos nodes a distància inferior a la tolerància, es consideraran el mateix node; la posició del segon node coincident es modificarà igualant-la a la del primer.
Fusiona (opció 4):
Fusiona parelles d'arcs amb els seus atributs temàtics iguals que comparteixen un node i, alhora, cap més arc no coincideix en el node. Aquesta operació no realitza cap estructuració topològica (no parteix arcs, ni realitza connexions, etc). Sol ser convenient en importar fitxers d'altres formats que presenten limitacions en el nombre de vèrtexs per objecte i es veuen obligats a fer més d'un objecte per tira de vèrtexs ja que en no haver-hi en MiraMon pràcticament cap limitació pel que fa al nombre de vèrtexs per arc, és conceptualment millor unir els arcs contigus; observeu que una estructuració convencional podria generar interseccions no desitjades (per exemple carreteres a dos nivells que passessin a tenir un encreuament a nivell).
Anáslisi de distàncies mínimes (opció 5):
Analitza les distàncies mínimes locals entre arcs. Genera una taula que pot ser representada en forma d'histograma de freqüències de distàncies mínimes; útil per determinar els llindars de tolerància d'arcs que cal aplicar en l'opció 2. També genera un fitxer VEC de segments (línies) que uneixen els punts entre els diferents arcs que estan a distàncies mínimes compreses entre LlindarMinim i LlindarMaxim. Aquest fitxer permet veure representats tots el moviments que es produiran entre els arcs en aplicar l'opció 2 i determinar el percentatge d'errors resolts correctament de manera automàtica.
Els fitxers vectorials de línies de tipus VEC són fitxers ASCII que no presenten topologia (com a mínim aquesta no està explicitada) i no estan vinculats a bases de dades (cada objecte gràfic suporta un sol atribut). Els acompanya un fitxer de documentació (DVC).
Els fitxers estructurats Top-MM de tipus ARC i NOD són fitxers binaris, habitualment amb topologia arc-node i que estan vinculats a una base de dades relacional (A.REL, A.DBF, N.REL i N.DBF). En la versió 3.x els acompanya un fitxer de documentació (DVA i DVN), el qual queda integrat en el corresponent fitxer REL en les versions posteriors.
Si tenim una família de vectors estructurats com la descrita abans, es pot convertir al format VEC de línies amb l'opció 1 de l'aplicació LinArc. Això és necessari per a poder modificar el fitxer gràfic des del MiraMon o quan es vol el fitxer en un format de text.
Fins a la versió 3.x del MiraMon, la digitalització de línies es realitza sobre fitxers no estructurats (VEC). L'estructuració topològica d'arcs i nodes posterior a la digitalització és un procés tan complex que resulta quasi impossible de fer-la manualment, tasca que duu a terme l'opció 2 de l'aplicació LinArc.
De vegades un fitxer VEC de línies pot contenir arcs i nodes de forma implícita, per exemple quan prové d'una conversió d'una família de fitxers arc-node cap a VEC a través de LinArc amb l'opció 1. En aquest cas podem indicar a LinArc, a través de l'opció 3, que no realitzi els càlculs d'estructuració topològica per generar els fitxers ARC/NOD, la qual cosa és molt més ràpida. Aquesta opció només pot utilitzar-se quan la estructura topològica no és essencial, com passa a vegades en les capes de línies com p.ex. en les corbes de nivell. En una capa sobre la qual s'hauran de construir polígons només es pot aplicar aquesta opció quan el fitxer VEC conté estructura arc-node implícita, ja que les relacions topològiques són essencials per poder ciclar polígons. L'anàlisi de xarxes és un altre cas on la topologia és essencial.
L'opció 2 de l'aplicació suporta un fitxer VEC de polígons com a fitxer d'entrada, però l'opció 3 no. En el primer cas, les vores dels polígons es tracten simplement com a línies.
L'aplicació crea a la base de dades el camp LONG_ARC, que indica la longitud de cada arc. Els valors del camp LONG_ARC es calculen sobre les coordenades de la projecció (del mapa) i, per tant, no donen distàncies sobre la Terra sinó sobre el mapa, calculades com ho faria normalment un programa de dibuix assistit per ordinador (CAD). En projeccions com la UTM, aquestes distàncies són suficientment precises per a la major part de propòsits. Per exemple, dintre d'un fus UTM, una distància sobre el mapa pot arribar a diferir de la distància sobre l'el·lipsoide terrestre en un factor entre 0.9996 i 1.0009811009).
Quan la projecció cartogràfica és coneguda (vegeu llistat de projeccions conegudes), a més del camp LONG_ARC, l'aplicació també crea el camp LONG_ARCE, que indica la longitud real de cada arc calculada sobre l'el·lipsoide terrestre amb criteris geodèsics acurats. Aquest nou camp resulta especialment indicat en projeccions cartogràfiques en què el càlcul sobre el mapa dóna valors clarament diferents dels reals sobre la superfície terrestre (per exemple, la projecció Mercator) o en projeccions en mapes en què la diferència és petita, però on apareixen llargues línies que poden acumular errors importants.
Segons la projecció cartogràfica utilitzada, l'aplicació declara visible LONG_ARC o LONG_ARCE i deixa ocult l'altre camp, segons el més comunament usat com a mesura de longitud en aquella projecció. Podeu canviar aquests criteris de visibilitat en el fitxer REL.
En les opcions 2 i 3, l'aplicació elimina les coordenades repetides (només se'n conserva una). Per altra banda, les entitats formades per un sol vèrtex són eliminades.
Tipus de tolerància i la seva aplicació en l'aplicació LinArc, opció 2.
LinArc defineix 6 tipus de toleràncies diferents per 6 casos que hom pot trobar en l'estructuració d'un fitxer vectorial. Aquesta secció explica a quina situació geomètrica correspon cada tipus de tolerància i com s'aplica dins l'aplicació LinArc (només en l'opció 2).
Molt important: tots aquest tipus de toleràncies són habitualment innecessàries si hom digitalitza utilitzant correctament les eines de connexió del MiraMon. Tanmateix, quan un fitxer ha estat digitalitzat sense seguir aquestes normes bàsiques de connexió, o bé ha estat generat amb un altre software que no connecta correctament els elements, pot ser necessari aplicar aquestes toleràncies.
- Precisió (Tolerància borrosa/Fuzzy tolerance) [Prec]
- Mínima distància entre vèrtexs. Ha de ser un valor molt petit, pràcticament infinitesimal.
- Tolerància de pseudogeneralització. [T_Psgen]
- Tolerància per eliminar vèrtexs situats sobre un mateix traçat rectilini (fig 1.a). (És una definició local a cada arc.)
- Tolerància entre arcs(Arc snap tolerance) [T_Arc]
- Distància que un vèrtex es pot moure (fig 1.b1) o un segment es pot doblegar, generant-se un nou vèrtex (fig 1.b2) per connectar amb un altre. (Implica una relació entre un arc i els altres.)
- Tolerància d'escurçades (fig 1.c)(Undershoot tolerance) [T_Esc]
- Distància que es pot moure un node final per connectar-se amb un arc. El moviment del node s'efectua de forma que el desplaçament sigui mínim. (Implica una relació entre un node final i els arcs.)
- Tolerància entre nodes (fig 1.d) (Node snap tolerance) [T_Nod]
- Distància mínima entre dos nodes. És la distància en què un node absorbeix o és absorbit pels seus nodes veïns. (Implica una relació entre un node i els altres.)
- Tolerància d'allargades (fig 1.e) (Dangle tolerance) [T_Allg]
- Els arcs que són més curts que aquesta tolerància seran eliminats si presenten un o dos nodes finals. (És una definició local a un sol arc.)

Fig 1. La figura mostra els vectors originals en negre i el resultat del procés d'estructuració topològica en vermell.
- La tolerància de pseudogeneralització redueix el nombre de vèrtexs dels vectors, eliminant alineacions.
- La tolerància entre arcs tendeix a connectar vectors que estan pròxims. El vèrtex del vector digitalitzat amb posterioritat es mou per connectar-se sobre l'altre (1). El segment superior es doblega per connectar-se al vèrtex proper digitalitzat amb anterioritat (2).
- La tolerància d'escurçades connecta un vèrtex final que ha quedat prop d'un altre arc. En la figura el vector superior ha estat digitalitzat abans que l'altre.
- La tolerància entre nodes mou el node inferior per connectar-lo amb el superior, que havia estat generat anteriorment.
- La tolerància d'allargades fa desaparèixer el tros de vector que sobresurt d'un altre vector sobre el qual es volia connectar.
|

Fig 2. Quan tres objectes estan a una distància inferior a la tolerància d'escurçades, no es busca un traçat intermedi entre ells, sinó que l'objecte que ha estat digitalitzat primer roman immòbil (en la figura el superior) mentre que el que ha estat digitalitzat en segon lloc (el de l'esquerra) es mou fins a trobar-se amb el primer, i el tercer, es mou fins a connectar amb els altres dos en el mateix punt. |
Com es poden definir totes aquestes toleràncies?
LinArc 2 F_Ori F_Arc T_Arc DescriptorCamp NomCamp Prec T_Psgen T_Esc T_Nod T_Allg
Per tal de garantir un òptim resultat, és molt recomanable seguir les següents indicacions:
- Prec <= T_Psgen <= T_Arc <= T_Esc <= T_Nod <=T_Allg
- Prec i T_Psgen infinitessimal (a la pràctica poseu-hi 0).
Per a l'eliminació de nodes finals, es recomana fer servir:
- Prec=T_Psgen=T_Arc=T_Nod=0
- T_Esc amb valor moderat i T_Allg de valor alt.
En la sintaxi simplificada, el paràmetre tolerància és equivalent a les toleràncies ampliades següents:
- T_Arc=T_Nod=T_Esc=T_Allg=tolerància
- Prec=T_Psgen=1e-5
Si en alguna de les toleràncies s'indica 0 (excepte en la precisió), s'elimina el processat de l'aplicació referent a aquella tolerància, el que resulta en una execució més ràpida. Això es recomana en el cas de saber que el fitxer o fitxers a processar no presenten algun determinat tipus de problema. En el cas de la precisió, 0 resulta en 1e-5. Si en la notació simplificada s'indica tolerància=0 el resultat és:
- T_Arc=T_Nod=T_Esc=T_Allg=0
- Prec=T_Psgen=1e-5
IMPORTANT: Habitualment, aquestes toleràncies només calen en fitxers digitalitzats en altres softwares o digitalitzats en el MiraMon sense utilitzar adequadament les eines de connexió. Quan es digitalitza correctament amb el MiraMon una tolerància simplificada i de valor 0 és l'elecció adequada, resultant en processos ràpids i sense problemes:
LinArc 2 F_Vec F_Arc 0
Format del fitxer llista (per a estructuració de diversos fitxers alhora).
- Format simple
Aquest format és una llista de noms de fitxers escrits un darrere l'altre separats per retorns de carro o espais (si algun nom de fitxer conté espais cal posar-lo entre cometes dobles). Aquesta possibilitat és simple però no permet el nivell de control ni les possibilitats que permet el segon format. Exemple de format simple:
primer.arc
segon.vec
tercer.vec
Format avançat
Aquest format es basa en el format INI del fitxers de configuració de Windows o en els formats PAR del MiraMon. Està constituït per una secció [FITXERS] i diverses seccions [FITXER_#] (# representa un valor numèric). La secció [FITXERS] només te una clau 'Llista' que és igual als valor numèrics '#' de cada una de les seccions [FITXER_#] separats per una coma. La secció [FITXER_#] té 5 claus possibles:
- 'NomFitxer' és el nom d'un fitxer VEC (extensió optativa) o ARC (extensió obligatòria). Hi ha de ser sempre present.
- 'NomCamp' és el nom del camp de la base de dades (A.DBF) a crear on s'escriuran el atributs del fitxer VEC (obligatori per a VEC's).
- 'DescriptorCamp' és el descriptor del 'NomCamp' anterior (obligatori per a VEC's).
- 'Marc' indica si el fitxer fa de marc de tall. Si val 1 un cop tallats s'ignoren tots els vectors d'altres fitxers que quedin fora del marc. En aquest cas, 'NomFitxer' ha de ser un fitxer VEC de polígons. Per defecte val 0.
- 'Incloure' indica si cal incloure aquest marc en el fitxer resultat. En cas de valer 0, el fitxer es fa servir com a límit de tall però els seus elements no s'inclouen a la sortida. Per defecte val 1.
Les seccions [FITXER_#] no cal que estigui ordenades (l'ordre s'estableix en la clau 'Llista') o poden no estar presents a la clau 'Llista' i en aquest cas els fitxers no s'usaran (compte, doncs, a no oblidar la inclusió a la llista).
En el següent exemple presentem un fitxer llista, amb un fitxer VEC i un fitxer ARC. El fitxer ARC es processarà abans que el VEC. Exemple de format avançat
[FITXERS]
Llista=2,1,3
[FITXER_1]
NomFitxer=segon.vec
NomCamp=ATRIBUT
DescriptorCamp=Atribut
[FITXER_2]
NomFitxer=primer.arc
[FITXER_3]
NomFitxer=marc.vec
NomCamp=ATRIBUT
DescriptorCamp=Atribut
Marc=1
Incloure=1
Si la clau Llista de [FITXERS] supera els 255 caràcters, és possible escriure la llista en diverses línies fent:
[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
...

Caixa de diàleg de l'aplicació
|
Caixa de diàleg del LinArc. |

Sintaxi
Sintaxi:
- LinArc 1 F_Arc_in F_Vec [NDigits] [/TAULA] [/CAMP] [/SI_EN_BLANC] [/ATRIBUT_CONSTANT] [/ALCADA] [/AJUST_ENV]
- LinArc 2 F_Ori F_Arc_out T_Arc [DescriptorCamp] [NomCamp] [Prec] [T_Psgen] [T_Esc] [T_Nod] [T_Allg] [/AJUST_ENV] [/ALGORISME]
- LinArc 3 F_Ori F_Arc_out T_Arc [DescriptorCamp] [NomCamp] [Prec] [T_Psgen] [T_Esc] [T_Nod] [T_Allg] [/AJUST_ENV]
- LinArc 4 F_Arc_in F_Arc_out
- LinArc 5 F_Ori F_Resultat LlindarMínim LlindarMàxim PuntsDecada
Opcions:
- 1:
Converteix un fitxer ARC a un fitxer VEC.
- 2:
Converteix un fitxer VEC o ARC/NOD a una família ARC/NODE per mitjà d'estructuració topològica. Admet una sintaxi ampliada per matisar les diferents toleràncies.
- 3:
Converteix un fitxer VEC amb relacions topològiques implícites a una família ARC/NODE.
- 4:
Fusiona parelles d'arcs amb els seus atributs temàtics iguals que comparteixen un node i, alhora, cap més arc no coincideix en el node.
- 5:
Anàlisi de distàncies mínimes entre vectors. Les distàncies estudiades estan compreses en l'interval [LlindarMinim,LlindarMaxim] i l'histograma defineix PuntsDecada intervals.
Paràmetres:
- F_Arc_in
(Fitxer Arc -
Paràmetre d'entrada): És el nom i adreça del fitxer ARC d'entrada.
- F_Vec
(Fitxer VEC -
Paràmetre de sortida): És el nom i adreça del fitxer VEC.
- NDigits
(Nombre de dígits decimals -
Paràmetre d'entrada): NDigits és el nombre de dígits decimals que s'utilitzen per a escriure les coordenades; per defecte val 6.
- F_Ori
(Fitxer Origen -
Paràmetre d'entrada): És el nom d'un fitxer VEC (amb o sense extensió), d'un fitxer ARC indicant la seva extensió o d'un fitxer llista (amb extensió diferent de VEC o ARC) descrit més avall. En aquest darrer cas els paràmetres DescriptorCamp i NomCamp són ignorats.
- F_Arc_out
(Fitxer Arc -
Paràmetre de sortida): És el nom i adreça del fitxer ARC de sortida
- T_Arc
(Tolerància entre arcs -
Paràmetre d'entrada): Distància que un vèrtex es moure (fig 1.b1) o un segment es pot doblegar, generant-se un nou vèrtex (fig 2.b2) per connectar amb un altre. (Implica una relació entre un arc i els altres.)
- DescriptorCamp
(Descriptor Camp -
Paràmetre d'entrada): És una cadena de text (cal cometes si porta espais) que descriu el camp Atribut (màxim 40 caràcters); per defecte resta buit.
- NomCamp
(Nom Camp -
Paràmetre d'entrada): És una cadena de text que serà usada com a nom de camp en la base de dades (A.DBF) a crear; per defecte es pren ATR_VEC_? on ? pot ser L, F o C segons que els atributs siguin nombres enters, reals o cadenes de text.
- Prec
(Tolerància de Precisió -
Paràmetre d'entrada): Mínima distància entre vèrtexs. Ha de ser un valor molt petit, pràcticament infinitesimal.
- T_Psgen
(Tolerància de Pseudogeneració -
Paràmetre d'entrada): Tolerància per eliminar vèrtexs situats sobre un mateix traçat rectilini. (És una definició local a cada arc.)
- T_Esc
(Tolerància d'escurçades -
Paràmetre d'entrada): Distància que es pot moure un node final per connectar-se amb un arc. El moviment del node s'efectua de forma que el desplaçament sigui mínim. (Implica una relació entre un node final i els arcs.)
- T_Nod
(Tolerància entre nodes -
Paràmetre d'entrada): Distància mínima entre dos nodes. És la distància en què un node absorbeix o és absorbit pels seus nodes veïns. (Implica una relació entre un node i els altres.)
- T_Allg
(Tolerància d'allargades -
Paràmetre d'entrada): Els arcs que són més curts que aquesta tolerància seran eliminats si presenten un o dos nodes finals. (És una definició local a un sol arc.)
- F_Resultat
(Fitxer Resultat -
Paràmetre de sortida): És el nom de la taula CSV (text separat per ";") que conté l'histograma de distàncies i del fitxer VEC de distàncies.
- LlindarMínim
(Llindar Mínim -
Paràmetre d'entrada): Llindar mínim en l'anàlisi de distàncies mínimes.
- LlindarMàxim
(Llindar Màxim -
Paràmetre d'entrada): Llindar màxim en l'anàlisi de distàncies mínimes.
- PuntsDecada
(Punts dècada -
Paràmetre d'entrada): Punts dècada.
Modificadors:
/TAULA=
(Nom taula)
Indica la taula de la base de dades que s'exporta a format VEC. Per saber més sobre els valors d'aquests paràmetres seguiu les consideracions del document de sintaxi general. (Paràmetre d'entrada) /CAMP=
(Nom camp)
Indica el camp de la base de dades que s'exporta a format VEC. Per saber més sobre els valors d'aquests paràmetres seguiu les consideracions del document de sintaxi general. (Paràmetre d'entrada) /SI_EN_BLANC=
(Camp en Blanc)
Indica el comportament que tindrà l'exportació a VEC quan no hi hagi atribut a la base de dades (camp en blanc). Pot valer "CONSTANT" per a un valor constant, "ID_GRAFIC" per a l'identificador gràfic o "IGNORAR" per a ignorar els vectors sense atribut (valor per defecte). (Paràmetre d'entrada) /ATRIBUT_CONSTANT=
(Valor constant)
Indiquen la constant que voleu exportar a format VEC com atribut dels objectes. Si s'usa en combinació amb /TAULA=, /CAMP= i /SI_EN_BLANC=CONSTANT és l'atribut que es farà servir quan no hi ha dades (camp en blanc). De no indicar-se /TAULA=, /CAMP= o /ATRIBUT_CONSTANT= l'exportació a format VEC es fa a partir de l'identificador gràfic com atribut. (Paràmetre d'entrada) /ALCADA=
(Alçada)
Indica quina de les possibles alçades s'escriu en el VEC. Per saber més sobre els valors d'aquest paràmetre seguiu les consideracions del document de sintaxi general. Els possibles valors són: 0 per a la primera, 1 per a la superior, 2 per a la inferior. (Paràmetre d'entrada) /ALGORISME=
(Algorisme d'estructuració topològica)
Aquest modificador serveix per a determinar l'algorisme que l'aplicació emprarà per a detectar les possibles interseccions entre els segments dels elements lineals i de les vores de polígons durant l'estructuració topològica. Vegeu Algorismes disponibles per a l'estructuració topològica (/ALGORISME) per a una explicació més detallada i suggeriments sobre situacions en què és més adequat un o altre algorisme.- ESCOMBRATGE: Basat en la intersecció de segments de Bentley-Ottmann. Per a línies que intersequen en nous vèrtexs.
- DIRECTE: Basat en l'exploració de les interseccions de cada segment contra tots els altres. Per a polígons explícits o per a capes amb topologia implícita (interseccions ja convertides en vèrtexs)
- AUTOMATIC: El programa decideix automàticament quin dels dos algorismes s'utilitzarà. De vegades resulta més lent que el més ràpid dels dos anteriors.
(Paràmetre d'entrada) /AJUST_ENV (Ajustar envolupant) Ajusta l'envolupant documentada a les metadades al rectangle mínim (opcions 1,2,3). (Paràmetre d'entrada)
Aquest programa suporta format REL v.4 i format ARC v. 1.1 amb o sense coordenades 3D.

Idrisi és un programari © de J.Ronald Eastman and Clark University.
MiraMon® és programari © de Xavier Pons.