Apenas tentando executar o seguinte código já fornecido no livro de receitas pyqgis para criar uma simbologia de cores graduadas (como no exemplo com 2 classes)
Eu defino as informações de origem do shapefile, mas quando executo o código no meu plugin de teste, ele adiciona a camada sem classificar. Apenas adiciona, como de costume, todas as polilinhas parecem iguais.
Alguma solução ou código / método de trabalho?
link para código no livro de receitas http://www.qgis.org/pyqgis-cookbook/vector.html#graduated-symbol-renderer
from qgis.core import (QgsVectorLayer, QgsMapLayerRegistry, QgsGraduatedSymbolRendererV2, QgsSymbolV2,QgsRendererRangeV2)
myVectorLayer = QgsVectorLayer('C:/my_test_shape_file.shp', 'test_shp_file', 'ogr')
myTargetField = 'target_field'
myRangeList = []
myOpacity = 1
# Make our first symbol and range...
myMin = 0.0
myMax = 50.0
myLabel = 'Group 1'
myColour = QtGui.QColor('#ffee00')
mySymbol1 = QgsSymbolV2.defaultSymbol(myVectorLayer.geometryType())
mySymbol1.setColor(myColour)
mySymbol1.setAlpha(myOpacity)
myRange1 = QgsRendererRangeV2(myMin, myMax, mySymbol1, myLabel)
myRangeList.append(myRange1)
#now make another symbol and range...
myMin = 50.1
myMax = 100
myLabel = 'Group 2'
myColour = QtGui.QColor('#00eeff')
mySymbol2 = QgsSymbolV2.defaultSymbol(myVectorLayer.geometryType())
mySymbol2.setColor(myColour)
mySymbol2.setAlpha(myOpacity)
myRange2 = QgsRendererRangeV2( myMin, myMax, mySymbol2, myLabel)
myRangeList.append(myRange2)
myRenderer = QgsGraduatedSymbolRendererV2('', myRangeList)
myRenderer.setMode(QgsGraduatedSymbolRendererV2.EqualInterval)
myRenderer.setClassAttribute(myTargetField)
myVectorLayer.setRendererV2(myRenderer)
QgsMapLayerRegistry.instance().addMapLayer(myVectorLayer)
O código da @ Kelly funciona perfeitamente.
No entanto, notei que tanto o código (um que eu digitei na minha primeira mensagem quanto o seu na segunda) não funciona no QGIS v1.7.3, mas funciona no QGIS v1.8.0. Eu acho que isso foi um bug (?) Que já foi resolvido na v1.8.0
E mais uma pergunta;
Você tem algum código de amostra para a classificação (quebras naturais, Jenks) do "campo_attributo_numérico" com base no número determinado de classes (ou seja, nenhuma das classes será uma variável no código, diga "n", e eu passarei isso da GUI do plugin, ou seja, n = spinBox.value ())
Respostas:
Que tipo de camada você está usando?
Eu descobri que com a camada de ponto eu estava usando a seguinte linha retornada
None
No entanto, isso pode ser corrigido substituindo-o por uma chamada para o
validatedDefaultSymbol
método do código abaixo. A premissa básica é chamarQgsSymbolV2.defaultSymbol()
e depois validar e, se necessário, fazer correções.Editar: Alterações para garantir a compatibilidade com o QGIS 1.8 e o mestre atual (27/01/13); estendida a uma série de exemplos com escopo mais amplo.
Os trechos abaixo são formatados para serem colados no console python e para serem aplicados aos Locais Naturais dos Dados da Terra Natural 1: 10m disponíveis aqui . Observe que os trechos posteriores dependem das definições e importações do primeiro.
1) Este é um exemplo de aplicação de categorias personalizadas, mas codificadas, em uma determinada camada.
2) Este exemplo se aplica, por sua vez, a cada um dos modos padrão suportados pelo QgsGraduatedSymbolRendererV2. O valor das classes será tratado como uma dica e não como uma regra, conforme exigido por cada modo específico. A linha setSizeScaleField pode ser descomentada, se desejado, no entanto, os valores da coluna LABELRANK são muito grandes para parecerem bons nos níveis de zoom padrão.
3) Este exemplo demonstra a aplicação de divisões personalizadas dinâmicas. Nesse caso, os recursos são classificados por valor e, em seguida, divididos em grupos para que a soma dos valores em cada categoria seja igual. isto é, dividir a população do mundo em terços que vivem em lugares da menor / média / maior população.
fonte