Skip to main content
deleted 32 characters in body
Source Link
Kadir Şahbaz
  • 78.6k
  • 57
  • 260
  • 407

Use this script:

from PyQt5.QtCore import QVariant # layers polygon_lyr = QgsProject.instance().mapLayersByName("Polygons")[0] point_lyr = QgsProject.instance().mapLayersByName("Points")[0] # index number of "class" field field_index = point_lyr.fields().indexFromName('class') # unique class names unique_classes = point_lyr.uniqueValues(field_index) polygon_lyr.startEditing() # add a field for each class to polygon layer for field_name in unique_classes: if polygon_lyr.fields().indexFromName(field_name)==-1: polygon_lyr.addAttribute(QgsField(field_name, QVariant.Int)) polygon_lyr.updateFields()  for feat in polygon_lyr.getFeatures(): g = feat.geometry() req = QgsFeatureRequest(g.boundingBox()) # for performance classes = [p["class"] for p in point_lyr.getFeatures(req) if g.contains(p.geometry())] class_numbers_in_polygon = {cls: classes.count(cls) for cls in unique_classes} # add unique class numbers in polygon to the related field for cls in class_numbers_in_polygon: feat[cls] = class_numbers_in_polygon[cls] polygon_lyr.updateFeature(feat) polygon_lyr.commitChanges() 

enter image description here

Use this script:

from PyQt5.QtCore import QVariant # layers polygon_lyr = QgsProject.instance().mapLayersByName("Polygons")[0] point_lyr = QgsProject.instance().mapLayersByName("Points")[0] # index number of "class" field field_index = point_lyr.fields().indexFromName('class') # unique class names unique_classes = point_lyr.uniqueValues(field_index) polygon_lyr.startEditing() # add a field for each class to polygon layer for field_name in unique_classes: if polygon_lyr.fields().indexFromName(field_name)==-1: polygon_lyr.addAttribute(QgsField(field_name, QVariant.Int)) polygon_lyr.updateFields()  for feat in polygon_lyr.getFeatures(): g = feat.geometry() req = QgsFeatureRequest(g.boundingBox()) # for performance classes = [p["class"] for p in point_lyr.getFeatures(req) if g.contains(p.geometry())] class_numbers_in_polygon = {cls: classes.count(cls) for cls in unique_classes} # add unique class numbers in polygon to the related field for cls in class_numbers_in_polygon: feat[cls] = class_numbers_in_polygon[cls] polygon_lyr.updateFeature(feat) polygon_lyr.commitChanges() 

enter image description here

Use this script:

from PyQt5.QtCore import QVariant # layers polygon_lyr = QgsProject.instance().mapLayersByName("Polygons")[0] point_lyr = QgsProject.instance().mapLayersByName("Points")[0] # index number of "class" field field_index = point_lyr.fields().indexFromName('class') # unique class names unique_classes = point_lyr.uniqueValues(field_index) polygon_lyr.startEditing() # add a field for each class to polygon layer for field_name in unique_classes: if polygon_lyr.fields().indexFromName(field_name)==-1: polygon_lyr.addAttribute(QgsField(field_name, QVariant.Int)) for feat in polygon_lyr.getFeatures(): g = feat.geometry() req = QgsFeatureRequest(g.boundingBox()) # for performance classes = [p["class"] for p in point_lyr.getFeatures(req) if g.contains(p.geometry())] class_numbers_in_polygon = {cls: classes.count(cls) for cls in unique_classes} # add unique class numbers in polygon to the related field for cls in class_numbers_in_polygon: feat[cls] = class_numbers_in_polygon[cls] polygon_lyr.updateFeature(feat) polygon_lyr.commitChanges() 

enter image description here

Source Link
Kadir Şahbaz
  • 78.6k
  • 57
  • 260
  • 407

Use this script:

from PyQt5.QtCore import QVariant # layers polygon_lyr = QgsProject.instance().mapLayersByName("Polygons")[0] point_lyr = QgsProject.instance().mapLayersByName("Points")[0] # index number of "class" field field_index = point_lyr.fields().indexFromName('class') # unique class names unique_classes = point_lyr.uniqueValues(field_index) polygon_lyr.startEditing() # add a field for each class to polygon layer for field_name in unique_classes: if polygon_lyr.fields().indexFromName(field_name)==-1: polygon_lyr.addAttribute(QgsField(field_name, QVariant.Int)) polygon_lyr.updateFields() for feat in polygon_lyr.getFeatures(): g = feat.geometry() req = QgsFeatureRequest(g.boundingBox()) # for performance classes = [p["class"] for p in point_lyr.getFeatures(req) if g.contains(p.geometry())] class_numbers_in_polygon = {cls: classes.count(cls) for cls in unique_classes} # add unique class numbers in polygon to the related field for cls in class_numbers_in_polygon: feat[cls] = class_numbers_in_polygon[cls] polygon_lyr.updateFeature(feat) polygon_lyr.commitChanges() 

enter image description here