Presentació i opcions | Caixa de diàleg de l'aplicació |
Exemples | Sintaxi |
L'expressió matemàtica ha de contenir, com a mínim, un fitxer i, en canvi, pot no tenir definit cap operador o funció; en aquest cas pot utilitzar-se per a saturar o escalar el fitxer, canviar el valor de fons, transformar el format d'un fitxer ràster, rasteritzar un vector... encara que existeixen aplicacions específiques per aquestes últimes transformacions (vegeu IMGIMG, TiraVec).
Tots els ràsters que formin part de l'expressió han de correspondre al mateix àmbit geogràfic, han de tenir la mateixa resolució i les mateixes unitats referides al mateix sistema de referència. En canvi, poden ser de diferent tipus (byte, real, etc) i no importa el grau de compressió. Se sobreentén que l'àmbit de les capes vectorials queda definit per l'àmbit de les capes ràster de l'expressió, quan n'hi ha. Per a expressions on només participin capes vectorials caldrà definir l'àmbit a través del botó d'opcions Avançades. Les singularitats de les operacions o funcions utilitzades (p. ex.: divisió entre zero, arrel negativa...) sempre donaran com a resultat en aquella posició geogràfica un valor igual al valor NODATA (sensedades). Aquest valor l'estableix el programa en funció del tipus de dada del fitxer resultat (255 per tipus byte, 0 per a tipus bit, i el valor més negatiu possible per a la resta de tipus), excepte que s'indiqui explícitament en la caixa d'opcions avançades; en aquest darrer cas cal tenir cura d'escollir el valor de fons fora del rang de valors possibles del ràster resultat. En cas de dubte, deixeu que sigui l'aplicació qui determini el valor.
Tots els càlculs es realitzen en doble precisió (15-16 xifres significatives i rang aproximadament entre 1.7E-308 a 1.7E+308). La longitud o complexitat de l'expressió és il·limitada (només dependent del vostre hardware i sistema operatiu).
En la primera casella s'introdueix la fórmula matemàtico-lògica a calcular. En formen part nombres, capes (ràsters i vectors), operadors i funcions. Els noms de les capes que formen part de l'expressió matemàtica són àlies dels fitxers corresponents i s'indiquen entre claudàtors ('[' i ']'); els claudàtors són inclosos automàticament si inseriu la capa des del botó "Nova...". El nom és el nom del fitxer, indicat sense path per a major claredat de l'expressió (el programa sap el path perquè l'ha retingut en tornar de la caixa d'exploració per a seleccionar el fitxer; en el cas remot de noms de fitxers iguals en directoris diferents el programa introdueix un caràcter diferenciador per a poder avaluar igualment sense problemes). Quan la capa a inserir en l'expressió sigui un vector caldrà definir alguns paràmetres addicionals:
Exemple d'expressió comentada per a recordar i facilitar el seu objectiu:
- Valor exterior al vector: Valor que, a la zona exterior al vector, o bé en les entitats que no tenen un atribut vàlid, tindria un ràster que emulés aquest vector. Exemples: Si el fitxer és de polígons correspondrà al valor del polígon universal i al valor atribuït a aquelles entitats amb el camp de l'atribut buit o que els falta el registre corresponent. Si és de línies o punts serà el valor de la matriu sobre la qual estan les línies o punts i també el valor atribuït a aquelles entitats amb el camp de l'atribut buit o que els falta el registre corresponent.
- Camp: Per a vectors estructurats cal indicar el camp de la base de dades principal o associada sobre el qual es realitzaran els càlculs. Si el camp és alfanumèric es tractarà com a numèric excepte en el cas que es defineixi una operació lògica d'igualtat o desigualtat respecte una cadena constant. Exemple: [Inv_for;Municipi;]="Olot".
- Posició en multiregistre: Per a bases de dades amb registres múltiples sobre el mateix identificador gràfic indica sobre quin registre calcular.
En el retorn de la selecció d'una capa vectorial estructurada, el programa insereix automàticament el descriptor del camp (o el nom del camp en la seva absència) entre comentaris junt amb l'àlies. Els comentaris van inserits entre dos caràcters ';' i poden incloure's a qualsevol punt de la fórmula si s'obren i es tanquen correctament.
;diferència en valor absolut;ABS([model];model teòric;-[dat0299];dades mostreig Febrer 1999;)
El botó Llistat ens informarà de les propietats de les capes que formen l'expressió, així com de la relació entre el seu àlies i el seu nom veritable.
Els operadors i funcions implementades es descriuen posteriorment. Els arguments de les funcions han d'estar tancats entre parèntesis; els parèntesis són inclosos automàticament si inseriu la fórmula des del botó "Llibreria de funcions..."; p. ex.: SING(30). Si la funció té més d'un argument cal separar-los per comes; p. ex.: MAX([IMG1],[IMG2]).
Tots els operadors poden ser usats tant en capes com en valors numèrics.
Per exemple, podeu fer:
MAX([IMG1], SING(30))i obtindreu, per cada cel·la de la capa IMG1, el màxim valor entre el valor de la cel·la i el sinus de 30°; també podeu escriure expressions com ara:
MAX([IMG1], 100) 100*SING([IMG1]) MAX( MIN([IMG1],[IMG2]), 100) etc.
En cas de dubte, recomanem utilitzar la sintaxi construïda a partir d'anar polsant els botons i menús corresponents de l'aplicació Windows sense editar-los posteriorment, així com usar parèntesis sempre que dubteu sobre la precedència d'operadors.
El tipus de dada del fitxer de sortida es controla en el desplegable homònim. En el cas "automàtic", el propi programa ajusta el tipus de dada final en funció del rang i tipus (enter o real) dels valors del fitxer de sortida, i del seu nivell de compressió, comprimint si sembla adequat; per exemple, quan el resultat és booleà (0,1) s'opta per byte-RLE, que dona fitxers molt petits. "Automàtic" no comprimirà si tan sols una de les imatges que formen l'expressió està descomprimida (llevat del cas de resultats amb valors 0 o 1 -booleans- en què s'opta per byte-RLE). El cas bit només es genera quan se li especifica expressament, ja que habitualment un format byte-RLE dona fitxers de menor mida. Tot i que el mode automàtic és més còmode, el càlcul es realitza de forma substancialment més ràpida si es determina el tipus de dada de sortida; a més a més, "automàtic" necessita crear, durant el procés, un fitxer temporal en format double (format que fàcilment consumeix força espai de disc). Existeix un botó informatiu associat al tipus de dada, que permet conèixer quin és l'espai de disc que necessita el programa per a generar el resultat. En el cas de fitxers comprimits, quan es tria automàtic o quan s'activa l'opció Escalar, s'informa de l'espai màxim que es necessitaria si el fitxer o fitxers no poguessin comprimir-se en absolut (per automàtic i Escalar cal tenir en compte que el programa genera un fitxer temporal addicional).
Quan se selecciona "Saturar", si el rang de valors de sortida depassa el rang corresponent al domini (tipus de dada) triat, els valors que depassen s'assignen al màxim o al mínim del domini, segons convingui. En canvi, si se selecciona un escalat, el programa reescala linealment els valors resultants a l'interval indicat en les caselles "Mínim" i "Màxim" d'escalat. Exemple: Suposeu que un fitxer amb valors entre 0 i 200 és multiplicat per 2 i es tria el format de sortida byte; si se selecciona saturar, tots els valors entre 256 i 400 s'assignaran a 255, si se selecciona escalar, el rang [0,400] s'escalarà dintre el rang [0,255].
Quan el tipus de dada resultant no és real, el programa permet triar entre truncar o arrodonir (recomanat) el resultat. Aquest procés només s'aplica en la fase final de gravació del fitxer resultant, no durant els càlculs. Si us interessa truncar en una etapa intermèdia de l'expressió, utilitzeu la funció ENT() (part entera) disponible prement el botó "Llibreria de funcions".
La casella "Títol" permet introduir un títol descriptiu per al fitxer resultant; si el deixeu en blanc s'utilitzarà la fórmula matemàtico-lògica com a títol.
El botó Reclassifica permet definir la funció de Reclassificació: RECL([fitxer reclasssificador], [capa a reclassificar]). Aquesta funció canviarà valors antics de la capa a reclassificar per nous valors segons les correspondències especificades en el fitxer reclassificador (*.MRC). Aquest fitxer està compost per línies de nombres on s'especifiquen aquests canvis. Una línia que conté dos nombres vol dir que al primer valor se li assignarà el segon (en l'exemple que tenim a continuació correspon a la línia 2); una línia que conté tres nombres implica que un valor comprès entre el primer i el segon (igual o superior al primer i estrictament inferior al segon) passarà a ser el tercer (exemple línia 3). Aquest format permet deixar línies en blanc i posar comentaris quan la primera posició de la línia és ';' (exemple línia 1). Observeu que el format de reclassificació no necessita tancar el comentari amb un segon ';'.
El format de reclassificació també té formats especials per enviar un valor (exemple línia 5) o un interval (exemple línia 6) al valor de fons o "sensedades", definint com a nou valor el literal "NODATA", i que també es pot reclassificar el valor de fons com un píxel qualsevol (exemple línia 4) i assignar-li un nou valor perdent la condició de valor de fons.
Cal entendre l'argument "capa a reclassificar" de la manera més general possible, és a dir, pot correspondre efectivament a un dels fitxers seleccionats, o al resultat de qualsevol operació definida entre capes i escalars. De la mateixa manera, el resultat de la reclassificació pot guardar-se com a resultat definitiu o pot ser simplement un dels càlculs intermedis de l'expressió matemàtico-lògica.
Exemples de formats correctes de reclassificació:
;Aquesta línia és un comentari 10 20 1 5 8 NODATA 1 1 NODATA 2 3 NODATAExemples de formats incorrectes de reclassificació:
Aquesta línia és un comentari definit incorrectament 10 1 5 8 9 NODATA 1 2 1 NODATA 2 NODATA NODATAExemple d'expressió en què es reclassifica un format intermedi:
En el botó "Avançades", la casella "Descripció valors" permet introduir una cadena descriptiva dels tipus de valors que s'obtindran. Aquest descriptor es mostrarà entre parèntesis quan consulteu per localització el fitxer resultant. Normalment deixeu-ho en blanc per a resultats categòrics (per exemple en mapes temàtics) i poseu-hi les unitats adequades en el cas de mapes de valors continus (per exemple "°C" per a un mapa que resulta d'un model de regressió que aproxima la temperatura en graus centígrads). En cas de resultats categòrics, el fitxer resultant pot importar les categories associades a qualsevol capa (descrites en el fitxer DOC o en la taula DBF associada per a imatges ràster ), en particular d'alguna de les imatges que formen l'expressió matemàtico-lògica. Aquest fitxer de categories, si es necessita, cal indicar-lo en la casella "Fitxer de categories". D'aquesta manera, és fàcil fer que un fitxer de sortida categòric tingui automàticament ben descrites les categories si tenim un IMG de referència.
També en el botó avançades podem definir el valor sensedades en el fitxer resultat; recomanem utilitzar sempre el paràmetre automàtic, excepte en casos especials on l'usuari necessiti assignar un valor concret al valor sensedades.
L'opció avançada "Reservar des de l'inici el valor NODATA" és útil per anticipar-nos al programa, quan coneixem que es generarà un valor sensedades en el fitxer resultat; en qualsevol cas, si no deixem activat aquest paràmetre, si el programa detectés que cal escriure un valor sensedades en el fitxer resultat faria les modificacions necessàries per afegir-lo.
Quan no hi ha cap ràster en la fórmula cal definir l'àmbit del ràster de sortida i cal indicar les coordenades de l'envolupant i el costat del píxel en les caselles corresponents.
Com totes les Aplicacions de Suport a MiraMon llançades des de la corresponent interfície Windows, la calculadora desa els paràmetres de cada execució en un fitxer de text per a poder recuperar els paràmetres de la darrera execució. Tanmateix, en el cas que vulgueu desar una expressió concreta per recuperar-la en qualsevol altre moment, independentment que hagueu executat altres càlculs entremig, podeu prémer el botó "Desar...". La fórmula quedarà enregistrada en el fitxer MMC que indiqueu (excepte el nom reservat per l'última execució, usat internament per l'aplicació, _PARCLMM.MMC). Per a recuperar una fórmula enregistrada, simplement premeu el botó "Carregar". Si en la darrera execució va definir-se explícitament un valor sensedades, el símbol '!' al costat del botó "Avançades..." ens avisarà que és molt convenient tornar a restablir l'automàtic si la nova execució no té les particularitats que van causar el canvi de la definició del valor de fons.
Per a més informació es pot consultar la següent referència:
Pesquer L, Masó J, Pons X (2000) Herramientas de análisis combinado ráster/vector en un entorno SIG. Aguado I, Gómez M (eds.) Tecnologías Geográficas para el Desarrollo Sostenible. Departamento de Geografía. Universidad de Alcalá, 2000: 53-73. IX congreso del Grupo de Métodos Cuantitativos, Teledetección y SIG de la Asociación de Geógrafos Españoles, Alcalá de Henares.
Caixa de diàleg de la CalcImg |
Exemple 1: Volem crear una imatge ja multiplicada per una màscara: Suposem que volem seleccionar, de la imatge 'A', les zones que a la imatge 'B' tenen valors superiors a 3000.
L'operació serà: [A]*([B]>3000)
En aquest cas la imatge resultant presentarà 0 en les zones amb valors inferiors o iguals a 3000 en la imatge B, i mantindrà els valors originals de la imatge A en les altres zones (les de valors superiors a 3000).
Exemple 2: Volem reclassificar en dos grups els valors d'una imatge 'C'. Els valors inferiors a 100 els passem a 50 i els superiors o iguals a 150.
L'operació serà: ([C]<100)*50+(NOT([C]<100))*150
Alternativament, es pot usar la forma: ([C]<100)*50+([C]>=100)*150
La imatge resultant tindrà dos possibles valors: 50 o 150, segons l'original sigui inferior o no a 100.
També podem utilitzar la funció de reclassificació: RECL([MMReclas],[C]) si coneixem el rang de valors de la capa 'C'. En el cas que 'C' sigui un ràster de tipus byte o byte-RLE el contingut del fitxer de reclassificació MMReclas.MRC seria:
o, si desconeixem el rang de valors del ràster 'C', també és admissible una reclassificació basada en un fitxer MRC com aquest:0 100 50 100 256 150
-1.0E+40 100 50 100 1.0E+40 150
Exemple 3: Volem un obtenir un ràster resultat de l'agrupació de les categories:
segons la reclassificació:category1 : Arbrat dens category2 : Arbrat clar category3 : Boscos de ribera category4 : Reforestacions category5 : Pollancredes category6 : Platanedes category7 : Matollars category8 : Vegetació d'aiguamolls category9 : Prats i herbassars category 10 : Incendis CORINE category 11 : Roquissars category 12 : Tarteres category 13 : Zones nues category 14 : Platges category 15 : Aigües continentals category 16 : Glaceres i neus permanents category 17 : Conreus category 18 : Zones urbanitzades category 19 : Vies de comunicació category 20 : Zones esportives i lúdiques category 21 : Zones d'extracció minera
El ràster resultat tindrà 4 categories que podrien definir-se com:1 11 1 11 17 2 17 3 18 21 4
category1 : Terreny forestal category2 : Improductiu natural category3 : Conreus category4 : Improductiu artificial
Exemple 4: Donada una imatge '256c', per a seleccionar tant els valors "3" com els valors "12", i posar-los a "1", deixant amb valor "0" els restants valors escriviu:
Aquesta operació també pot ser efectuada des de MiraMon, a través d'una consulta per atribut i desant el resultat en un fitxer IMG.([256c]=3)OR([256c]=12)
Exemple 5: Donada una imatge '256c', per a seleccionar tant els valors "3" com els valors "12", però preservant els seus valors "3" i "12" en el resultat (i posant a "0" els restants valors) escriviu:
(([256c]=3)OR([256c]=12))*[256c]
Exemple 6: Volem obtenir el model digital d'elevacions de a tres comarques a partir del model digital d'elevacions de tot Catalunya '[Mde300]' i del fitxer vectorial de comarques '[Coma800]'.
Cal indicar que el fitxer resultat tindrà el mateix àmbit que [Mde300], de tot Catalunya, i caldria utilitzar l'aplicació Retalla si volguéssim reduir l'àmbit.[Mde300]*([Coma800;Comarca;]="Bages" OR [Coma800;Comarca;]="Solsonès" OR [Coma800;Comarca;]="Berguedà")
Exemple 7: Un exemple, menys intuïtiu, però interessant de cara a veure com es tracta la rasterització dinàmica dintre de la calculadora, és la rasterització d'una capa de línies '[Perfils]' en què volem que les línies rasteritzades quedin a 0 i l'exterior quedi a 1.
En les cel·les afectades pel vector (rasteritzades) cap arc no té longitud 0 i, per tant, l'operació lògica retorna FALS, o sigui zero. En canvi, a l'exterior com hi assignem un 0, en comparar-lo amb el valor zero, el resultat és VERITAT, o sigui 1.[Perfils;LONG_ARC;]=0 on hem definit Valor exterior al vector=0
Exemple 8: Desitgem generar un valor aleatori entre -1 i 1.Raster1 és un ràster constant de valor 1, és necessari per a definir l'àmbit i costat de píxel del fitxer de sortida.
(RND(2)-1)*[Raster1]
+Suma o signe positiu. -Resta o signe negatiu. *Multiplicació. /Divisió.
ANDI. OR O. NOTNegació XORO exclusiva. >Més gran estricte. >=Més gran o igual. <Més petit estricte. <= Més petit o igual. =Igual. =/=Diferent.
SQRT Arrel quadrada. LOGLogaritme en base 10. LN Logaritme neperià. EXPExponencial. INVInvers. ENTTruncament. ABSValor absolut. RNDValor aleatori entre 0 i l'argument.
BOLBooleà.
POWPotenciació. NR Ràtio normalitzat. MODResta de la divisió.
MAXMés gran de dos valors. MINMés petit de dos valors.
RECL Reclassificació.
(*) La funció Transparentar (o també anomenada Cover) retorna el valor del segon argument quan el primer argument és igual al valor de fons (valor definit per a sensedades en la documentació del primer fitxer si es un ràster) i retorna el primer argument quan és diferent d'aquest valor. D'aquesta manera, els valors del segon fitxer es veuen al través de les zones "sense dades" de la primera capa. Com en els altres casos, qualsevol dels arguments de Transparentar poden ser els resultats parcials d'altres operacions entre capes i escalars.CVRTransparentar (*).
SINSinus. COSCosinus. TANTangent. ASIN Arcsinus. ACOS Arccosinus. ATAN Arctangent. COSECCosecant. SECSecant. CTGCotangent.
SING Sinus. COSG Cosinus. TANG Tangent. ASINGArcsinus. ACOSGArccosinus. ATANGArctangent. COSECG Cosecant. SECG Secant. CTGG Cotangent.
L'ordre de precedència ve regit per sis categories d'operadors i funcions ordenades de major a menor precedència. Dins la mateixa categoria les operacions s'efectuen d'esquerra a dreta. Les categories són les següents:
No s'ha implementat la funció condicional
?(condicio, funcio_TRUE, funcio_FALSE) ja que pot reproduir-se amb una combinació d'operacions lògiques de la forma:
(condicio)*(funcio_TRUE)+(NOT condicio)*(funcio_FALSE)