Documente Academic
Documente Profesional
Documente Cultură
După cum s-a putut observa, până acum, s-au efectuat operații de geoprocesare elementare
declanșate fie prin utilizarea meniurilor, a instrumentelor sau scrierea de comenzi. In vederea realizării
de procesări complexe asupra datelor, operațiile trebuie înlănțuite într-un flux de procesare care să fie
ulterior executat unitar. Componenta ModelBuilder facilitează construirea de fluxuri de procesare a
datelor pornind de la o schema descrisă în mod vizual, ce combină operații elementare (disponibile prin
instrumente), scripturi sau alte modele, pe principiul subprogramelor din programarea structurată.
Această componentă se identifică în ArcGIS Pro sub forma unei ferestre de lucru care se invocă de la
ribbon-ul Analysis / grupul Geoprocessing / ModelBuilder (Figura 1). Un model trebuie stocat într-o
componentă specifică din GIS și anume într-un Toolbox. Un astfel de container (Toolbox) este construit
odată cu crearea proiectului și are același nume cu el. Utilizatorul poate construi mai multe astfel de
containere, în cadrul proiectului, în fereastra Catalog, secțiunea Toolboxes. Folosind meniul contextual
al secțiunii (click dreapta) se pot adăuga noi containere la proiect iar meniul contextual al unui container
/ New folosește pentru a adăuga în cadul lui modele, scripturi sau Toolset-uri (subgrupuri de elemente),
după cum se poate observa in figura 2.
Astfel, direct într-un container de tip Toolbox sau într-un container Toolset, din meniul contextual / New
/ Model se deschide fereastra în care se va putea descrie modelul de geoprocesare, având implicit numele
Model însă el se poate schimba prin redenumire. Se asigură unicitatea numelor prin faptul că,
următoarele modele vor fi numite Modeli, unde i reprezintă numărul modelului construit în proiect.
Pentru exemplificare, se va construi un model care realizează selecția drumului E85 pe hartă.
Pentru acest lucru se va alege operația de selecție disponibilă prin instrumentul Select Layer by Attribute
1
din Tools – Geoprocessing – Toolboxes / Data Management Tools / Layers and Table Views și prin drag
and drop se trage instrumentul pe fereastra componentei ModelBuilder ca în figura 3.
Se observă că elementele sunt necolorate ceea ce sugerează utilizatorului că modelul nu poate fi executat
în această stare. Pentru a putea fi rulat, instrumentul trebuie deschis pentru a i se specifica parametrii de
intrare. Acest lucru de face selectând opțiunea Open din meniul contextual al instrumentului. După
efectuarea acestei operații apare fereastra de interacțiune a instrumentului și utilizatorul introduce
parametrii de selecție doriți (alege stratul tematic drumuri și indică clauza where de tipul nume2 = ‘E85’
după care confirmă operația apăsând OK. Operația se va vizualiza ca în figura 4.
2
- Elementele au fost colorate în diferite culori (albastru inchis pentru parametri de intrare ai
modelului, galben pentru operație, albastru deschis pentru variabila de memorie care va stoca
numărul de elemente selectate iar verde pentru rezultatul propriu-zis al operației de selecție);
- Datele se figurează în forme ovale în timp ce operațiile se figurează prin dreptunghiuri;
- Se observă că elementele sunt interconectate prin săgeți ceea ce indică un fluxul de
prelucrare.
Modelul astfel construit se poate executa apasând butonul Run de pe ribbon-ul ferestrei (Figura 5) sau
buntonul Run după activarea modelului din fereastra Catalog (Figura 6). După execuția modelului, pe
hartă, drumul E85 va apare selectat. Acest lucru se poate observa în figura 7.
3
Figura 7. Rezultatul afișat pe hartă
După execuția modelului se observă că elementele sunt afișate cu un efect de umbrire ceea ce denotă că
operațiile au fost executate iar rezultatele au fost generate (figura 8).
După execuția cu succes a modelului se închide fereastra componentei, se salvează modelul și acesta va
apare în toolbox-ul în care acesta a fost creat. Un astfel de model se execută ori de câte ori este nevoie
dând dublu click pe el. Dacă facem acest lucru pe modelul nostru va apare o fereastra ca în figura 6 în
care ni se precizează că modelul nu are parametri. De fiecare dată pe hartă se va selecta același lucru
(drumul E85).
Pentru a da mai multă generalitate unui model acesta se parametrizează astfel încât rezultatul să
fie diferit în funcție de valorile parametrilor de intrare. De exemplu, în cazul modelului nostru, dorim ca
stratul tematic din care se vor selecta caracteristici să poată fi ales din cele existente în hartă și în plus,
expresia de selecție a caracteristicilor să poată fi introdusă tot ca parametru. Datele care vor fi asumate
ca parametri ai modelului se disting prin faptul că au înscrisă litera P în fluxul modelului ca în figura 9.
Modelul se editează în cadrul componentei ModelBuilder prin selecția lui din componenta Toolbox după
4
care se dă click dreapta și se alege opțiunea Edit. O dată din model se parametrizează prin selecția ei în
cadrul modelului după care se dă click dreapta și se bifează opțiunea Parameter – figura 9.
Fiind vorba de parametrizarea stratului tematic, utilizatorul prin intermediul interfeței va putea alege
stratul tematic pe care dorește să-l proceseze. Pentru ca în interfață comentariul parametrului să fie în
concordanță cu semnificația lui se va redenumi elementul prin selecția lui și apoi click dreapta și se
selectează opțiunea Rename. Făcând această operație se va putea introduce noua denumire (figura10)
care va apare în interfața modelului.
Pe lângă transformarea unor date de intrare în parametri ai modelului se mai pot defini și variabile
independente care joacă rol de parametri și care vor fi utilizate de către instrumentele din model. In cazul
nostru dacă utilizatorul poate alege stratul tematic atunci condiția de selecție trebuie parametrizată
pentru că e puțin probabil ca ea să aibă sens într-un context diferit. O variabilă independentă se include
în model făcând click dreapta în interiorul ferestrei de editare a modelului și selectându-se opțiunea
Create Variable… după care va apare o fereastră ce-i permite utilizatorului să selecteze tipul variabilei;
în cazul nostru se va alege SQL Expression. Legarea variabilei de instrument se va face prin drag de la
variabilă și drop pe instrument, după care va apare o fereastă prin care utilizatorul are posibilitarea de a
5
face asocierea dintre variabilă și parametrul instrumentului, în acest caz se va alege Expression (Figura
11).
După efectuarea asocierii, variabila acestei operații se inițializează cu o expresie validă și prin procedeul
descris anterior poate deveni parametru al modelului. După salvare și validare acesta se poate rula din
fereastra Catalog și în coccordanță cu parametri setați se generează și interfața corespunzătoare după
cum se poate observa în figura 12.
Se observă că după parametrizare utilizatorul poate indica stratul tematic care va intra în procesare iar
constructorul de expresii SQL se va utiliza pentru a genera condiția de selecție. In mod evident,
utilizatorul poate folosi modelul pentru a selecta date din diferite straturi tematice indicând și condiția
de selecție.
6
Inlănțuirea operațiilor într-un flux de geoprocesare presupune ca operațiile să se bazeze și pe
rezultatele operațiilor anterioare, cu alte cuvinte, datele de intrare pentru o operație sunt datele de ieșire
ale unei operații anterioare. Pentru exemplificare, să presupunem că dorim să construim un buffer în
jurul elementelor spațiale selectate, la o distanță de 5 km. Operația de bufferizare va avea ca date de
intrare rezultatul operației de selecție și distanța. Pentru distanță se va construi o variabilă de tip Long
în care utilizatorul va introduce distanța exprimată în metri, de exemplu 5000, variabila va fi redenumită
Dist. Se deschide instrumentul de construire a buffer-ului și se introduc parametrii corespunzători, de
exemplu pentru caracteristica care va fi buffer-izată se va introduce drumuri adica ceea ce a rezultat din
operația de selecție și se află în model. După ce se încarcă cu date instrumentul buffer se observă că
variabila Dist nu este conectată la nici o operație. Se conectează variabila Dist cu instrumentul Buffer și
apare un meniu contextual din care utilizatorul va selecta parametrul ce va fi asociat variabilei create, în
exemplul nostru Distance, ca în figura 13.
Se mai observă în figura 13 că variabilele independente sunt colorate cu albastru mai deschis dacă sunt
inițializate cu valori. Până acum, în acest exemplu, au fost definiți parametri de intrare care s-au mapat
pe datele de intrare cerute de operație cât și pe baza unor variabile independente create în model (de
exemplu SQL Expression sau Dist).
Unui model i se pot atașa și parametri de ieșire. Acest lucru este util când dorim ca rezultatului
final sa-i asociem un nume, să indicăm baza de date unde va fi stocat iar el va fi adăugat la documentul
hartă ca strat tematic, în mod implicit. Din punct de vedere tehnic, acest lucru se realizează prin indicarea
variabilei rezultat, drept parametru. In cazul nostru variabila rezultat al operației Buffer este
drumuri_Buffer și aceasta devine parametru prin bifarea opțiunii Parameter. Pentru a generaliza
modelul, se redenumește variabila element_buf în Rezultat. Prin rularea modelului astfel construit direct
din Toolbox se va afișa fereastra de interacțiune cu utilizatorul ca în figura 14.
7
Figura 14. Interfața modelului completată cu date
Din figura 14, se observă că se rulează modelul pentru a realiza un buffer în jurul râului Arges
la o distanță de 7 km în jurul lui. In figura 15 se observă că rularea modelului a efectuat selecția râului
Arges, construirea bufferului și includerea lui la documentul hartă sub numele indicat în interfață.
8
Stabilirea precondițiilor în fluxul de geoprocesare se realizează când dorim ca o operație să se
desfășoare în mod explicit după ce s-a obținut un anumit rezultat intermediar. Acest lucru se realizează
prin conectarea explicită a elementelor din flux după care se indică tipul de conexiune (Precondition).
De exemplu, dacă dorim ca după efectuarea buffer-ului elementele selectate pe hartă să fie deselectate
atunci se va face pe stratul tematic respectiv o selecție prin atribute iar la metoda de selectie se va preciza
CLEAR_SELECTION. Punând această operație în model se crează practic două fluxuri paralele în
sensul că această operație are ca dată de intrare stratul tematic inițial și rezultatul nu se mai leagă de nici
o operație. De aceea, vrem să ne asigurăm că operația de deselecție se face după construirea buffer-ului,
lucru care se realizează prin conexiunea explicită dintre Rezultat și cea de-a doua selecție care are doar
rolul de a deselecta elementele selectate în prealabil, ca în figura 16. Când se face conexiunea se va
alege din meniul contextual opțiunea Precondition iar în interfață acest lucru se va indica printr-o săgeată
punctată după cum se observă în figura 16.
Modelul poate fi stocat si ulterior executat sau modificat prin operatia de editare (click-dreapta pe model
/ Edit). De asemenea, el poate fi exportat (Figura 17), fie sub forma unui script Python, dar și sub formă
grafică (Figura 18) folosind opțiunea Export de la grupul Model a ribbon-ului ModelBuilder.
9
Figura 17 Opțiuni de export a modelului de geoprocesare
import arcpy
from sys import argv
if __name__ == '__main__':
# Global Environment settings
with arcpy.EnvManager(scratchWorkspace=r"D:\MyProject\MyProject.gdb", workspace=r"D:\MyProject\MyProject.gdb"):
Model(*argv[1:])
10
Instrumente de procesare specifice componentei Model Builder
Pe lângă instrumentele din componenta ArcToolbox care sunt necesare pentru a procesa date în GIS,
mai există o serie de instrumente care sunt utile în construirea unui model de geoprocesare. Acestea se
află în grupul Insert din ribbon-ul ModelBuilder, după cum se observă în figura 19. Acestea sunt grupate
în categorii și se referă la:
- Iterators – pentru implementarea structurilor repetitive;
- Logical – pentru implementarea structurilor alternative;
- Utilities – pentru operații generale în modele.
Iterator Descriere
11
ITERATE WORKSPACE Iterează spații de lucru dintr-un folder.
12
Pe lângă acestea, mai există și instrumentul Merge Branch care are ca scop să unească ramurile generate
de o structură alternativă.
Instrument Descriere
Returnează o valoare bazată pe o expresie Python
Calculate Value
specificată.
Colectează valorile de ieșire ale unui iterator sau
pentru a converti o listă de multivalori într-o
Collect Values singură intrare. Valorile colectate pot fi utilizate
ca intrare pentru instrumente precum Merge,
Append și Cell Statistics.
Primește valoarea aferentă primului tuplu dintr-
Get Field Value un tabel, pentru câmpul specificat.
Parsează denumirea unui fișier obținând: calea,
Parse Path
numele sau extensia acestuia.
Selectează datele dintr-o colecție de date, cum ar
Select Data fi: un folder, o geobază de date, un set de
caracteristici sau o acoperire.
13
In figura 21 se prezintă interfața modelului unde au fost introduse valorile 150 și 275 iar în urma
execuției lui, în fereastra obținută prin click pe View Details, se observă că este afișat rezultatul:
Value = 425.
Funcții în Python
Codul Python se poate structura in module funcționale denumite funcții. O funcție are forma:
14
…..
[return variabila]
unde, def este cuvânt cheie ce indică începerea definirii funcției și se termină prin instrucțiunea
return care returnează un rezultat, dacă este cazul, de aceea e figurată instrucțiunea ca opțională.
In vederea exemplificării celor menționate se va scrie un script care, pe baza unei simbologii de tip
Graduated Colors colorează poligoanele unui layer după un câmp numeric, din tabela spațială
respectivă. Pentru a realiza acest lucru se procedează la a simboliza stratul tematic judete după tipul de
simbologie mai sus menționat; astfel, se va indica câmpul numeric tpop, care stochează populația
județului, pentru simbolizare și numărul de clase (intervale). După simbolizare, se va putea vizualiza
rezultatul direct pe hartă.
Scriptul, în fapt, asociază simbologia Graduated Colors stratului tematic, de tip poligon, indicat ca
parametru și de asemenea simbolizarea se va face luând în considerare valorile unui câmp numeric și
numărul de clase în care dorim să discretizăm domeniul de valori al atributului (se indică de asemenea
prin parametri). Parametrii scriptului sunt prezentați în figura 22 și se referă la:
- Alege poligon de tip Feature Layer care semnifică layerul ce se va simboliza – parametru de
intrare;
- Campul de tip Field care specifică câmpul care se va reprezenta prin simbologie – parametru
de intrare – acesta este dependent de câmpul Alege poligon;
- Nr clase de tip Long reprezinta numarul de intervale de valori (inițial sunt setate 4 clase) in
care se va descompune domeniul de valori al câmpului indicat prin parametrul Campul –
parametru de intrare;
import arcpy
sspol = arcpy.GetParameterAsText(0) #preluare parametru de intrare (stratul tematic)
scamp = arcpy.GetParameterAsText(1) #preluare parametru de intrare (numele campului)
snrclase = arcpy.GetParameter(2) #preluare parametru de intrare (numarul de clase)
15
#definirea unei funcții pentru a returna layer-ul ce dorim să îl simbolizăm și acesta va fi vizibil
#celelalte layere vor fi invizibile (ascunse)
def vh_layers(fharta, npol):
layers = fharta.listLayers()
for layer in layers:
if(layer.name==npol):
layer.Visible = True
lyrez = layer
else:
layer.Visible = False
return lyrez
Scriptul astfel definit se salvează, se rulează și se poate folosi ca atare sau se poate include într-un model.
Dacă se dorește colorarea județelor după câmpul tpop folosind 4 intervale de valori se va rula scriptul și
se vor introduce valorile parametrilor în mod corespunzător, iar rezultatul va fi afișat după cum se poate
observa în figura 23.
Accesul la datele unei baze de date spațiale se poate face din scripturi Python folosind biblioteca
specializată da (data access) parte din arcpy. Din punct de vedere tehnic, se utilizează conceptul de
cursor, ca la baze de date relaționale, în sensul că, se poate crea un set de tupluri pe baza datelor dintr-o
tabelă specificand și lista de câmpuri care formează cursorul respectiv. Luând în considerare operațiile
care se pot executa asupra datelor din cursor, există trei tipuri de cursoare:
16
- SearchCursor care permite doar consultarea datelor din cursor;
- UpdateCursor ce permite și actualizarea datelor din cursor;
- InsertCursor care permite adăugarea de date în cursor.
Pentru a înțelege mai bine conceptul, se consideră tabela populație și se dorește a se calcula suma
valorilor câmpului cp care stochează populația în orașe mari pentru fiecare județ în parte.
import arcpy
import arcpy.da as da
rd_col = [randuri for randuri in da.SearchCursor("populatie", ("cp"))]
s=0
for val in rd_col:
s += val[0]
Scriptul urmărește într-o primă etapă să formeze o colecție de tupluri formată din tuplurile unui cursor
de tip SearchCursor. Colecția se stochează în variabila rd_col care este de fapt o listă de tupluri (randuri)
care fac parte din cursorul menționat. In limbaj, variabilele de tip listă de valori sunt indicate prin [ ]
specificând fie în mod explicit elementele listei fie în mod comprehensiv ca în exemplul de mai sus.
Cursorul, după cum se observă, este format din tuplurile tabelei populatie și acestea au doar un singur
câmp (cp). După ce a fost formată colecția, elementele ei au fost iterate prin instructiunea for în vederea
efectuării sumei valorilor care s-a stocat în variabila s. Extragerea valorii câmpului cp din tuplu s-a
realizat prin referirea acestuia folosind adresarea indexată precizând poziția câmpului în lista de câmpuri
indicată în cursor, primul fiind pe poziția 0; în exemplu, construcția val[0].
O altă alternativă ar fi să construim o listă cu valorile reprezentând populația din județe și apoi să aplicăm
funcția sum pe elementele colecției pentru a obține suma valorilor:
import arcpy
import arcpy.da as da
rd_col = [randuri[0] for randuri in da.SearchCursor("populatie", ("cp"))]
s=sum(rd_col)
Să presupunem că în tabela populatie avem campul pondere_cp de tip double care trebuie încărcat cu
valorile corespunzătoare astfel încât acesta să stocheze ponderea populației în orașe mari a unui județ în
total populație în orașe mari pe România. Suma populației în orașe mai în România a fost deja calculată
și stocată în variabila s iar pentru a calcula ponderile este necesar să construim un UpdateCursor în
vederea actualizării câmpului pondere_cp. Scriptul va continua cu secvența de cod:
Variabila crs este returnată de UpdateCursor care se construiește pe tabela populatie și conține
câmpurile cp și pondere_cp. Folosind instrucțiunea with se specifică blocul de instrucțiuni care se vor
executa cu cursorul crs. Astfel, pentru fiecare tuplu se calculează valoarea campului pondere_cp referit
prin rd[1] pe baza campului cp (rd[0]) si a sumei s. Construcția float() convertește operandul la un
număr real ca împărțirea să furnizeze rezultatul tot ca număr real. După actualizarea valorilor
câmpurilor, prin apelul metodei updateRow a cursorului crs, noile valori vor fi scrise în tabela populație.
O altă alternativă pentru a realiza același lucru constă în a itera tuplurile cursorului prin intermediul
iteratorului generat de UpdateCursor. Aceasta este o metodă mai generală pentru că se poate folosi și
17
pentru alte colecții cărora li se asociază iteratori. Astfel, funcțiile utilizate pe iterator sunt: reset() care
resetează iteratorul pe poziția inițială în colecție și next() care asigură trecerea la următorul element din
colecție. Codul devine:
crs = da.UpdateCursor('populatie',("cp", "pondere_cp"))
crs.reset()
rd = next(crs, None)
while(rd!=None):
rd[1] = float(rd[0])/s
crs.updateRow(rd)
rd = next(crs, None)
del crs
Funcția next() returnează în rd tuplul din cursor sau în caz că nu mai sunt tupluri în colecție returnează
None. Ultima linie (del crs) eliberează memoria asociată cursorului adică șterge variabila din memorie.
Pentru a înlănțui un script în cadrul unui flux al unui model de geoprocesare acesta trebuie să primească
și / sau să returneze parametri. Dacă și alte operații urmează după script atunci acesta trebuie să returneze
elemente pentru a se putea lega și alte operații care folosesc rezultatul scriptului, ca parametru de intrare.
Pasul 1. Construirea unui script care calculează densitatea pentru un poligon pornind de la
drumurile existente în acesta. Folosind un SearchCursor se determină suma lungimilor liniilor iar cu un
UpdateCursor se actualizează câmpul c_rez din tabelă cu densitatea liniilor.
import arcpy
import arcpy.da as da
lin_jud = arcpy.GetParameterAsText(0)
id_uad = arcpy.GetParameter(1)
uad = arcpy.GetParameter(2)
c_rez = arcpy.GetParameter(3)
llung = [rd[0] for rd in da.SearchCursor(lin_jud, ("SHAPE@LENGTH"))]
sl = sum(llung)
with da.UpdateCursor(uad, (c_rez,"SHAPE@AREA"), "OBJECTID = "+str(id_uad)) as crs:
for rd in crs:
rd[0] = sl / rd[1] * 10000
crs.updateRow(rd)
arcpy.SetParameter(4,uad)
18
Fiecare poligon este iterat cu ajutorul interatorului Iterate Feature Selection care returnează poligonul
respectiv și Value (valoarea câmpului ObjectId). Poligonul returnat este folosit în instrumentul Clip
pentru a putea fi decupate linii din interiorul său. Rezultatul operației Clip, valoarea variabilei Value,
dar și layer-ul ce conține poligoanele și variabila Nume camp reprezință toți parametrii de intrare pentru
scriptul realizat la pasul 1. Parametrul de ieșire rezultat derivă din input (layer-ul cu poligoanele) având
setat câmpul cu densitățile corespunzătoare.
Pasul 3. Crearea unui script care simbolizează un strat tematic cu poligoanele pe baza câmpului
ce stochează densitățile. Acest script a fost prezentat în acest capitol.
import arcpy
spol = arcpy.GetParameterAsText(0)
slin = arcpy.GetParameterAsText(1)
scamp = arcpy.GetParameter(2)
prj = arcpy.mp.ArcGISProject("CURRENT")
harta = prj.listMaps("Map")[0]
rezl = vh_layers(harta, spol, slin)
simb = rezl.symbology
simb.updateRenderer('GraduatedColorsRenderer')
simb.renderer.classificationField = scamp
simb.classificationMethod = 'NaturalBreaks'
simb.renderer.breakCount = 4
simb.renderer.colorRamp = prj.listColorRamps('Oranges (Continuous)')[0]
rezl.symbology = simb
arcpy.SetParameter(3,True)
19
Pasul 4. Crearea modelului principal. Procesul începe prin verificarea în layer-ul cu poligoane
dacă există câmpul în care se va scrie rezultatul final. Dacă există, se foloseste instrumentul Calculate
Field pentru a reseta valoarea lui cu 0, iar dacă nu există se folosește instrumentul Add Field pentru a
putea fi adăugat. Operațiile alternative se pot defini deoarece se folosește instrumentul If Field Exists
care implementează o structură alternativă în funcție de valoarea returnată: True sau False. Pentru a
reuni cele două ramuri generate de structura alternativă s-a folosit instrumentul Merge Branch.
Rezultatul acestuia va fi unul dintre parametrii de intrare al modelului realizat la pasul 2, alături de
variabila Camp_rez și layer-ul cu linii (Linii). Ultima operație pe care o realizează modelul este de a
apela scriptul, realizat în pasul 3, pentru a simboliza pe hartă densitatea calculată.
Apelarea modelului pentru a calcula și vizualiza densitatea râurilor pe regiuni se prezintă în figura 24.
20
Figura 24. Interfața si vizualizarea rezultatului în urma execuției modelului
Un al doilea studiu de caz se referă la posibilitatea de a determina orașele care se află de-a lungul
unei linii (ex drum, râu sau cale ferată) la o distanță de 5 km în jurul lui. Pe hartă va apare doar linia
selectată, și localitățile simbolizate diferit în funcție de categoria acestora: capitala țării, reședință de
județ, municipiu sau oraș.
Pentru rezolvarea problemei a fost creat modelul următor care conține pe lângă instrumente de
procesare, o structură pseudo-alternativă și un script pentru simbolizarea localităților.
21
Fluxul începe de la doi parametri: linia – reprezintă layer-ul cu date de tip linie și Expression – reprezintă
clauza where (expresia de selecție) prin care selectăm elementele de tip linie în raport de care identificăm
localitățile. Următorul pas constă în selecția, prin atribute nonspațiale, a liniilor din stratul tematic de tip
linie iar apoi testăm dacă există elemente selectate caz în care fluxul continuă cu alte operații, iar dacă
nu există, acesta se oprește. Următoarea operație este de a selecta localitățile care se află de-a lungul
elementelor de tip linie, selectate anterior, cu ajutorul instrumentului Select Layer By Location.
Elementele selectate sunt reținute în tabele distincte, sunt deselectate din layerele respective, apoi ramân
vizibile doar aceste pe hartă din categoria linii respectiv puncte. Ultima operație din flux se referă la
execuția scriptului de simbolizare a localităților în funcție de tipul lor.
Scriptul de simbolizare implementează o simbologie de tip Unique Value:
import arcpy
spt = arcpy.GetParameterAsText(0)
sln = arcpy.GetParameterAsText(1)
prj = arcpy.mp.ArcGISProject("CURRENT")
harta = prj.listMaps("Map")[0]
llyrs = harta.listLayers()
for lyr in llyrs:
desc = arcpy.Describe(lyr)
if (desc.shapeType == "Point") or (desc.shapeType == "Polyline"):
lyr.visible = False
sln.replace("\\","/")
spt.replace("\\","/")
harta.addDataFromPath(sln)
harta.addDataFromPath(spt)
22
llyrs = harta.listLayers()
arcpy.SetParameter(2,False)
for lyr in llyrs:
if lyr.name == "loc_sel":
simb = lyr.symbology
simb.updateRenderer('UniqueValueRenderer')
simb.renderer.fields = ['TIP']
for grp in simb.renderer.groups:
for itm in grp.items:
tv = itm.values[0][0]
if str(tv) == "1":
itm.symbol.color = {'RGB': [255, 0, 0, 100]}
itm.symbol.size = 14
itm.label = "Capitala"
elif str(tv) == "2":
itm.symbol.color = {'RGB': [255, 0, 0, 100]}
itm.symbol.size = 7
itm.label = "Resedinta judet"
elif str(tv) == "3":
itm.symbol.color = {'RGB': [0, 0, 255, 100]}
itm.symbol.size = 5
itm.label = "Municipiu"
elif str(tv) == "4":
itm.symbol.color = {'RGB': [0, 255, 0, 100]}
itm.symbol.size = 4
itm.label = "Oras"
else:
itm.symbol.color = {'RGB': [0, 0, 0, 100]}
itm.symbol.size = 3
itm.label = "Sat"
lyr.symbology = simb
lyr.showLabels = True
arcpy.SetParameter(2,True)
Interfața modelului și rezultatul rulării lui pentru a obține localitățile de-a lungul drumului
național 1 (DN1) cu simbolizarea acestora se poate observa în figura 25.
23
Figura 25. Interfața si vizualizarea rezultatului în urma execuției modelului
24