git remote add origin git@github.com: ErisonBarros / Dados-Espacias-em-R.git
git push -u origin master
Há algumas formas de fazer isso. Vamos começar pelo addVectorLayer()
- Vamos usar o método
addVectorLayer()
, que é um método doQgisInterface
, que pode ser "abreviado" comoiface
, para realizar a importação do dado vetorial desejado. O mesmo depende das seguintes variáveis:addVectorLayer(vectorLayerPath, baseName, providerKey)
(bem similar aoqgsVectorLayer
).
O MétodoaddVectorLayer
retorna um objetoQgsVectorLayer
;
ATENÇÃO
- vectorLayerPath: deve incluir o nome da layer a ser carregada, precedida de
|layername=
. E.g.:bcim_2016_21_11_2018.gpkg|lim_unidade_federacao_a
- basename: nome a ser dado à layer no projeto qgis;
- providerKey: "ogr" <3 mas outros podem ser usados, como -“postgres”, “delimitedtext”, “gpx”, “spatialite”, and “WFS”.
iface is an object belonging to QGIS – something that has properties and behaviors we can use to interact with QGIS. iface is a very important object in QGIS because without it, we could not interact with QGIS or any layers loaded in our project. ( Anita Graser )
O dado foi adicionado mas não salvamos como um objeto para podermos seguir trabalhando com ele. Temos duas opções: carregar de novo atribuindo o resutado a um objeto. ou podemos atribuir a camada ativa (camada selecionada e com underline no qgis a um objeto;
Vamos pela segunda opção:
Ainda usando o ìface
(me parece que será nosso amigo nessa jornada), vamos usar o método activeLayer()
, atribuindo o resultado a uma objeto. Nessa caso, vou chamar de "uf";
uf = iface.activeLayer()
. O console não dará nenhum sinal, a não se que haja algum erro. Uma vez tendo atribuido ao objeto uf
a camada ativa, podemos seguir brincado...
A classe QgsVectorLayer
possui várias funções, as quais chamamos de étodo. Uma delas é para a contagem das feições existentes na camada que estamos trabalhando: uf.featureCount()
.
Ao executar esse método, teremos o resultado no console do python. Perceba que o metodo featureCount
é de obejto qgsVectorLayer
, por isso o usamos sem a necessidade de usar o iface
.
Outro método interessante de vermos é o que retorna os campos (ou nome das colunas) de nosssa camada. Vamos usar uf.fields()
, para poder identificar os campos e iterar sobre eles para, então, usar o método name()
para termos o nome de cada campo:
for field in uf.fields():
print(field.name())
A gente poderia também ter o nome de um campo específico, caso saibamos a ordem ao qual os mesmo se encontra (
print(uf.fields()[0].name())
Para abrir a tabela de atributos da camada, teremos que usar o método showAttributeTable
do iface
, com o detalhe de incluir o objeto uf no parenteses do método:
iface.showAttributeTable(uf)
Agora que vimos a tabela de atributos, vamos iterar a cada feição existente. Vamos usar o método getFeatures()
do objeto uf
e iterar sobre ele e imprimir o campo "nome", afinal, já sabemos que ele existe....
for feature in layer.getFeatures():
print(feature["nome"])
Sabendo que há uma feição chamada "Rio de Janeiro" no campo "nome" da camada que estamos trabalhando, podemos filtrar nossa camada. Para isso, vamos usar o método setSubsetString()
do objeto QgsVectorLayer
. Nele temos que informar a expressão a ser filtrada.
setSubsetString(self, subset)
:
rj = uf.setSubsetString("nome = 'Rio de Janeiro'")
.
Agora que temos apenas a feição que queremos trabalhar, podemos dar um zoom à ela, usando o método zoomToActiveLayer()
do iface
:
iface.zoomToActiveLayer()
Para desfazer o filtro, basta:
layer.setSubsetString("")
Para alterar a cor da feição que estamos trabalhando, vamos usar as clases renderer()
, que cuida da renderização de cada feição, seguida de symbol()
que cuida específicamente da simbologia. Para alterar a cor, usarmos, então, o método setColor()
para alterar a cor de nossa camada. O QColor("black")
nos permite deifnir a cor a ser alterada, resultado em: uf.renderer().symbol().setColor(QColor("black"))
Percebam que o canvas precisa ser atualizado. Faremos isso pelo método do QgsVectorLayer
triggerRepaint()
: uf.triggerRepaint()
;
Estamos quase lá. Nos falta atualizar a simbologia na lista de camadas. Como se trata de uma atualização na interface, vamos de iface
:
iface.layerTreeView().refreshLayerSymbology(uf.id())
Para salvar o projeto que estamos trabalhando, vamos criar uma instancia [QgsProject](https://qgis.org/pyqgis/master/core/QgsProject.html#qgis.core.QgsProject)
que, por ser uma classe única, basta usar instance()
e, então, o método write()
no qual devemos informar o caminho da até a pasta onde o projeto será salvo:
QgsProject.instance().write('caminho_para_pasta/projeto1.qgs')
Vejam que após salva-lo e enquanto o mantemos aberto, o nome do projeto pode ser acessado pelo método fileName()
;
print(QgsProject.instance().fileName())