Есть задача, сделать свой инструмент создания объекта, объект создается, но не отображается на карте.
Что я делаю не так?
Код:
Код: Выделить всё
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()