UNIVERSITATEA „ALEXANDRU IOAN CUZA” IAŞI
FACULTATEA DE INFORMATICĂ
LUCRARE DE LICENŢĂ
Instrumente GIS de calcul a utilității resimțite de
clienții supermarketurilor.
Studiu de caz: municipiul Iași
propusă de
Șutea-Drăgan Silviu
Sesiunea: iunie-iulie, 2016
Coordonator ştiinţific
Asist. Dr. Vasile Alaiba
UNIVERSITATEA „ALEXANDRU IOAN CUZA” IAŞI
FACULTATEA DE INFORMATICĂ
Instrumente GIS de calcul a utilității resimțite de
clienții supermarketurilor.
Studiu de caz: municipiul Iași
Șutea-Drăgan Silviu
Sesiunea: iunie-iulie, 2016
Coordonator ştiinţific
Asist. Dr. Vasile Alaiba
DECLARAŢIE PRIVIND ORIGINALITATE ŞI RESPECTAREA
DREPTURILOR DE AUTOR
Prin prezenta declar că Lucrarea de licenţă cu titlul „ Instrumente GIS de calcul a
utilității resimțite de clienții supermarketurilor. Studiu de caz: municipiul Iași” este scrisă de
mine şi nu a mai fost prezentată niciodată la o altă facultate sau instituţie de învăţământ superior
din ţară sau străinătate. De asemenea, declar că toate sursele utilizate, inclusiv cele preluate de
pe Internet, sunt indicate în lucrare, cu respectarea regulilor de evitare a plagiatului:
- toate fragmentele de text reproduse exact, chiar şi în traducere proprie din altă limbă,
sunt scrise între ghilimele şi deţin referinţa precisă a sursei;
- reformularea în cuvinte proprii a textelor scrise de către alţi autori deţine referinţa
precisă;
- codul sursă, imaginile etc. preluate din proiecte open-source sau alte surse sunt utilizate
cu respectarea drepturilor de autor şi deţin referinţe precise;
- rezumarea ideilor altor autori precizează referinţa precisă la textul original.
Iaşi, 23.06.2016
Absolvent Șutea-Drăgan Silviu
___________________________
DECLARAŢIE DE CONSIMŢĂMÂNT
Prin prezenta declar că sunt de acord ca Lucrarea de licență cu titlul „ Instrumente GIS
de calcul a utilității resimțite de clienții supermarketurilor. Studiu de caz: municipiul Iași”,
codul sursă al programelor şi celelalte conţinuturi (grafice, multimedia, date de test etc.) care
însoţesc această lucrare să fie utilizate în cadrul Facultăţii de Informatică.
De asemenea, sunt de acord ca Facultatea de Informatică de la Universitatea „Alexandru
Ioan Cuza” Iași să utilizeze, modifice, reproducă şi să distribuie în scopuri necomerciale
programele-calculator, format executabil şi sursă, realizate de mine în cadrul prezentei lucrări
de licenţă.
Iaşi, 23.06.2016
Absolvent Șutea-Drăgan Silviu
_________________________
Lista figurilor
Fig. 1: Tipuri de vertecși: punct, polilinie, poligon ...................................................... 10
Fig. 2: Straturi componente ale unui SIG ..................................................................... 11
Fig. 3: Ciclul informațiilor geospațiale......................................................................... 12
Fig. 4: Modelul vector vs. modelul raster ..................................................................... 13
Fig. 5: Modelul arhitectural al Web-GIS-ului .............................................................. 15
Fig. 6: Utilitatea totală vs. utilitatea marginală ............................................................ 17
Fig. 7: Meniul aplicației ............................................................................................... 20
Fig. 8: Geocodaj și măsurători ...................................................................................... 21
Fig. 9: Geo-localizare și culegere de informații spațiale .............................................. 23
Fig. 10: Meniul de confirmare a datelor editate ........................................................... 25
Fig. 11: Vizualizarea pe server ..................................................................................... 25
Fig. 12: Structura tabelei cu supermarketuri ................................................................ 26
Fig. 13: Structura tabelei cu locuințe ............................................................................ 27
Fig. 14: Fluxul de lucru al instrumentului de calcul al utilității ................................... 31
Fig. 15: Interfața din ArcGIS a instrumentului ............................................................ 34
Fig. 16: Harta finală cu rezultatele analizei .................................................................. 35
6
Cuprins
Contribuţii .............................................................................................................................. 8
Capitolul 1: Delimitări conceptuale ....................................................................................... 9
1.1 Strucrura Sistemelor Informaționale Geografice ..................................................... 9
1.2 ArcGIS și ArcPy ..................................................................................................... 13
1.2 Web-GIS-ul ............................................................................................................ 14
1.3 Utilitatea din punct de vedere economic ............................................................... 16
Capitolul 2: Crearea unei aplicații Android pentru colectarea datelor spațiale ................... 19
Capitolul 3: Automatizarea analizei datelor colectate ......................................................... 26
Concluzii .............................................................................................................................. 36
Bibliografie .......................................................................................................................... 37
7
Introducere
Sistemele Informaționale Geografice (SIG, en. GIS - geographic information systems)
au devenit în ultimul timp din ce în ce mai prezente în viața noastră de zi cu zi și datorită
dezvoltării puterii de calcul a dispozitivelor mobile. Pe acest segment, cele mai populare
aplicații aparțin celor de la Google, însă unul dintre cele mai populare programe de analiză
spațială este ArcGIS, care a fost dezvoltat gigantului american ESRI (Environmental Systems
Research Institute), inițial doar ca aplicație desktop.
Ca răspuns la evoluția tehnologică, ESRI a intrat tot mai mult pe segmentul on-line și
mobile, introducând componente de legătura cu web-ul în aplicația sa, ori dezvoltând interfețe
de programare a aplicațiilor pentru web și mobile.
În prezent, pe lângă WebAppBuilder, o platformă cu ajutorul căreia un utilizator fără
cunoștințe de programare, poate să construiască aplicații de analiză geo-spațială, pe pagina
ESRI dedicată programatorilor se găsesc kituri de dezvoltare de aplicații pentru câteva dintre
cele mai populare platforme în acest moment, precum Android, Java, .NET, iOS, OS X,
Xamarin sau Qt.
De asemenea, cu aproximativ un an în urmă, cei de la ESRI au lansat și o aplicație pentru
Android, iOS și Windows utilizată pentru colectarea datelor din teren, cu ajutorul unui
dispozitiv mobil. Datele astfel colectate, sunt salvate pe un server pus la dispoziție de ESRI, de
unde pot fi exportate în diverse formate, pentru a fi analizate fie în aplicația desktop, fie în alte
programe de analiză a datelor geospațiale sau chiar în aplicația on-line a celor de la ESRI.
Se observă astfel, interesul crescut al companiei americane de a oferi servicii tot mai
complete și mai diverse utilizatorilor de date spațiale, acest lucru constituind premisa pentru
încercarea din această lucrare de a construi un mijloc de analiză care să utilizeze numai
interfețele și serviciile puse la dispoziție de ESRI.
8
Contribuţii
Având în vedere multitudinea de posibilități de dezvoltare a unei aplicații care să
prelucreze date geo-spațiale, am ales ca în această lucrare să realizez un exemplu de analiză
completă asupra unui subiect de interes, acest lucru cuprinzând inclusiv crearea propriei
aplicații de colectare a datelor cu ajutorului unui dispozitiv mobil care rulează Android, precum
și crearea mai apoi a unui instrument care să automatizeze procesul de prelucrare a datelor
colectate.
Subiectul ales este calculul utilității resimțite de potențialii clienți în accesarea unui
serviciu oferit de supermarketurile existente în proximitatea sa, în funcție de distanța dintre
client și magazin precum și de o variabilă de atractivitate, care va fi considerată în acest proiect
suprafața de vânzare a magazinului respectiv, considerând că aceasta este proporțională cu
eventuala dorință a clientului de a utiliza serviciile oferite de respectivul supermarket.
A fost folosit kitul de dezvoltare pentru Android pus la dispoziție de cei de la ESRI, iar
pentru crearea instrumentului de prezlucrare a datelor, a fost utilizat modulul de scripting
dezvoltat în Python pentru ArcGIS. Pentru stocarea datelor fost utilizat serverul REST pus la
dispoziție de ESRI.
Practic, ceea ce s-a urmărit a fost dezvoltarea unui instrument de colectare a datelor
spațiale punctuale, iar datele culese să fie procesate automat prin crearea unui script, pentru a
se evita repetarea tuturor pașilor necesari apelării instrumentelor intermediare în cadrul unui
proces de analiză.
Se evită astfel pierderea a cel puțin 7 minute pe care un operator ar trebui să le petreacă
apelând diverse instrumente, iar posibilitatea de apariție a erorilor este mult diminuată întrucât
nu mai este nevoie a fi efectuate manual anumite instrucțiuni repetitive.
9
Capitolul 1
Delimitări conceptuale
1.1 Strucrura Sistemelor Informaționale Geografice
GIS (Geographic Information Systems) este o tehnologie relativ nouă, dar, în ciuda
recentei apariţii, este utilizată deja la scară largă în cele mai diverse domenii. O încercare de
definire a acestui acronim poate fi uneori dificilă, deoarece fiecare disciplină a adoptat şi adaptat
tehnologia cerinţelor proprii.
Se mai pot distinge câteva componente ale unui proiect GIS, dintre care cele mai
importante sunt următoarele: componenta software, componenta hardware şi componenta
umană.
Componenta software trebuie să conţină obligatoriu o bază de date spaţială care
stochează şi gestionează entităţile spaţiale, un mecanism de legătură dintre acestea şi atributele
acordate, precum şi un motor de geoprocesare a informaţiilor. Desigur aici se pot adăuga, de
asemenea, toate modulele care ajută la colectarea datelor şi, în mod evident, şi la diseminarea
lor. Dintre cele mai renumite pachete disponibile în comerţ putem menţiona ArcGIS, Idrisi,
QGIS şi Grass GIS, dintre ultimele 2 sunt open sourse.
Partea hardware constă în calculatorul propriu-zis alături de toate componentele sale,
instrumentele de înregistrare a datelor (staţie totală, GPS, dispozitive de cercetare nedistructivă)
şi accesoriile necesare pentru vizualizarea şi imprimarea rezultatelor. Printre acestea, în ultimii
ani, telefoanele mobile și-au făcut loc din ce în ce mai mult.
Ultima componentă, cea umană, este crucială pentru un proiect de GIS, ţinând cont că
este responsabilă de proiectarea şi analiza datelor spaţiale. Important de menţionat este
obligatoria angrenare a personalului din proiect, pe cât posibil, în toate fazele de derulare
(proiectare, colectare, digitizare, procesare) pentru a crea un material unitar şi bine structurat.
În cadrul unei platforme GIS putem distinge patru mari categorii de activităţi sau
subsisteme după cum urmează:
- Achiziţionarea, integrarea şi verificarea datelor
Informaţiile spaţiale, înainte de integrarea lor într-un proiect GIS, trebuie transformate
într-o formă utilizabilă de program. De obicei, formele de bază ale datelor spațiale sunt
10
reprezentate de hărţi, desene, tabele, fotografii aeriene, imagini satelitare etc. Odată introduse
în sistem, urmează etapa de acordare a atributelor. Cea mai comună metodă de introducere a
datelor într-un sistem GIS este digitizarea. Hărţile, planurile, schiţele etc. pot fi, de asemenea,
scanate, georeferenţiate şi importate sub formă de raster. Informaţiile obţinute din aplicaţiile de
teren în care sunt utilizate staţia totală, GPS-ul sau chiar telefonul mobil pot fi introduse în GIS
sub formă de vector. Aceste două tipuri de date la care am făcut referire (raster şi vector),
reprezintă formatele de bază pentru alcătuirea unui proiect GIS.
Fig. 1: Tipuri de vertecși: punct, polilinie, poligon
(preluată de pe http://www.tankonyvtar.hu/en/tartalom/tamop425/0032_terinformatika/ch01s02.html)
- Întocmirea şi gestionarea bazei de date spaţiale
Baza de date spaţială este considerată una dintre principalele subramuri ale sistemului care face
diferenţa dintre GIS şi alte programe de cartografiere sau grafică. Într-un proiect de tip GIS,
volumul de informaţie este structurat în straturi (layers) şi stocat în DBMS-uri (Database
Management System) sub formă de tabele şi hărţi tematice. O bază de date spaţială trebuie să
cuprindă funcţii pentru actualizare, editare şi manipulare ale datelor de tip atribut şi ale celor de
tip grafic.
11
Fig. 2: Straturi componente ale unui SIG
(preluată de pe http://www.tankonyvtar.hu/en/tartalom/tamop425/0032_terinformatika/ch01s02.html)
- Modelarea şi analiza datelor
În această etapă se oferă posibilitatea utilizatorului de a efectua analize, interogări,
transformări şi modelări ale datelor. Cu ajutorul acestui subsistem utilizatorul poate accesa
funcţiile necesare analizelor pentru cercetarea sa, având posibilitatea, permanent, să fie conectat
la baza de date, efectuând interogări în baza informaţiei existente. Pe scurt, manipularea
informaţiei în GIS oferă posibilitatea creării de noi hărţi tematice pe baza celor deja stocate,
rezultând straturi primare şi secundare.
- Vizualizarea şi diseminarea rezultatelor
Rezultatele finale pot fi vizualizate şi exportate sub formă de hărţi, tabele, grafice, animaţii
video etc. La principalele categorii prezentate anterior, se poate adauga interfaţa programului
de care beneficiază utilizatorul, considerată la fel de importantă deoarece facilitează crearea şi
trimiterea comenzilor către sistem, precum şi receptarea şi vizualizarea rezultatelor.
12
Fig. 3: Ciclul informațiilor geospațiale
(preluată de pe http://www.tankonyvtar.hu/en/tartalom/tamop425/0032_terinformatika/ch01s02.html)
Transpunerea şi reproducerea digitală, sub formă de hărţi, a realităţii înconjurătoare cu
ajutorul GIS-ului se fac pe baza atributelor entităţilor geografice existente (dimensiuni, culoare,
formă) şi a unui sistem de coordonate ce defineşte spaţial poziţia acestora. Grafic, entităţile pot
fi reprezentate sub formă de punct (poziţia unui artefact), linie (râu, drum) şi poligon (suprafaţa
unui sit arheologic) la care se adaugă etichetele ce conţin explicaţii în legătura cu definirea
respectivelor reprezentări. În aplicaţiile dedicate cercetării științifice care folosesc componente
GIS, există două tipuri de simbolizări ale datelor, fiecare cu avantaje şi dezavantaje, ce diferă
fundamental prin modelul spaţial pe care îl implementează: vector şi raster.
Sistemul de reprezentare raster stochează informaţia sub forma unei matrice
rectangulare alcătuită din celule sau pixeli, fiecare conţinând date referitoare la o poziţie
geografică anume. Astfel, o suprafaţă afişată sub formă de raster va fi definită în funcţie de
numărul de coloane şi rânduri dintr-un grid, precum şi de mărimea fiecărui pixel. Valorile
deţinute de celulele rasterului pot fi dintre cele mai diverse. În cazul unui model numeric al
terenului, spre exemplu, acestea trebuie să afişeze informaţiile legate de poziţia şi altitudinea în
zona respectivă, pe când în situaţia unei hărţi a pantelor valorile vor fi exprimate în grade.
Într-o structură de tip vector însă, entităţile geografice înconjurătoare sunt reprezentate
prin puncte, linii şi poligoane, elemente grafice denumite şi primitive. Fiecare dintre acestea
este definită, la rândul său, folosind una sau mai multe perechi de coordonate x, y, intitulate
vertexuri. Într-un sistem vector, pentru a putea manipula şi gestiona cât mai bine elementele
grafice ce alcătuiesc un strat tematic (layer) în proiectul de GIS, trebuie stabilite anumite relaţii
topologice pentru acestea.
13
Fig. 4: Modelul vector vs. modelul raster
(preluată de pe http://www.catalonia.org/cartografia/Clase_03/Raster_Vector.html)
Majoritatea dintre programele GIS oferă posibilitatea lucrului cu ambele tipuri de date
şi pune la dispoziţie funcţii de transformare din raster în vector şi invers. Această capacitate se
dovedeşte a fi una esenţială pentru utilizator, deoarece are posibilitatea alegerii sistemului
potrivit necesităţilor sale.
1.2 ArcGIS și ArcPy
ArcGIS este un sistem informatic geografic pentru lucrul cu hărți și informații
geografice. Acesta este utilizat pentru: crearea și utilizarea hărților; compilarea datelor
geografice; analiza informațiilor spațiale; schimbul de informații și descoperirea de informații
geografice, folosind hărți și informații geografice într-o gamă largă de aplicații și gestionarea
informațiilor geografice într-o bază de date.
Sistemul oferă o infrastructură pentru realizarea de hărți și informații geografice
disponibile în cadrul unei organizații, într-o comunitate, și în mod deschis pe Web.
ArcGIS include următoarele componente software pentru desktop:
14
- ArcReader, ceea ce permite vizualizarea și interogarea hărților create cu celelalte
produse ArcGIS;
-ArcGIS Desktop, care este licențiat sub trei niveluri de funcționalitate:
- ArcGIS Desktop Basic (cunoscut anterior ca ArcView), care permite
vizualizarea datelor spațiale, crearea de hărți stratificate și efectuarea analizelor spațiale
de bază;
- ArcGIS Desktop Standard (cunoscut anterior ca ArcEditor), care, în plus față
de funcționalitatea ArcView, include instrumente mai avansate pentru manipularea
fișierelor de tip shapefile și geodatabase;
- ArcGIS Desktop avansat (cunoscut anterior ca ArcInfo), care include
capabilități de manipulare a datelor, editare și analiză.
ArcGIS Online este un sistem GIS online, bazat pe colaborare, care permite utilizarea,
crearea şi partajarea de hărţi, scene, aplicaţii, straturi tematice, analize şi date. Se oferă astfel
acces la hărţi gata de utilizare, aplicaţii şi serviciul cloud ESRI securizat, în care se pot adăuga
elemente şi publica straturi tematice web. Deoarece ArcGIS Online face parte integrantă din
sistemul ArcGIS, poate fi utilizat pentru a extinde capabilităţile ArcGIS for Desktop, ArcGIS
for Server, ArcGIS Web APIs şi ArcGIS Runtime SDK [8].
ArcPy este un modul Python, care oferă o modalitate utilă și productivă pentru a efectua
analiza datelor geografice, conversie de date și gestionare a lor, precum și posibilitatea
automatizării procesului de creare a hărților cu Python.
Prin acest pachet, dezvoltatorii GIS beneficiază de toate avantajele folosirii unui limbaj
de programare. Marele câștig obșinut prin utilizarea ArcPy este că Python este un limbaj de
programare de uz general. Este interpretat și dinamic, potrivit pentru realizarea de script-uri
fiind în același timp suficient de puternic pentru a scrie aplicații mari. Instrumentele ArcGIS
scrise în ArcPy sunt dezvoltate ca module suplimentare fiind posibilă utilizarea lor în scopuri
diferite [9].
1.2 Web-GIS-ul
Web-GIS-ul este un tip de sistem informatic distribuit, care cuprinde cel puțin un server
și un client, în cazul în care serverul este un server GIS, iar clientul este un browser web,
aplicatie desktop sau aplicație mobilă. În forma sa cea mai simplă, GIS-ul web poate fi definit
ca orice GIS care utilizeaza tehnologia web pentru a comunica între un server și un client.
15
Elementele esențiale pentru Web-GIS sunt:
- Serverul are o adresă URL, astfel încât clienții îl pot găsi pe web.
- Clientul se bazează pe specificațiile HTTP pentru a trimite cereri către server.
- Serverul efectuează operațiunile GIS solicitate și trimite răspunsurile la client prin
HTTP.
- Formatul răspunsului trimis la client poate fi în mai multe formate, cum ar fi HTML,
imagini binare, XML (Extensible Markup Language), sau JSON (JavaScript Object
Notation).
Fig. 5: Modelul arhitectural al Web-GIS-ului
(preluată de pe http://www.esri.com/esri-news/arcnews/winter1314articles/arcgis-for-desktop-now-includes-arcgis-online-
subscription)
În această lucrare s-au folosit componente ale Web-GIS-ului prin utilizarea serverului
pe care se stochează informațiile colectate cu ajutorul aplicației pentru Android, care
funcționează astfel ca un client.
16
1.3 Utilitatea din punct de vedere economic
Cererea este unul dintre elementele esențiale pentru înțelegerea mecanismelor pieței.
Teoria consumatorului reflectă în acest sens unele elemente semnificative pentru analiza cererii.
Funcția obiectiv a oricărui individ rațional este satisfacerea maximă posibilă a nevoilor,
adică maximizarea efectelor utile prin minimizarea eforturilor. În cazul consumatorului aceasta
se traduce prin maximizarea satisfacției totale pe care oamenii speră să o obțină prin consumul
diverselor bunuri sau servicii. În economie, satisfacția scontată se obține prin consum și este
desemnată prin termenul generic de utilitate.
Utilitatea reflectă satisfacția sau plăcerea pe care un consumator anticipează să o obțină
prin consum.
În teoria și practica economică se opereaza cu conceptele de utilitate totală și utilitate
marginală. Ambele noțiuni arată dependența specifica a gradului de satisfacere a nevoilor de
cantitatea (doza) consumată dintr-un anumit bun [1].
Utilitatea totală arată care este satisfacția totală sau plăcerea pe care o persoană
anticipează să o obțină prin consumul unei cantități (doze) dintr-un bun.
Formula de calcul a utilității totale este:
UT = ∑Ui ,unde
UT – utilitatea totală
Ui – utilitatea individuală atribuită unității consumate.
Utilitatea marginală reprezintă satisfacția suplimentară pe care speră să o poată obține
un consumator prin consumul unei unități suplimentare dintr-un bun, ceilalți factori fiind
presupuși constanți.
Formula de calcul a utilității marginale este:
UM = ∆UT / Q∆, unde
UM – utilitatea marginală
UT – utilitatea totală scontată a se obține
Q – cantitatea consumată dintr-un bun.
Din punct de vedere economic, utilitatea marginală arată care este pragul până la care
se justifică consumul unui anumit bun sau serviciu.
17
Exemplu:
Fig. 6: Utilitatea totală vs. utilitatea marginală
- pe măsură ce individul va consuma din ce in ce mai multă pâine, utilitatea totală va crește,
dar cu o rată din ce în ce mai mică. Utilitatea totală scontată a se obține atinge un punct de
maxim (de 30 de utili). Dacă se continuă consumul după atingerea acestui punct, utilitatea
totală scade;
- utilitatea marginală scade pe măsură ce crește cantitatea consumată. Ea devine zero atunci
când utilitatea totală este maximă și este negativă (-2) atunci când utiltatea totală scade (de
la 30 la 28).
Pentru calcularea utilității pentru fiecare locuință din Iași în cadrul prezentei lucrări,
s-a folosit următoarea formulă:
[P_DIST] * Log (1 / [NEAR_DIST] ) + [P_MASA] * Log ([MASA]), unde
18
P_DIST – ponderea distanței dintre client și market
P_MASA – ponderea suprafeței de vânzare a marketului
NEAR_DIST – distanța dintre client și market
MASA - suprafeța de vânzare a marketului.
Formula utilizată permite rularea modelului cu valori diferite ale valorilor pentru
ponderea distanței și ponderea suprafeței magazinului.
19
Capitolul 2
Crearea unei aplicații Android pentru colectarea datelor spațiale
Deoarece s-a dorit familiarizarea cu kit-ul de dezvoltare a aplicatiilor Android a celor
de la ESRI, am ales să creez o aplicație care să realizeze doar ceea ce am nevoie pentru
realizarea prezentului proiect, folosind și exemple din documentația pusă la dispoziție pe
https://developers.arcgis.com. Totuși, au fost adăugate câteva elemente care aduc un plus de
funcționalitate.
Pentru a folosi librăria dezvoltată pentru Android, estte necesară includerea în proiect a
acesteia,
repositories {
jcenter()
// Add the following ArcGIS repository
maven {
url 'https://esri.bintray.com/arcgis'
}
}
iar în fișierul build.gradle este necesară includerea a ArcGIS Runtime SDK for Android
dependencies {
compile 'com.esri.arcgis.android:arcgis-android:10.2.8'
}
Aplicația permite vizualizarea a 3 tipuri de hărți de bază (basemap), așa cum se poate
vedea în figura de mai jos.
Acestea se pot schimba din meniul principal al aplicației, fiind obiecte de tip
MapOptions:
final MapOptions mTopoBasemap = new MapOptions(MapOptions.MapType.TOPO);
final MapOptions mStreetsBasemap = new
MapOptions(MapOptions.MapType.STREETS);
final MapOptions mNatGeoBasemap = new
MapOptions(MapOptions.MapType.NATIONAL_GEOGRAPHIC);
20
Fig. 7: Meniul aplicației
View-ul este un obiect din clasa MapView, declarat inițial null și inițializat la crearea
activității.
MapView mMapView = null;
public void onCreate(Bundle savedInstanceState) {
…
// Retrieve the map and initial extent from XML layout
mMapView = (MapView) findViewById(R.id.map);
...
}
Cu opțiunea de Geocoding, se poate căuta în aplicație orice locație existentă în baza de
date ESRI. Apoi se pot realiza măsurători pentru distanță sau arie, care pot fi exprimate în
diferite unități de masură.
21
Fig. 8: Geocodaj și măsurători
Pentru realizarea măsurătorilor, mai întâi se setează unitățile apoi se apelează funcția
de măsurare. Aceasta este executată pe server.
SimpleMarkerSymbol markerSymbol = new SimpleMarkerSymbol(Color.BLUE, 10,
SimpleMarkerSymbol.STYLE.DIAMOND);
SimpleLineSymbol lineSymbol = new SimpleLineSymbol(Color.YELLOW, 3);
fillSymbol = new SimpleFillSymbol(Color.argb(100, 0, 225, 255));
fillSymbol.setOutline(new SimpleLineSymbol(Color.TRANSPARENT, 0));
// create the tool, required.
MeasuringTool measuringTool = new MeasuringTool(mMapView);
// customize the tool, optional.
measuringTool.setLinearUnits(linearUnits);
measuringTool.setMarkerSymbol(markerSymbol);
measuringTool.setLineSymbol(lineSymbol);
measuringTool.setFillSymbol(fillSymbol);
// fire up the tool, required.
startActionMode(measuringTool);
Pentru găsirea locațiilor, se trimite numele de căutat serverului, unde se execută
căutarea, iar la client se face afișarea.
22
protected void onPostExecute(List<LocatorGeocodeResult> result) {
...
// Use first result in the list
LocatorGeocodeResult geocodeResult = result.get(0);
// get return geometry from geocode result
Point resultPoint = geocodeResult.getLocation();
// create marker symbol to represent location
SimpleMarkerSymbol resultSymbol = new SimpleMarkerSymbol(
Color.RED, 16, SimpleMarkerSymbol.STYLE.CROSS);
// create graphic object for resulting location
Graphic resultLocGraphic = new Graphic(resultPoint,
resultSymbol);
// add graphic to location layer
mLocationLayer.addGraphic(resultLocGraphic);
// create text symbol for return address
String address = geocodeResult.getAddress();
TextSymbol resultAddress = new TextSymbol(20, address,
Color.BLACK);
// create offset for text
resultAddress.setOffsetX(-4 * address.length());
resultAddress.setOffsetY(10);
// create a graphic object for address text
Graphic resultText = new Graphic(resultPoint, resultAddress);
// add address text graphic to location graphics layer
mLocationLayer.addGraphic(resultText);
// Zoom map to geocode result location
mMapView.zoomToResolution(geocodeResult.getLocation(), 7);
}
}
Cea mai importantă facilitate a acestei aplicații este partea de editare, care oferă și
opțiunea de localizare a utilizatorului cu ajutorul GPS-ului, pentru a introduce noi date spațiale
pe serverul pregătit să le înregistreze.
23
Fig. 9: Geo-localizare și culegere de informații spațiale
Pentru partea de localizare este responsabil un obiect din clasa
LocationDisplayManager care afișează locația curentă a dispozitivului în MapView.
LocationDisplayManager mLDM;
// When map is ready, set up the LocationDisplayManager.
final OnStatusChangedListener statusChangedListenerForLoc = new
OnStatusChangedListener() {
private static final long serialVersionUID = 1L;
@Override
public void onStatusChanged(Object source, STATUS status) {
if (source == mMapView && status == STATUS.INITIALIZED) {
mMapSr = mMapView.getSpatialReference();
if (mLDM == null) {
setupLocationListener();
}
}
}
};
private void setupLocationListener() {
if ((mMapView != null) && (mMapView.isLoaded())) {
mLDM = mMapView.getLocationDisplayManager();
mLDM.setLocationListener(new LocationListener() {
boolean locationChanged = false;
// Zooms to the current location when first GPS fix arrives.
24
@Override
public void onLocationChanged(Location loc) {
if (!locationChanged) {
locationChanged = true;
zoomToLocation(loc);
// turn on the Location pan mode to show the location
symbol.
mLDM.setAutoPanMode(LocationDisplayManager.AutoPanMode.LOCATION);
}
}
});
mLDM.start();
}
}
Utilizatorul poate colecta date, de tipul celor care au fost inițial înregistrate pe server.
În aplicație, datele apar sub forma unei liste preluată din layerul înregistrat în codul aplicației.
// Create feature layers
ArcGISFeatureLayer fl1 = new ArcGISFeatureLayer(
"http://services6.arcgis.com/kzx2WjUtBxh95dvC/arcgis/rest/services/FeatureA
ndroid/FeatureServer/0",
ArcGISFeatureLayer.MODE.ONDEMAND);
fl1.setOnStatusChangedListener(statusChangedListener);
// Find MapView and add feature layers
mMapView = (MapView) findViewById(R.id.map);
mMapView.addLayer(fl1);
25
Fig. 10: Meniul de confirmare a datelor editate
Utilizatorul pune un punct preliminar pe hartă, iar apoi trebuie să confirme pentru ca
acesta să fie înregistrat pe server. Datele apar în timp real și pot fi vizualizate.
Fig. 11: Vizualizarea pe server
26
Capitolul 3
Automatizarea analizei datelor colectate
După ce datele spațiale despre supermarketuri au fost colectate, acestea au fost exportate
de pe server în format shapefile și importate în ArcGIS pentru analiză și cartografiere.
Un fişier shapefile este un format de stocare a datelor vectoriale ale ESRI pentru
stocarea locaţiei, formei şi atributelor obiectelor spaţiale geografice. Acesta este stocat ca un
set de fişiere corelate şi conţine o clasă de obiecte spaţiale.
Un astfel de fișier este păstrat de obicei în arhive .zip sau sub formă de geodatabase
deoarece conține de fapt, mai multe fișiere, fiecare cu rolul său. Dintre acestea, următoarele
sunt obligatorii pentru orice shapefile:
- .shp – fișierul shape propriu-zis; conține informații despre geometria vectorului
- .shx - shape index; conține un index de poziție a formelor geometrice reprezentate
pentru a facilita căutarea informațiilor
- .dbf – baza de date propriu-zisă în format dBase IV; conține informațiile –atribute-
pentru fiecare formă geometrică.
Pe lângă acestea, fișierele .shp care au ca scop analiza spațială, trebuie să vină însoțite și de un
fișier . prj, care conține informații despre proiecția geografică a datelor, precum și sistemul de
coordonate.
Pentru analiza propusă, este nevoie de datele despre supermarketurile din Iași, precum
și de adresele locuințelor din municipiu. Datele despre supermarketuri au fost colectate cu
ajutorul aplicației create inițial, iar informațiile suplimentare au fost adăugate în ArcGIS.
Fig. 12: Structura tabelei cu supermarketuri
27
Datele referitoare la adresele locuitorilor municiupiului Iași, întrucât sunt foarte multe,
au fost preluate de la Departamentul de Geografie din cadrul UAIC.
Fig. 13: Structura tabelei cu locuințe
ArcGIS pune la dispoziția utilizatorilor mai multe instrumente de analiză a datelor, însă
facilitatea care ne interesează este construirea unui model de analiză pentru a automatiza
procesul de calcul a utilității.
Dacă ar trebui să realizăm această analiză manual, pas cu pas etapele ar fi următoarele:
- Generate Near Table – realizează produsul cartezian al distanțelor dintre fiecare
supermarket și fiecare locuință;
- Join Field – pe baza unui atribut comun, constituit în acest caz de ID-ul supermarketului,
se adaugă în tabelul rezultat la pasul anterior informații despre magazine. Va rezulta un
tabel în care vom avea atât informații despre magazine, cât și distanța dintre acestea și
locuințe.
- Urmează apoi 3 operații repetitive de tipul Add field – Calculate field în urma cărora
tabelul va conține și informații despre ponderea distanței în calcularea utilității,
ponderea suprafeței de vânzare a magazinelor, precum și explicit, valoarea acestei
suprafețe. Totodată este necesară și crearea unei noi coloane în care se va găs valoarea
calculată pentru utilitate.
28
- Calculate field – pentru a calcula valoare utilității pe baza formulei
[P_DIST] * Log (1 / [NEAR_DIST] ) + [P_MASA] * Log ([MASA]), unde
P_DIST – ponderea distanței dintre client și market
P_MASA – ponderea suprafeței de vânzare a marketului
NEAR_DIST – distanța dintre client și market
MASA - suprafeța de vânzare a marketului.
- Summary Statistics – pentru a obține pentru fiecare locuință, valoarea maximă a utilității
dintre toate magzinele luate în calcul.
- Join Field după ID-ul locuințelor, pentru a aduce în tabel informațiile referitoare la
adrese.
- Join Field după valoarea utilității pentru a aduce informații despre numele magazinului
pentru care s-a calculat utilitatea cea mai mare. Această ultimă operație este necesară
pentru a putea cartografia rezultatul obținut.
Pe următoarea pagină este redat schematic modelul de analiză pe care l-am prezentat.
Parametrii modelul sunt marcați cu un „P”.
Deoarece mi-am propus automatizarea acestui model, am folosit API-ul dezvoltat în
Python pentru ArcGIS, ArcPy, pentru a crea un script care să realizeze același lucru făra să fie
nevoie de intervenția utilizatorului. Structura acestui script este următoarea:
- Se importă modulul ArcPy;
- Se dau argumentele scriptului; variabilele care vor fi introduse de utilizator de la
tastatură sau ca fișiere conținând date geospațiale existente în spațiul de lucru.
- Se declară variabilele;
- Se apelează funcțiile care sunt necesare în realizarea analizei:
o arcpy.GenerateNearTable_analysis (in_features, near_features,
out_table, {search_radius}, {location}, {angle}, {closest},
{closest_count}, {method}),
unde argumentele funcției au fost date astfel:
29
in_features – datele de intrare reprezentând punctele de la care se
dorește calcularea distanței către o locație (locuințele în cazul nostru);
near_features – datele de intrare spre care se calculează distanțele
(magazinele);
out_table – tabelul în care se vor memora rezultatele;
search_radius (optional) – raza de căutare a eventualelor puncte
către care trebuie să se calculeze distanța; în cazul de față nu este nevoie
să fie specificată o valoare întrucât toate punctele vor fi luate în calcul;
location (optional) – specifică dacă este nevoie de scrierea
coordonatelor X și Y în tabelul rezultat; am folosit NO_LOCATION pentru
că nu este nevoie;
angle (optional) – specifică dacă este nevoie de calcularea unghiului
dintre puncte
closest (optional) – specifică dacă este nevoie doar de cel mai
apropiat punct sau de toate
closest_count (optional) – limitează numărul de puncte în caz că
parametrul specificat anterior este “ALL”
method (optional) – se poate specifica dacă distanța calculată să fie
planară sau nu.
o arcpy.JoinField_management (in_data, in_field, join_table,
join_field, {fields})
in_data – tabelul de intrare; pe el se va face join-ul;
in_field – câmpul de join;
join_table – tabelul din care se preiau date;
join_field - câmpul de join din tabelul din care se preiau date;
fields (optional) – câmpuri de preluat (implicit toate).
o arcpy.AddField_management (in_table, field_name, field_type,
{field_precision}, {field_scale}, {field_length}, {field_alias},
{field_is_nullable}, {field_is_required}, {field_domain})
in_table - tabelul de intrare; aici se va adăuga câmpul;
field_name – numele câmpului;
30
field_type – tipul câmpului;
field_precision (optional) – numărul de cifre care poate fi plasat
în câmpul creat;
field_scale (optional) – numărul de zecimale;
field_length (optional) – lungime pentru text;
field_alias (optional) – nume alternativ dat câmpului;
field_is_nullable (optional) – specifică dacă se pot rețime valori
nule;
field_is_required (optional) – specifică dacă un câmp este
obligatoriu pentru tabelă;
o arcpy.CalculateField_management (in_table, field, expression,
{expression_type}, {code_block})
in_table - tabelul de intrare; aici se va calcula valoarea câmpului;
field – câmpul vizat de operația de calcul;
expression – expresia de calcul;
expression_type (optional) – formatul expresiei; poate fi VB sau
Python;
code_block (optional) – permite adăugarea unui bloc de cod pentru
calcule complexe;
o arcpy.Statistics_analysis (in_table, out_table,
statistics_fields, {case_field})
in_table - tabelul de intrare cu datele asupra cărora se vor efectua
calcule;
out_table - tabelul de ieșire;
statistics_fields – operațiile de executat;
case_field (optional) – câmpurile pentru care calculele trebuie
executate pentru fiecare valoare unică;
31
Fig. 14: Fluxul de lucru al instrumentului de calcul al utilității
32
În continuare, este redat codul complet al modelului:
# Import arcpy module
import arcpy
# Script arguments
Cererea = arcpy.GetParameterAsText(0)
Oferta = arcpy.GetParameterAsText(1)
Variabila_Masa = arcpy.GetParameterAsText(2)
Ponderea_distantei = arcpy.GetParameterAsText(3)
if Ponderea_distantei == '#' or not Ponderea_distantei:
Ponderea_distantei = "0.5" # provide a default value if unspecified
Ponderea_masei = arcpy.GetParameterAsText(4)
if Ponderea_masei == '#' or not Ponderea_masei:
Ponderea_masei = "0.5" # provide a default value if unspecified
Output_tabel_intermediar = arcpy.GetParameterAsText(5)
near_table_6 = arcpy.GetParameterAsText(6)
# Local variables:
near_table_3 = Ponderea_distantei
Output_Feature_Class_3 = near_table_3
near_table_4 = Output_Feature_Class_3
Output_Feature_Class_4 = near_table_4
near_table_5 = Output_Feature_Class_4
ADRESE_Iasi = near_table_6
Output_Layer_Name = Output_tabel_intermediar
near_table = Cererea
near_table_2 = near_table
Output_Feature_Class = near_table_2
Output_Feature_Class_2 = Output_Feature_Class
# Process: Generate Near Table
arcpy.GenerateNearTable_analysis(Cererea, "Supermarket_Iasi", near_table,
"", "NO_LOCATION", "NO_ANGLE", "ALL", "0")
# Process: Join Field
arcpy.JoinField_management(near_table, "NEAR_FID", Oferta, "FID", "")
33
# Process: Add Field
arcpy.AddField_management(near_table_2, "Utilitate", "FLOAT", "", "", "",
"", "NULLABLE", "NON_REQUIRED", "")
# Process: Add Field (2)
arcpy.AddField_management(Output_Feature_Class, "P_DIST", "FLOAT", "",
"", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: Calculate Field
arcpy.CalculateField_management(Output_Feature_Class_2, "P_DIST",
Ponderea_distantei, "VB", "")
# Process: Add Field (3)
arcpy.AddField_management(near_table_3, "P_MASA", "FLOAT", "", "", "",
"", "NULLABLE", "NON_REQUIRED", "")
# Process: Calculate Field (2)
arcpy.CalculateField_management(Output_Feature_Class_3, "P_MASA",
Ponderea_masei, "VB", "")
# Process: Add Field (4)
arcpy.AddField_management(near_table_4, "MASA", "FLOAT", "", "", "", "",
"NULLABLE", "NON_REQUIRED", "")
# Process: Calculate Field (4)
arcpy.CalculateField_management(Output_Feature_Class_4, "MASA",
Variabila_Masa, "VB", "")
# Process: Calculate Field (3)
arcpy.CalculateField_management(near_table_5, "UTILITATE", "[P_DIST]*Log
(1/[NEAR_DIST])+[P_MASA]*Log ([MASA] )", "VB", "")
# Process: Summary Statistics
arcpy.Statistics_analysis(near_table_6, Output_tabel_intermediar,
"Utilitate MAX", "IN_FID")
# Process: Join Field (2)
arcpy.JoinField_management(Cererea, "FID", Output_tabel_intermediar,
"IN_FID", "")
# Process: Join Field (3)
arcpy.JoinField_management(Output_Layer_Name, "MAX_Utilitate",
near_table_6, "Utilitate", "LABEL")
După interpretarea acestui model, pentru rularea sa, ArcGIS creează următoarea
interfață, unde utilizatorii au posibilitatea de a introduce parametrii modelului așa cum au fost
ei specificați anterior.
34
Fig. 15: Interfața din ArcGIS a instrumentului
Modelul a fost rulat pentru supermarketurile și locuințele din municipiul Iași, ponderea
distanței și a masei fiind considerate în proporții egale, de 50% (0.5).
Rezultatul obținut a fost cartografiat în ArcMap.
Obținem astfel o imagine asupra ariei polarizate de fiecare supemarket din Iași, cu
mențiunea că suprafețele acestora sunt pentru acest studiu, în care nu am pus accent pe
corectitudinea datelor, ci pe metodă, aproximative.
Se pot realiza astfel instrumente de analiză complexe, plecând de la instrumente simple
și utlizând scripturi.
35
Fig. 16: Harta finală cu rezultatele analizei
36
Concluzii
Prin realizarea acestei lucrări, mi-am dorit familiarizarea cu interfața de dezvoltare a
aplicațiilor pusă la dispoziție de ESRI, precum și cu modulul ArcPy, dezvoltat pentru
automatizarea analizei datelor în ArcGIS.
Aceasta vine ca o alternativă la API-ul dezvoltat de Google.
Aplicația realizată are în acest moment strictul necesar colectării datelor de tip punct,
cu ajutorul geo-localizării. De asemnea se poate naviga oriunde pe harta lumii cu ajutorul
modulului de geocodaj și se pot marca puncte fără a fi necesară prezența fizică.
Scriptul realizat pentru ArcGIS, care automatizează procesul de calcul a utilității
resimțite de clienții supermarketurilor fața de acestea, funcționează bine, putând fi astfel folosit
în acest scop pe orice set de date.
Consider că lucrarea și-a atins scopul, ideile inițiale fiind materializate cu rezultate
mulțumitoare, care astfel deschid posibilitatea ca și alte instrumente cu funcționalități diferite
să fie create în funcție de necesități. De asemenea, sunt de luat în considerare analizele care se
pot realiza și pe seturi de date de alte tipuri, utilizând modulul special dezvoltat în acest scop.
Au fost înțelese atât noțiuni de arhitectură, de proiectare a unei aplicații folosind un
pachet de dezvoltare existent și uneori mai puțin documentat, asta deoarece comunitatea
dezvoltatorilor GIS nu este la fel de mare ca alte comunități, dar și noțiuni despre crearea de
instrumente de analiză a datelor geospațiale utilizând un mediu dezvoltat pentru profesioniști și
o librărie creată special cu scopul de a înlesni astfel de analize.
Ca direcții de dezvoltare ulterioară, aplicația poate fi extinsă pentru a putea colecta și
date de tip linie sau poligon sau pentru a colecta date suplimentare despre fiecare locație în
parte. Se poate dezvolta și un server propriu care să pună la dispoziția utilizatorilor spațiu de
stocare a datelor, astfel fiind posibilă și crearea unei funcții de autentificare și gestionarea de
conturi pentru mai mulți utilizatori.
37
Bibliografie
[1] Cătoiu I., Teodorescu N., Comportamentul consumatorului. Teorie și practică, Editura
Economică, București, 1997
[2] Environmental Systems Research Institute, Inc., The Guide To Geographic Information
Systems: What Is GIS. 2009, http://www.gis.com/index.html
[3] Longley P., Goodchild M., Maguire D., Rhind D., Geographic Information Systems &
Science, Wiley, 2011
[4] Wise Stephen, GIS Fundamentals - Second edition, CRC Press, 2014
[5] https://developer.android.com/index.html
[6] https://developers.arcgis.com
[7] http://desktop.arcgis.com/en/arcmap/
[8] http://desktop.arcgis.com/en/arcmap/10.3/analyze/arcpy
[9] http://resources.arcgis.com/en/communities/python/
[10] https://developers.arcgis.com/android/api-reference/reference/
[11] http://pro.arcgis.com/en/pro-app/
Top Related