Încărcarea Straturilor

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.

Straturile Vectoriale

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:

    • pentru fișiere shape:

      vlayer = QgsVectorLayer("/path/to/shapefile/file.shp", "layer_name_you_like", "ogr")
      
    • pentru dxf (notați opțiunile interne din URI-ul sursei de date):

      uri = "/path/to/dxffile/file.dxf|layername=entities|geometrytype=Point"
      vlayer = QgsVectorLayer(uri, "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ă aplicația QGIS trebuie să fie compilată cu suport pentru 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 prefixată 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 o reprezintă ș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(uri, "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))
    

Note

Puteți schimba sursa de date a unui strat existent, prin apelarea setDataSource() asupra unei instanțe QgsMarkerSymbolV2, ca în următorul exemplu de cod:

# layer is a vector layer, uri is a QgsDataSourceURI instance
layer.setDataSource(uri.uri(), "layer name you like", "postgres")

Straturile Raster

Pentru accesarea fișierelor raster este utilizată biblioteca GDAL. Aceasta acceptă 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!"

Registrul Straturilor de Hartă

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 la 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 o listă a straturilor încărcate şi a id-urilor acestora, folosiți:

QgsMapLayerRegistry.instance().mapLayers()