class PointTool(QgsMapTool):
def __init__(self, canvas):
QgsMapTool.__init__(self, canvas)
self.canvas = canvas
def canvasPressEvent(self, event):
pass
def canvasMoveEvent(self, event):
x = event.pos().x()
y = event.pos().y()
#point = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
#print('move: %f, %f' % (point.x(), point.y()))
def canvasReleaseEvent(self, event):
#Get the click
x = event.pos().x()
y = event.pos().y()
point = self.canvas.getCoordinateTransform().toMapCoordinates(x, y)
if empty_area(point)==False:
search(point)
else:
layer = iface.activeLayer()
layer.removeSelection()
def activate(self):
pass
def deactivate(self):
pass
def isZoomTool(self):
return False
def isTransient(self):
return False
def isEditTool(self):
return True
def empty_area(pt):
layer = iface.activeLayer()
index = QgsSpatialIndex(layer.getFeatures())
nearest = index.nearestNeighbor(pt,1, 0.00000000001)
print('LEN: %d' % len(nearest))
if len(nearest) == 0:
return True
return False
def search(pt):
#pt = QgsPoint(x,y)
layer = iface.activeLayer()
index = QgsSpatialIndex(layer.getFeatures())
nearest = index.nearestNeighbor(pt,1, 1)
print('nearest: %s' % nearest)
layer.selectByIds(nearest)
tool = PointTool(iface.mapCanvas())
iface.mapCanvas().setMapTool(tool)