개발자 이야기

[pyqgis] sample of QgsSpatialIndex 본문

GIS/QGIS

[pyqgis] sample of QgsSpatialIndex

프란5 2019. 11. 6. 16:35
반응형


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)

반응형

'GIS > QGIS' 카테고리의 다른 글

[pyqgis] split hole polyline  (0) 2019.11.26
[pyqgis] QgsRubberBand - transparent overlay widget on canvas  (0) 2019.11.11
[pyqgis] plugin builder  (0) 2019.10.31
[pyqgis] shortcut for layer selection  (0) 2019.10.24
[pyqgis] the ways to get layer(s)  (0) 2019.10.23