Go to content Go to navigation Go to search

geo-spatial.org: An elegant place for sharing geoKnowledge & geoData

Căutare



RSS / Atom / WMS / WFS


Contact


Lista de discuții / Forum


Publicat cu Textpattern


Comunitatea:

Conferința FOSS4G-Europe 2017
Conferința FOSS4G 2017

Accesarea datelor dintr-o bază de date folosind GRASS GIS

de Andreea Marin

Publicat la 30 Jun 2013 | Secţiunea: Tutoriale | Categoria: GIS/

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:

  1. Utilizare PostGIS. Partea I: Instalare PostgreSQL + PostGIS , scris de Ion Nedelcu.
  2. 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:
    1. Selectați tipul sursei: Database;
    2. Alegeți tipul bazei de date:PostgreSQl;
    3. Selectați baza de date:romania;
    4. Î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;
    5. Bifați: Override dataset projection (use location’s projection), Allow output files to overwrite existing files și Add imported layers into layer tree.
    6. 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:

The  table 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.

Discută articolul (0 comentarii)

Categorii