Mais

Como obter o nome do banco de dados PostGIS da camada QGIS?


Estou escrevendo um script de processamento personalizado que precisa saber em qual conexão de banco de dados reside uma camada vetorial. Não consigo encontrar em nenhum lugar da API uma função para retornar essas informações de uma camada. Então, acho que tenho duas perguntas:

  1. Existe uma função Python (de qgis.core ou de ferramentas de processamento) que retorna facilmente coisas como o nome do banco de dados, esquema, etc. de uma determinada camada?
  2. Se não, preciso analisar o URI da camada? Como faço para obter essas informações?

Acabei escrevendo um pequeno módulo para extrair informações da string que source () retorna:

import re class LayerDbInfo: def __init __ (self, layerInfo): if layerInfo [: 6] == 'dbname': layerInfo = layerInfo.replace (' ",'" ') vals = dict (re.findall (' ( S +) = "? (. *?)"? ', LayerInfo)) self.dbName = str (vals [' dbname ']) self.key = str (vals [' key ']) self.user = str (vals ['usuário']) self.password = str (vals ['senha']) self.srid = int (vals ['srid']) self.type = str (vals ['type']) self.host = str (vals ['host']) self.port = int (vals ['port']) # precisa de algum processamento extra para obter o nome da tabela e o esquema table = vals ['table']. split ('.') self.schemaName = tabela [0] .strip ('"') self.tableName = table [1] .strip ('"') else: raise def getDBName (self): return self.dbName def getHost (self): return self.host def getPort (self): retornar self.port def getKey (self): retornar self.key def getUser (self): retornar self.user def getPassword (self): retornar self.password def getSRID (self): retornar self.srid def getType (self): return self.type def getSchema (self): return self.schemaName def getTable (self): return self.tableName

Acho que você poderia usar o código a seguir para obter informações de origem para sua camada. Selecione uma camada na janela de camadas e insira o código no console Python:

layer = qgis.utils.iface.activeLayer () print layer.source ()

Você deve receber informações sobre a camada.

Espero que isto ajude!