Свой инструмент построения линии или полигона на Python

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
klerk184
Участник
Сообщения: 71
Зарегистрирован: 23 июн 2016, 11:56
Репутация: 0

Свой инструмент построения линии или полигона на Python

Сообщение klerk184 » 16 янв 2017, 06:49

Добрый день!

Есть задача, сделать свой инструмент создания объекта, объект создается, но не отображается на карте.
Что я делаю не так?

Код:

Код: Выделить всё

class CreateBindingTool(QgsMapToolEmitPoint):
    def __init__(self, canvas):
        self.canvas = canvas
        QgsMapToolEmitPoint.__init__(self, self.canvas)
        self.rubberBand = QgsRubberBand(self.canvas, QGis.Line)
        self.rubberBand.setColor(Qt.red)
        self.rubberBand.setWidth(1)
        self.ArrayBinding = []

    def canvasPressEvent(self, e): # нажатие мыши
        # Получаем координаты нажатой точки:
        Point = self.toMapCoordinates(e.pos())
        self.isEmittingPoint = True
        self.addPointInArray(Point)

    def addPointInArray(self, Point): # создание точки объекта
        x = Point.x()
        y = Point.y()
        self.ArrayBinding.append(QgsPoint(x, y))
        print self.ArrayBinding

    def canvasReleaseEvent(self, e): # отпускание мыши
        pass

    def canvasMoveEvent(self, e): # перемещение мыши
        pass

    def canvasDoubleClickEvent(self, e):
        # lyr=None # находим слой
        # name = "create_multilinestring"
        # for lay in QgsMapLayerRegistry.instance().mapLayers().values():
        #     if lay.name() == name:
        #         lyr = lay
        #         break
        name = "create_multilinestring"
        # Получаем слой
        lyr = QgsMapLayerRegistry.instance().mapLayersByName( name )[0]
        polyline = self.ArrayBinding
        caps = lyr.dataProvider().capabilities()
        if caps & QgsVectorDataProvider.AddFeatures:
            feat = QgsFeature(lyr.pendingFields())
            feat.setAttributes([0, 'hello'])
            feat.setGeometry(QgsGeometry.fromPolyline(polyline))
            (res, outFeats) = lyr.dataProvider().addFeatures([feat])
        lyr.endEditCommand()
        lyr.commitChanges()

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 34 гостя