Daha çox

PyQGIS istifadə edərək hər bir xüsusiyyətə kateqoriyalı simvol tətbiq olunur


Hər bir xüsusiyyətə bənzərsiz bir simvol tətbiq etmək istəyirəm. Bunu etmək üçün aşağıdakı kodu istifadə etdim

qgis.core idxalından * PyQt4.QtGui-dən idxal * # qgisinin quraşdırılmış olduğu QgsApplication.setPrefixPath ("/ path / to / qgis / installation", True) # yükləyici provayderləri QgsApplication.initQgis () # Aktiv olun qat (bir vektor qat olmalıdır) qat = qgis.utils.iface.activeLayer (); iter = layer.getFeatures (); iter-dəki xüsusiyyət üçün: geom = feature.geometry () print "Feature ID% d:"% feature.id () qgis.utils.iface.mapCanvas (). setSelectionColor (QColor ("yellow")); layer.setSelectedFeatures ([feature.id ()]) qgis.utils.iface.mapCanvas (). zoomToSelected (qat) qgis.utils.iface.mapCanvas (). refresh () selected_features = layer.selectedFeatures () i in selected_features : attr = i.attributes () chaltano = str (attr [layer.fieldNameIndex ('test')]) renderer = QgsCategorizedSymbolRendererV2 ("test") layer.setRendererV2 (renderer) symbol = QgsSymbolV2.defaultSymbol (layer.geometryType () symbol.setColor (QColor ("red")) cat = QgsRendererCategoryV2 (feature.id (), symbol, str (feature.id ())) renderer.addCategory (cat)

Symbol yalnız son xüsusiyyətə tətbiq olunur. Burada "test" atributdur.


Təsnif olunmuş göstərici ilə bir qat çəkmək üçün əvvəlcə uyğun kateqoriyalar yaratmalısınız. Bir kateqoriyaya dəyər, simvol və etiket lazımdır. Layihə zamanı dəyərləri bilirsinizsə, hər bir kateqoriya üçün bu 3 parametri təyin edə bilərsiniz. Bir nümunə üçün QGIS Python Proqramlaşdırma Yemək kitabına baxın.

Kateqoriyalarları təyin etdikdən sonra bu kateqoriyalarla bir QgsCategorizedSymbolRendererV2 () yaradırsınız və bu göstəricini təbəqəyə təyin edirsiniz.

Aşağıdakı kodum müəyyən bir sahədə təsadüfi bir rəng ilə hər bir unikal dəyər üçün bir kateqoriya yaradır. Üslubda bir az rahatlıq təmin etmək üçün standart simvolu ləğv edirəm.

təsadüfi idxal randrange-dən # Aktiv təbəqəni əldə edin (vektor təbəqəsi olmalıdır) qat = qgis.utils.iface.activeLayer () # unikal dəyərlər əldə edin fni = layer.fieldNameIndex ('test') unique_values ​​= layer.dataProvider (). uniqueValues (fni) # unique_values-də unique_value üçün kateqoriyalar kateqoriyalarını müəyyənləşdirin = []: bu həndəsə tip simvolu üçün standart simvolu başlatın = QgsSymbolV2.defaultSymbol (layer.geometryType ()) # simvol qatını konfiqurasiya edin layer_style = {} layer_style ['color' ] = '% d,% d,% d'% (randrange (0,256), randrange (0,256), randrange (0,256)) layer_style ['anahat'] = '# 000000' symbol_layer = QgsSimpleFillSymbolLayerV2.create (layer_style) # əvəz symbol_layer Yoxdursa, konfiqurasiya edilmiş bir simvol təbəqəsi ilə None: symbol.changeSymbolLayer (0, symbol_layer) # renderer obyekt kateqoriyası yaradın = QgsRendererCategoryV2 (unique_value, symbol, str (unique_value)) # kateqoriya maddələr siyahısı üçün giriş.append ( kateqoriya) # yaratmaq renderer obyekt renderer = QgsCategorizedSymbolRendererV 2 ('test', kateqoriyalar) # yaradıcı yoxdursa, yaradılan göstəricini təbəqəyə təyin edin: layer.setRendererV2 (renderer) layer.triggerRepaint ()

PyQGIS3 versiyası üçün yuxarıdakı kodu sınamaq istəyənlər üçün uyğunlaşma (konsoldan işə salınarsa 'aktiv qat' üçün işləyir ...).

# təsadüfi idxal randrange qatından fayl adı indeksini və sahənin bənzərsiz dəyərlərini təmin edir qat = iface.activeLayer () fni = layer.fields (). indexFromName ('nom') unique_values ​​= layer.uniqueValues ​​(fni) # doldurun kateqoriyalar kateqoriyası = [] üçün unique_value in unique_values: # bu həndəsə tip simvolu üçün standart simvolu başlatın = QgsSymbol.defaultSymbol (layer.geometryType ()) # simvol qatını konfiqurasiya edin layer_style = {} layer_style ['color'] = '% d,% d,% d '% (randrange (0, 256), randrange (0, 256), randrange (0, 256)) layer_style [' anahat '] =' # 000000 'symbol_layer = QgsSimpleFillSymbolLayer.create (layer_style) # standart simvol qatını əvəz edin symbol_layer Yoxdursa, bir konfiqurasiya edilmişdir: symbol.changeSymbolLayer (0, symbol_layer) # yaratmaq renderer obyekt kateqoriyası = QgsRendererCategory (unique_value, symbol, str (unique_value)) # kateqoriya maddələr siyahısı üçün giriş. kateqoriyalar (tətbiq) # yaratmaq renderer object renderer = QgsCategorizedSymbolRenderer ('nom', kateqoriyalar) # yaradılanı təyin edin göstərici yoxdursa, təbəqəyə renderer yoxdur: layer.setRenderer (renderer) layer.triggerRepaint ()


Videoya baxın: QGIS Python PyQGIS - Select features from a vector layer (Oktyabr 2021).