From 02fc22f7dfd5f778a6e4dc8e661a4408d4cbcc14 Mon Sep 17 00:00:00 2001
From: Aitor Gil Martin
equaling_geom_count('target_layer_name')
+ target_layer_name : name of the target layer, for exemple 'COUNTRIES'.
+
+
+ equaling_geom_count('COUNTRIES') → 665
+ + """ + + DEBUG = True + try: #qgis 3 + if DEBUG : print('feat geom ',feature.geometry().asPolygon(), feature.geometry().area(), feature.hasGeometry()) + except: #qgis 2 + if DEBUG : print('feat geom ', feature.geometry()) + + targetLayerName = values[0] + #targetFieldName = values[1] + + if feature.geometry() is not None: + #layerSet = {layer.name():layer for layer in iface.legendInterface().layers()} + layerSet = _getLayerSet() + + + if not (targetLayerName in layerSet.keys()): + parent.setEvalErrorString("error: targetLayer not present") + return + if layerSet[targetLayerName].type() != qgis.core.QgsMapLayer.VectorLayer: + parent.setEvalErrorString("error: targetLayer is not a vector layer") + return + count = 0 + + request = qgis.core.QgsFeatureRequest() + request.setFilterRect(feature.geometry().boundingBox()) + for feat in layerSet[targetLayerName].getFeatures(request): + if feat.geometry().isGeosEqual(feature.geometry()): + count += 1 + if DEBUG : print('feat ',feature.id(),'count',count) + return count + + else: + return False @qgsfunction(args=2, group='Reference',register = False, usesgeometry=True) @@ -1443,6 +1488,8 @@ def initGui(self): QgsExpression.registerFunction(intersecting_geom_count) QgsExpression.registerFunction(intersecting_geom_sum) + QgsExpression.registerFunction(equaling_geom_count) + icon_path = os.path.join(self.plugin_dir,"icon.png") # map tool action self.action = QAction(QIcon(icon_path),"refFunctions", self.iface.mainWindow()) @@ -1479,6 +1526,8 @@ def unload(self): QgsExpression.unregisterFunction('intersecting_geom_count') QgsExpression.unregisterFunction('intersecting_geom_sum') + QgsExpression.unregisterFunction('equaling_geom_count') + self.iface.removePluginMenu(u"&refFunctions", self.action) self.iface.removeToolBarIcon(self.action)