Accesarea datelor dintr-o bază de date folosind GRASS GIS
de Andreea Marin
Introducere
În ultima perioadă mi-am tot ocupat timpul cu diferite aspecte ce țin de crearea unei baze de date, importul datelor și accesarea lor în diferite aplicații open-source. Până în acest moment, am utilizat GRASS GIS doar pentru analiza și vizualizarea 2D/3D a datelor geospațiale, modelare matematică și o încercare de modelare volumetrică, motiv pentru care m-am gândit să mă joc un pic cu o bază de date PostgreSQL/PostGIS conectată în această aplicație.
Prin urmare, tutorialul de față își propune să arate, celor interesați, cum pot fi accesate informațiile dintr-o bază de date spațială într-o aplicație open-source, precum GRASS GIS.
În acest sens am utilizat aplicația GRASS GIS, versiunea 6.4.3RC2 (în prezent, poate fi descărcată versiunea 6.4.3RC3, de la adresa: http://grass.osgeo.org) și o bază de date spațială PostgreSQL/PostGIS numită romania, în care au fost încărcate următoarele date: Județe România și Localități România, disponibile pentru download pe geo-spatial.org.
Pentru crearea unei baze de date spațiale, convertirea fișierelor ESRI în format SQL și vizualizarea datelor încărcate în PostGIS folosind diferite aplicații open-source, se pot consulta următoarele tutoriale:
- Utilizare PostGIS. Partea I: Instalare PostgreSQL + PostGIS , scris de Ion Nedelcu.
- Importul unui set de date vectorial din format ESRI Shapefile în PostGIS și vizualizarea/interogarea acestuia folosind QGIS, uDig și GeoServer , realizat de Florin Iosub.
Vizualizarea datelor vectoriale încărcate într-o bază de date folosind aplicația GRASS GIS
- se lansează aplicația GRASS GIS; după pornire, programul afișează două ferestre: cea de manipulare (Figura 1) și fereastra de vizualizare (Figura 2);
Figura 1 – Fereastra de manipulare
Figura 2 – Fereastra de vizualizare
- În fereastra de manipulare (Layer Manager) faceți click pe: File > Import vector data > Common import formats [v.in.ogr];
- În fereastra dialog deschisă alegeți astfel:
- Selectați tipul sursei: Database;
- Alegeți tipul bazei de date:PostgreSQl;
- Selectați baza de date:romania;
- În List of GDAL layers, puteți bifa layerele, existente în baza de date, pe care doriți să le importați; pentru exemplificare, am ales doar un singur layer, și anume judete_ro;
- Bifați: Override dataset projection (use location’s projection), Allow output files to overwrite existing files și Add imported layers into layer tree.
- Apăsați butonul: Import.
Figura 3 – Importul datelor vectoriale stocate într-o bază de date
- Rezultatul este cel afișat în figura 4.
Figura 4 – Vizualizarea în GRASS GIS a stratului vectorial judete_ro
De asemenea, GRASS GIS oferă diferite funcții pentru conectarea la tabelele de atribute ale straturilor vectoriale încărcate într-o bază de date spațială, managementul bazei de date, interogarea informațiilor și/sau conectarea unui strat vectorial din GRASS GIS la baza de date specificată. Acestea se găsesc în meniul Database.
Aplicația GRASS GIS poate fi conectată la una sau mai multe sisteme de gestiune a bazelor de date (SQLite, PostgreSQL, MySQL, ODBC).
Comenzile disponibile în GRASS GIS sunt:
db.* – pentru a interacționa cu baza de date și seta valorile implicite ale hărților vectoriale;
db.connect, db.columns, db.copy, db.drivers, db.login, db.tables, db.describe, db.execute, db.select, db.test.
v.db.* – pentru a seta valorile pentru o singură hartă vectorială;
v.db.connect,v.db.addcol, v.db.droptable, v.db.update, v.db.addtable, v.db.reconnect.all, v.db.select.
În continuare vor fi prezentate succint câteva dintre comenzile pentru managementul bazelor de date (db*), menționate mai sus. Pentru acest lucru, am ales scrierea lor în linie de comandă. Astfel, în fereastra de manipulare selectați tab-ul Command console; comenzile vor fi scrise în fereastra de jos; după fiecare comandă se apasă tasta Enter, iar rezultatul va apărea în fereastra de sus (Figura 5).
Figura 5 – Fereastra de manipulare (Command console)
Managementul unei baze de date în GRASS GIS
- Conectarea GRASS GIS la o bază de date PostgreSQL
db.connect driver=pg schema=public database="host=localhost,dbname=romania"
- Vizualizarea conectării
db.connect -p
Rezultatul va consta în afișarea:
driver:pg database:host=localhost,dbname=romania schema:public group:
- Afișarea tabelelor dintr-o baza de date
db.tables driver=pg database="host=localhost,dbname=romania"
Rezultatul va fi:
information_schema.sql_features information_schema.sql_implementation_info information_schema.sql_languages information_schema.sql_packages information_schema.sql_parts information_schema.sql_sizing information_schema.sql_sizing_profiles public.geography_columns public.geometry_columns public.judete_ro public.localitati2008_utf8 public.spatial_ref_sys
Pentru descrierea unui tabel din baza de date la care suntem conectați, este folosită comanda db.describe. Utilizarea parametrului -c ne permite să vizualizăm detalii cu privire doar la coloanele din tabelul specificat.
db.describe table=public.judete_ro
Rezultat:
table:public.judete_ro description: insert:? delete:? ncols:11 nrows:42 column:gid description: type:INTEGER len:4 scale:0 precision:0 default: nullok:yes select:? update:? column:name description: type:CHARACTER len:20 scale:0 precision:0 default: nullok:yes select:? update:? column:name_utf8 description: type:CHARACTER len:21 scale:0 precision:0 default: nullok:yes select:? update:? column:siruta description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:? column:pop2004 description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:? column:pop2002 description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:? column:pop1992 description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:? column:pop1977 description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:? column:pop1966 description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:? column:pop1956 description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:? column:pop1948 description: type:DOUBLE PRECISION len:8 scale:0 precision:0 default: nullok:yes select:? update:?
db.describe -c table=public.judete_ro
Rezultat:
ncols: 11 nrows: 42 Column 1: gid:INTEGER:4 Column 2: name:CHARACTER:20 Column 3: name_utf8:CHARACTER:21 Column 4: siruta:DOUBLE PRECISION:8 Column 5: pop2004:DOUBLE PRECISION:8 Column 6: pop2002:DOUBLE PRECISION:8 Column 7: pop1992:DOUBLE PRECISION:8 Column 8: pop1977:DOUBLE PRECISION:8 Column 9: pop1966:DOUBLE PRECISION:8 Column 10: pop1956:DOUBLE PRECISION:8 Column 11: pop1948:DOUBLE PRECISION:8
- Ștergerea unui tabel
Pentru a șterge un tabel din baza de date romania, folosim comanda db.droptable. Pentru exemplificare am ales tabela de atribute public.judete_ro:
db.droptable table=public.judete_ro
Rezultat:
Thetable would be deleted. You must use the force flag to actually remove it. Exiting.
Potrivit rezultatului de mai sus, pentru a șterge tabela de atribute din baza de date utilizată trebuie să folosim și parametrul -f (force removal).
db.droptable -f table=public.judete_ro
Acum, dacă vom afișa, din nou, tabelele din baza de date romania, vom vedea că tabela public.judete_ro a fost eliminată.
db.tables driver=pg database="host=localhost,dbname=romania"
information_schema.sql_features information_schema.sql_implementation_info information_schema.sql_languages information_schema.sql_packages information_schema.sql_parts information_schema.sql_sizing information_schema.sql_sizing_profiles public.geography_columns public.geometry_columns public.localitati2008_utf8 public.spatial_ref_sys
- Listarea coloanelor dintr-un tabel
db.columns table=public.localitati2008_utf8
Executarea acestei comenzi va duce la afișarea coloanelor din tabelul public.localități2008_utf8:
gid x y name siruta old_postal rang tip siruta_sup name_sup county county_id county_mn pop2002 region region_id enviro_typ sort_code
- Interogarea datelor dintr-un tabel din baza de date romania
Pentru exemplificare am ales tabela public.localitati2008_utf8. Aceasta conține date despre toate localitățile din România. Presupunând că, pe noi, ne interesează doar informațiile despre municipiul Sibiu, vom face apel la o interogare simplă utilizând comanda select (pentru a extrage/selecta informațiile din baza de date) și clauza where (precizăm condiția pe care trebuie să o îndeplinească o linie pentru a fi afișată).
db.select sql="select*from public.localitati2008_utf8 where name='Sibiu'"
După executarea comenzii, va fi afișat:
gid|x|y|name|siruta|old_postal|rang|tip|siruta_sup|name_sup|county|county_id|county_mn|pop2002|region|region_id|enviro_typ|sort_code 11000|434093|477363|Sibiu|143469|2400|II|9|143450|Municipiul Sibiu|Sibiu|32|SB|169610|Centru|7|urban|3411749110897
Concluzii
Pe parcursul acestui tutorial am încercat să arăt cum poate fi vizualizat un set de date vectorial dintr-o bază de date spațială în GRASS GIS și să vă familiarizez cu o parte din comenzile pentru managementul bazelor de date, din cadrul acestei aplicații.