Hanya mencoba menjalankan kode berikut yang sudah diberikan dalam buku masak pyqgis untuk membuat simbologi warna berskala (seperti misalnya dengan 2 kelas)
Saya mendefinisikan sumber info untuk shapefile tetapi ketika saya menjalankan mengeksekusi kode dalam plugin-pengujian saya, itu hanya menambahkan lapisan tanpa mengklasifikasikan. Hanya menambahkan seperti biasa, semua polyline tampak sama.
Ada solusi atau kode / metode kerja?
tautan ke kode di buku masak 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)
@ Kode Kelly bekerja dengan sempurna.
Namun saya perhatikan bahwa kedua kodenya (yang saya ketik di pesan pertama dan milik Anda di pesan ke-2) JANGAN bekerja di QGIS v1.7.3 tetapi BEKERJA di QGIS v1.8.0. Saya pikir ini adalah bug (?) Yang sudah teratasi di v1.8.0
Dan satu pertanyaan lagi;
Apakah Anda memiliki kode sampel untuk (alami istirahat, Jenks) klasifikasi "numeric_attribute_field" berdasarkan jumlah kelas yang diberikan (yaitu tidak ada kelas akan menjadi variabel dalam kode, katakan "n", dan saya akan meneruskannya dari plugin GUI yaitu n = spinBox.value ())
Jawaban:
Saya menemukan bahwa dengan layer point saya menggunakan garis berikut kembali
None
Namun ini bisa diperbaiki dengan menggantinya dengan panggilan ke
validatedDefaultSymbol
metode dari kode di bawah ini. Premis dasarnya adalah meneleponQgsSymbolV2.defaultSymbol()
dan kemudian memvalidasi dan jika perlu melakukan koreksi.Perubahan untuk memastikan kompatibilitas dengan QGIS 1.8 dan master saat ini (27/01/13); meluas ke serangkaian contoh dengan ruang lingkup yang lebih luas. *
Cuplikan di bawah ini diformat untuk ditempelkan ke konsol python dan untuk diterapkan ke Natural Earth Data 1: 10m Tempat Penduduk tersedia dari sini . Perhatikan bahwa cuplikan selanjutnya memiliki dependensi pada definisi dan impor dari yang pertama.
1) Ini adalah contoh penerapan kategori khusus tetapi kode sulit ke lapisan tertentu.
2) Contoh ini berlaku, pada gilirannya, masing-masing mode standar yang didukung oleh QgsGraduatedSymbolRendererV2. Nilai kelas akan diperlakukan sebagai petunjuk daripada aturan seperti yang disyaratkan oleh setiap mode tertentu. Garis setSizeScaleField dapat dibatalkan komentar jika diinginkan, namun nilai kolom LABELRANK terlalu besar untuk terlihat bagus di tingkat zoom standar.
3) Contoh ini menunjukkan penerapan divisi kustom dinamis. Dalam hal ini fitur diurutkan berdasarkan nilai, kemudian dibagi menjadi beberapa kelompok sehingga jumlah nilai dalam setiap kategori sama. yaitu membagi populasi dunia menjadi pertiga yang hidup di tempat-tempat populasi terkecil / sedang / terbesar.
sumber