Haideți să deschidem mai multe straturi cu date. QGIS recunoaște straturile vectoriale și pe cele de tip raster. În plus, sunt disponibile și tipurile de straturi personalizate, dar pe acestea nu le vom discuta aici.
Pentru a încărca un strat vectorial, specificați identificatorul sursei de date a stratului, numele stratului și numele furnizorului:
layer = QgsVectorLayer(data_source, layer_name, provider_name)
if not layer.isValid():
print "Layer failed to load!"
Identificatorul sursei de date reprezintă un șir specific pentru fiecare furnizor de date vectoriale în parte. Numele stratului se va afișa în lista straturilor. Este important să se verifice dacă stratul a fost încărcat cu succes. În cazul neîncărcării cu succes, va fi returnată o instanță de strat nevalid.
Cea mai rapidă cale de a deschide și de a afișa un strat vectorial în QGIS are loc prin utilizarea funcției addVectorLayer din clasa QgisInterface:
layer = iface.addVectorLayer("/path/to/shapefile/file.shp", "layer_name_you_like", "ogr") if not layer: print "Layer failed to load!"
Astfel se creează un nou strat care va fi adăugat într-un singur pas în registrul de straturi al hărții (ceea ce-l va face să apară în lista straturilor). Funcția returnează instanța stratului, sau None dacă stratul nu a putut fi încărcat.
Lista de mai jos arată modul de accesare a diverselor surse de date, cu ajutorul furnizorilor de date vectoriale:
Biblioteca OGR (fișiere shape și multe alte formate de fișiere) — sursa de date reprezintă calea către fișier
vlayer = QgsVectorLayer("/path/to/shapefile/file.shp", "layer_name_you_like", "ogr")
Baza de date PostGIS — sursa de date este constituită dintr-un șir cu toate informațiile necesare pentru a crea o conexiune la baza de date PostgreSQL. Clasa QgsDataSourceURI poate genera acest șir pentru dvs. Rețineți că QGIS trebuie să fie compilat cu suport Postgres, în caz contrar acest furnizor nu va fi disponibil.
uri = QgsDataSourceURI()
# set host name, port, database name, username and password
uri.setConnection("localhost", "5432", "dbname", "johny", "xxx")
# set database schema, table name, geometry column and optionally
# subset (WHERE clause)
uri.setDataSource("public", "roads", "the_geom", "cityid = 2643")
vlayer = QgsVectorLayer(uri.uri(), "layer_name_you_like", "postgres")
CSV sau alte fișiere text delimitate — pentru a deschide un fișier având punct și virgulă ca delimitator, iar câmpurile “x” și “y” ca și coordonate x, respectiv y, ar trebui să folosiți ceva de genul următor
uri = "/some/path/file.csv?delimiter=%s&xField=%s&yField=%s" % (";", "x", "y")
vlayer = QgsVectorLayer(uri, "layer_name_you_like", "delimitedtext")
Notă: încă de la QGIS versiunea 1.7 șirul furnizorului este structurat ca un URL, astfel încât calea trebuie să fie precedată cu file://. De asemenea, sunt permise geometrii în format WKT (well known text), ca o alternativă la câmpurile “x” și “y”, permițând și specificarea sistemului de coordonate de referință. De exemplu
uri = "file:///some/path/file.csv?delimiter=%s&crs=epsg:4723&wktField=%s" % (";", "shape")
Fișiere GPX — furnizorul de date “gpx” citește urme, rute și puncte de referință din fișiere gpx. Pentru a deschide un fișier, tipul (urmă/traseu/punct de referință) trebuie să fie specificat ca parte a url-ului
uri = "path/to/gpx/file.gpx?type=track"
vlayer = QgsVectorLayer(uri, "layer_name_you_like", "gpx")
Bază de date SpatiaLite — începând cu QGIS v1.1. În mod similar bazelor de date PostGIS, QgsDataSourceURI se poate utiliza pentru generarea identificatorului sursei de date
uri = QgsDataSourceURI()
uri.setDatabase('/home/martin/test-2.3.sqlite')
schema = ''
table = 'Towns'
geom_column = 'Geometry'
uri.setDataSource(schema, table, geom_column)
display_name = 'Towns'
vlayer = QgsVectorLayer(uri.uri(), display_name, 'spatialite')
Geometrii MySQL bazate pe WKB, prin OGR — sursa de date este șirul de conectare la tabelă
uri = "MySQL:dbname,host=localhost,port=3306,user=root,password=xxx|layername=my_table"
vlayer = QgsVectorLayer( uri, "my_table", "ogr" )
Conexiune WFS:. conexiunea este definită cu un URI și cu ajutorul furnizorului WFS
uri = "http://localhost:8080/geoserver/wfs?srsname=EPSG:23030&typename=union&version=1.0.0&request=GetFeature&service=WFS",
vlayer = QgsVectorLayer("my_wfs_layer", "WFS")
Identificatorul URI poate fi creat folosindu-se biblioteca standard urllib.
params = {
'service': 'WFS',
'version': '1.0.0',
'request': 'GetFeature',
'typename': 'union',
'srsname': "EPSG:23030"
}
uri = 'http://localhost:8080/geoserver/wfs?' + urllib.unquote(urllib.urlencode(params))
Pentru accesarea fișierelor raster este utilizată biblioteca GDAL. Acesta suportă o gamă largă de formate de fișiere. În cazul în care aveți probleme cu deschiderea unor fișiere, verificați dacă GDAL are suport pentru formatul respectiv (nu toate formatele sunt disponibile în mod implicit). Pentru a încărca un raster dintr-un fișier, specificați numele fișierului și numele de bază
fileName = "/path/to/raster/file.tif"
fileInfo = QFileInfo(fileName)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(fileName, baseName)
if not rlayer.isValid():
print "Layer failed to load!"
Similar straturilor vectoriale, straturile raster pot fi încărcate cu ajutorul funcției addRasterLayer a clasei QgisInterface:
iface.addRasterLayer("/path/to/raster/file.tif", "layer_name_you_like")
Astfel se creează un nou strat care se adaugă la registrul de straturi al hărții într-un singur pas (făcându-l să apară în lista straturilor).
Straturile raster pot fi, de asemenea, create dintr-un serviciu WCS.
layer_name = 'modis'
uri = QgsDataSourceURI()
uri.setParam('url', 'http://demo.mapserver.org/cgi-bin/wcs')
uri.setParam("identifier", layer_name)
rlayer = QgsRasterLayer(str(uri.encodedUri()), 'my_wcs_layer', 'wcs')
setările URI detaliate pot fi găsite în documentația furnizorului
Alternativ, puteți încărca un strat raster de pe un server WMS. Cu toate acestea, în prezent, nu este posibilă accesarea din API a răspunsului GetCapabilities — trebuie să cunoșteți straturile dorite
urlWithParams = 'url=http://wms.jpl.nasa.gov/wms.cgi&layers=global_mosaic&styles=pseudo&format=image/jpeg&crs=EPSG:4326'
rlayer = QgsRasterLayer(urlWithParams, 'some layer name', 'wms')
if not rlayer.isValid():
print "Layer failed to load!"
Dacă doriți să utilizați straturile deschise pentru randare, nu uitați să le adăugați în registrul straturilor de hartă. Acest registru înregistrează proprietatea asupra straturilor, acestea putând fi accesate ulterior din oricare parte a aplicației după ID-ul lor unic. Atunci când un strat este eliminat din registru, va fi și șters totodată.
Adăugarea unui strat în registru
QgsMapLayerRegistry.instance().addMapLayer(layer)
Straturile sunt distruse în mod automat la ieșire; cu toate acestea, dacă doriți să ștergeți stratul în mod explicit, atunci folosiți
QgsMapLayerRegistry.instance().removeMapLayer(layer_id)
Pentru lista straturilor încărcate şi id-uri, folosiți
QgsMapLayerRegistry.instance().mapLayers()
Mai multe despre registrul straturilor de hartă?