Esto puede ser realizado mediante la clase QgsMapToolEmitPoint la cual permite generar, al inicio, las coordenadas de un punto a cada click del ratón en la Map View de QGIS. Estas coordenadas se emplean para generar un QgsPoint y comprobar posteriormente si está dentro o fuera de algún rasgo del vectorial. Si está dentro del feature, se recupera su id para acceder entonces al value del atributo empleando el nombre del campo correspondiente. El código completo se tiene a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from qgis.gui import QgsMapToolEmitPoint def display_point(point, mouse_button): coords = "Map Coordinates: {:.4f}, {:.4f}".format(point.x(), point.y()) print coords layer = iface.activeLayer() feats = [ feat for feat in layer.getFeatures() ] geo_pt = QgsGeometry.fromPoint(QgsPoint(point.x(), point.y())) id = -1 for feat in feats: if geo_pt.within(feat.geometry()): id = feat.id() break if id != -1: print feats[id].attribute('name') else: print "no feature selected" # a reference to our map canvas canvas = iface.mapCanvas() # this QGIS tool emits as QgsPoint after each click on the map canvas pointTool = QgsMapToolEmitPoint(canvas) pointTool.canvasClicked.connect(display_point) canvas.setMapTool(pointTool) |
Cuando se ejecuta el código anterior, cada click del ratón en el Map Canvas de QGIS imprime en la Python Console los valores de las coordenadas del punto y posteriormente el value del campo seleccionado (en la imagen siguiente se observa que éste corresponde a 'name'). La imagen a continuación también revela que los dos primeros puntos fueron clickeados fuera de cualquier rasgo y los restantes dentro de alguno de ellos. La tabla de atributos del vectorial permite corroborar que los del campo 'name' fueron obtenidos según lo esperado.
No hay comentarios:
Publicar un comentario