Încărcarea Straturilor

Haideți să deschidem mai multe straturi cu date. QGIS recunoaște straturile vectoriale și de tip raster. În plus, sunt disponibile și tipuri de straturi personalizate, dar nu le vom discuta aici.

Straturi 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 invalid.

Lista de mai jos arată modul de accesare a diverselor surse de date, cu ajutorul furnizorilor de date vectoriale:

  • Bibliotecă OGR (fișier shape și multe alte formate de fișiere) — sursa de date este calea către fișier

    vlayer = QgsVectorLayer("/path/to/shapefile/file.shp", \
      "layer_name_you_like", "ogr")
    
  • Bază de date PostGIS — sursa de date este 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 optionaly
    # 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")
    

    Note: from QGIS version 1.7 the provider string is structured as a URL, so the path must be prefixed with file://. Also it allows WKT (well known text) formatted geomtries as an alternative to “x” and “y” fields, and allows the coordinate reference system to be specified. For example

    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 poate fi utilizat 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_colum)
    
    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 folosind furnizorul ``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")
    

    URI poate fi creat folosind 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))
    

    And you can also use the

Straturi raster

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!"

Straturile raster pot fi, de asemenea, create dintr-un serviciu WCS.

layer_name = 'elevation'
uri = QgsDataSourceURI()
uri.setParam ('url', 'http://localhost:8080/geoserver/wcs')
uri.setParam ( "identifier", layer_name)
rlayer = QgsRasterLayer(uri, 'my_wcs_layer', 'wcs')

Alternativ, puteți încărca un strat raster de pe un server WMS. Cu toate acestea, în prezent, nu este posibilă accesarea răspunsului GetCapabilities de la API — 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 la 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)
DE EFECTUAT:

Mai multe despre registrul straturilor de hartă?