本文整理汇总了Python中qgis.gui.QgsRubberBand.numberOfVertices方法的典型用法代码示例。如果您正苦于以下问题:Python QgsRubberBand.numberOfVertices方法的具体用法?Python QgsRubberBand.numberOfVertices怎么用?Python QgsRubberBand.numberOfVertices使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.gui.QgsRubberBand
的用法示例。
在下文中一共展示了QgsRubberBand.numberOfVertices方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: DrawPolygon
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
class DrawPolygon(QgsMapTool):
'''Outil de sélection par polygone, tiré de selectPlusFr'''
selectionDone = pyqtSignal()
move = pyqtSignal()
def __init__(self, iface, couleur):
canvas = iface.mapCanvas()
QgsMapTool.__init__(self, canvas)
self.canvas = canvas
self.iface = iface
self.status = 0
self.rb = QgsRubberBand(self.canvas, QgsWkbTypes.PolygonGeometry)
self.rb.setColor(couleur)
return None
def keyPressEvent(self, e):
if e.matches(QKeySequence.Undo):
if self.rb.numberOfVertices() > 1:
self.rb.removeLastPoint()
def canvasPressEvent(self, e):
if e.button() == Qt.LeftButton:
if self.status == 0:
self.rb.reset(QgsWkbTypes.PolygonGeometry)
self.status = 1
self.rb.addPoint(self.toMapCoordinates(e.pos()))
else:
if self.rb.numberOfVertices() > 2:
self.status = 0
self.selectionDone.emit()
else:
self.reset()
return None
def canvasMoveEvent(self, e):
if self.rb.numberOfVertices() > 0 and self.status == 1:
self.rb.removeLastPoint(0)
self.rb.addPoint(self.toMapCoordinates(e.pos()))
self.move.emit()
return None
def reset(self):
self.status = 0
self.rb.reset(True)
def deactivate(self):
self.rb.reset(True)
QgsMapTool.deactivate(self)
示例2: ProfileTool
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
#.........这里部分代码省略.........
self.__startVertex = line[0]
self.__endVertex = line[-1]
self.__selectedDirections = []
self.__selectedDirections.append(True) # direction du premier prime
self.__selectedIds.append(self.__lastFeatureId)
else:
pos = self.__contains(line, self.__startVertex)
if pos > -1:
self.__selectedIds = [self.__lastFeatureId] + self.__selectedIds
if pos == 0:
direction = False
self.__startVertex = line[-1]
else:
direction = True
self.__startVertex = line[0]
self.__selectedDirections = [direction] + self.__selectedDirections
else:
pos = self.__contains(line, self.__endVertex)
self.__selectedIds.append(self.__lastFeatureId)
if pos == 0:
direction = True
self.__endVertex = line[-1]
else:
direction = False
self.__endVertex = line[0]
self.__selectedDirections.append(direction)
self.__lineLayer.setSelectedFeatures(self.__selectedIds)
def __calculateProfile(self):
"""
To calculate the profile and display it
"""
if self.__points is None:
return
self.__dockWdg.clearData()
if len(self.__points) == 0:
return
self.__dockWdg.setProfiles(self.__points, len(self.__selectedIds))
self.__dockWdg.attachCurves(self.__getNames(), self.ownSettings, self.__usedMnts)
def __checkSituations(self):
"""
To check if point with no elevation on line, and one or more elevation from other layers,
and if there are different elevations at the same point
"""
situations = []
differences = []
for p in range(len(self.__points)):
pt = self.__points[p]
num_lines = len(self.__selectedIds)
zz = []
for i in range(num_lines):
if pt['z'][i] is not None:
zz.append(i)
if len(zz) == 0:
self.__iface.messageBar().pushMessage(
QCoreApplication.translate("VDLTools", "No line z ?!?"), level=QgsMessageBar.WARNING)
elif len(zz) == 1:
z0 = pt['z'][zz[0]]
for i in range(num_lines, len(pt['z'])):
if pt['z'][i] is None:
continue
if abs(pt['z'][i]-z0) > self.ALT_TOLERANCE:
situations.append({'point': p, 'layer': (i-num_lines+1), 'vertex': z0})
elif len(zz) == 2:
z0 = pt['z'][zz[0]]
if abs(pt['z'][zz[1]] - z0) > self.ALT_TOLERANCE:
differences.append({'point': p, 'v1': z0, 'v2': pt['z'][zz[1]]})
else:
for i in range(num_lines, len(pt['z'])):
if pt['z'][i] is None:
continue
if abs(pt['z'][i]-z0) > self.ALT_TOLERANCE:
situations.append({'point': p, 'layer': (i-num_lines+1), 'vertex': z0})
else:
self.__iface.messageBar().pushMessage(
QCoreApplication.translate("VDLTools", "More than 2 lines z ?!?"), level=QgsMessageBar.WARNING)
if (len(situations) > 0) or (len(differences) > 0):
self.__setMessageDialog(situations, differences, self.__getNames())
self.__rubberSit.reset()
self.__rubberDif.reset()
for situation in situations:
pt = self.__points[situation['point']]
point = QgsPoint(pt['x'], pt['y'])
if self.__rubberSit.numberOfVertices() == 0:
self.__rubberSit.setToGeometry(QgsGeometry().fromPoint(point), None)
else:
self.__rubberSit.addPoint(point)
for difference in differences:
pt = self.__points[difference['point']]
point = QgsPoint(pt['x'], pt['y'])
if self.__rubberDif.numberOfVertices() == 0:
self.__rubberDif.setToGeometry(QgsGeometry().fromPoint(point), None)
else:
self.__rubberDif.addPoint(point)
self.__msgDlg.show()
else:
self.__checkZeros()
示例3: QgsMapToolCaptureSpatialOperand
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
#.........这里部分代码省略.........
if (event.button() == QtCore.Qt.RightButton and numPoints >= self.minPoints) or \
(numPoints == self.maxPoints):
self.finishGeom (numPoints)
def keyReleaseEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
self.selectionFinished.emit(None)
def activate(self):
QgsMapTool.activate(self)
self.canvas.setCursor(self.cursor)
def deactivate(self):
QgsMapTool.deactivate(self)
self.canvas.unsetCursor()
self.clearMapCanvas()
def isZoomTool(self):
return False
def isTransient(self):
return False
def isEditTool(self):
return False
def addVertex(self, pt):
self.rubberBand.addPoint(pt)
m = QgsVertexMarker(self.canvas)
m.setCenter(pt)
self.vertexMarkers.append(m)
#if self.yx: pt = QgsPoint(pt.y(),pt.x())
self.captureList.append (pt)
return len(self.captureList)
def moveVertex(self, pt):
if self.rubberBand.numberOfVertices() > 1:
if isinstance (self.rect, QtCore.QRect):
transform = self.canvas.getCoordinateTransform()
ll = transform.toMapCoordinates( self.rect.left(), self.rect.bottom() );
ur = transform.toMapCoordinates( self.rect.right(), self.rect.top() );
self.rubberBand.reset(QGis.Polygon)
self.rubberBand.addPoint( ll, False )
self.rubberBand.addPoint( QgsPoint( ur.x(), ll.y() ), False )
self.rubberBand.addPoint( ur, False )
self.rubberBand.addPoint( QgsPoint( ll.x(), ur.y() ), True )
else:
self.rubberBand.movePoint(pt)
def finishGeom (self, numPoints):
if self.maxPoints == 1:
geom = QgsGeometry.fromPoint(self.captureList[0])
elif self.isPolygon and numPoints == 2:
geom = QgsGeometry.fromPolyline(self.captureList)
#geom = QgsGeometry.fromRect(geom.boundingBox())
elif self.isPolygon:
geom = QgsGeometry.fromPolygon([self.captureList])
else:
geom = QgsGeometry.fromPolyline(self.captureList)
geom.simplify(0.00001)
geom.transform(QgsCoordinateTransform(
self.canvas.mapSettings().destinationCrs(),
self.crs))
if self.yx:
i = 0
vertex = geom.vertexAt(i)
while (vertex != QgsPoint(0,0)):
x = vertex.x()
y = vertex.y()
geom.moveVertex(y, x, i)
i+=1
vertex = geom.vertexAt(i)
self.selectionFinished.emit(geom.exportToWkt())
self.clearMapCanvas()
def clearMapCanvas(self):
"""
Clears the map canvas and in particular the rubberband.
A warning is thrown when the markers are removed.
"""
# Reset the capture list
self.captureList = []
# Create an empty rubber band
if self.isPolygon:
self.rubberBand.reset(QGis.Polygon)
else:
self.rubberBand.reset(QGis.Line)
# Delete also all vertex markers
for marker in self.vertexMarkers:
self.canvas.scene().removeItem(marker)
del marker
self.canvas.refresh()
示例4: DrawRect
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
class DrawRect(QgsMapTool):
'''Classe de sélection avec un Rectangle'''
selectionDone = pyqtSignal()
move = pyqtSignal()
def __init__(self, iface, couleur):
self.canvas = iface.mapCanvas()
QgsMapToolEmitPoint.__init__(self, self.canvas)
self.iface = iface
self.rb = QgsRubberBand(self.canvas, QgsWkbTypes.PolygonGeometry)
self.rb.setColor(couleur)
self.reset()
return None
def reset(self):
self.startPoint = self.endPoint = None
self.isEmittingPoint = False
self.rb.reset(True) # true, its a polygon
def canvasPressEvent(self, e):
if not e.button() == Qt.LeftButton:
return
self.startPoint = self.toMapCoordinates(e.pos())
self.endPoint = self.startPoint
self.isEmittingPoint = True
def canvasReleaseEvent(self, e):
self.isEmittingPoint = False
if not e.button() == Qt.LeftButton:
return None
if self.rb.numberOfVertices() > 3:
self.selectionDone.emit()
else:
width, height, ok = RectangleDialog().getSize()
if width > 0 and height > 0 and ok:
self.rb.addPoint(
QgsPointXY(
self.startPoint.x() + width,
self.startPoint.y() - height))
self.showRect(
self.startPoint,
QgsPointXY(
self.startPoint.x() + width,
self.startPoint.y() - height))
self.selectionDone.emit()
def canvasMoveEvent(self, e):
if not self.isEmittingPoint:
return
self.move.emit()
self.endPoint = self.toMapCoordinates(e.pos())
self.showRect(self.startPoint, self.endPoint)
def showRect(self, startPoint, endPoint):
self.rb.reset(QgsWkbTypes.PolygonGeometry) # true, it's a polygon
if startPoint.x() == endPoint.x() or startPoint.y() == endPoint.y():
return
point1 = QgsPointXY(startPoint.x(), startPoint.y())
point2 = QgsPointXY(startPoint.x(), endPoint.y())
point3 = QgsPointXY(endPoint.x(), endPoint.y())
point4 = QgsPointXY(endPoint.x(), startPoint.y())
self.rb.addPoint(point1, False)
self.rb.addPoint(point2, False)
self.rb.addPoint(point3, False)
self.rb.addPoint(point4, True) # true to update canvas
self.rb.show()
def deactivate(self):
self.rb.reset(True)
QgsMapTool.deactivate(self)
示例5: DrawCircle
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
class DrawCircle(QgsMapTool):
'''Outil de sélection par cercle, tiré de selectPlusFr'''
selectionDone = pyqtSignal()
move = pyqtSignal()
def __init__(self, iface, color, segments):
canvas = iface.mapCanvas()
QgsMapTool.__init__(self, canvas)
self.canvas = canvas
self.iface = iface
self.status = 0
self.segments = segments
self.rb = QgsRubberBand(self.canvas, QgsWkbTypes.PolygonGeometry)
self.rb.setColor(color)
return None
def canvasPressEvent(self, e):
if not e.button() == Qt.LeftButton:
return
self.status = 1
self.center = self.toMapCoordinates(e.pos())
rbcircle(self.rb, self.center, self.center, self.segments)
return
def canvasMoveEvent(self, e):
if not self.status == 1:
return
# construct a circle with N segments
cp = self.toMapCoordinates(e.pos())
rbcircle(self.rb, self.center, cp, self.segments)
self.rb.show()
self.move.emit()
def canvasReleaseEvent(self, e):
'''La sélection est faîte'''
if not e.button() == Qt.LeftButton:
return None
self.status = 0
if self.rb.numberOfVertices() > 3:
self.selectionDone.emit()
else:
radius, ok = QInputDialog.getDouble(
self.iface.mainWindow(), tr('Radius'),
tr('Give a radius in m:'), min=0)
if radius > 0 and ok:
cp = self.toMapCoordinates(e.pos())
cp.setX(cp.x() + radius)
rbcircle(self.rb, self.toMapCoordinates(
e.pos()), cp, self.segments)
self.rb.show()
self.selectionDone.emit()
return None
def reset(self):
self.status = 0
self.rb.reset(True)
def deactivate(self):
self.rb.reset(True)
QgsMapTool.deactivate(self)
示例6: LineMapTool
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
#.........这里部分代码省略.........
self.vertexMarker.show()
# Check tracing
if self.started:
# Only if the ctrl key is pressed
if self.mCtrl == True:
# So if we have found a snapping
if result <> []:
# If it is a vertex, not a point on a segment
if result[0].snappedVertexNr <> -1:
self.rubberBand.movePoint(point)
self.appendPoint(point)
self.lastPointMustStay = True
# The next point found, may be on a segment
self.firstTimeOnSegment = True
# We are on a segment
else:
self.rubberBand.movePoint(point)
# If we are on a new segment, we add the point in any case
if self.firstTimeOnSegment:
self.appendPoint(point)
self.lastPointMustStay = True
self.firstTimeOnSegment = False
# if we are not on a new segment, we have to test, if this point is really needed
else:
# but only if we have already enough points
if self.rubberBand.numberOfVertices() >=3:
num_vertexs = self.rubberBand.numberOfVertices()
lastRbP = self.rubberBand.getPoint(0, num_vertexs-2)
nextToLastRbP = self.rubberBand.getPoint(0, num_vertexs-3)
if not self.pointOnLine(lastRbP, nextToLastRbP, QgsPoint(point)):
self.appendPoint(point)
self.lastPointMustStay = False
else:
if not self.lastPointMustStay:
self.rubberBand.removeLastPoint()
self.rubberBand.movePoint(point)
else:
self.appendPoint(point)
self.lastPointMustStay = False
self.firstTimeOnSegment = False
else:
#if nothing specials happens, just update the rubberband to the cursor position
point = QgsMapToPixel.toMapCoordinates(self.canvas.getCoordinateTransform (), x, y)
self.rubberBand.movePoint(point)
else:
''' In "not-tracing" state, just update the rubberband to the cursor position
but we have still to snap to act like the "normal" digitize tool '''
if result <> []:
point = QgsPoint(result[0].snappedVertex)
# Add marker
self.vertexMarker.setCenter(point)
self.vertexMarker.show()
else:
point = QgsMapToPixel.toMapCoordinates(self.canvas.getCoordinateTransform(), x, y)
示例7: ApisMapToolEmitPolygonAndPoint
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
class ApisMapToolEmitPolygonAndPoint(QgsMapTool, ApisMapToolMixin):
mappingFinished = pyqtSignal(QgsGeometry, QgsGeometry, QgsCoordinateReferenceSystem)
def __init__(self, canvas):
QgsMapTool.__init__(self, canvas)
self.canvas = canvas
self.rubberBand = None
self.tempRubberBand = None
self.vertexMarker = None
self.capturedPoints = []
self.derivedPoint = None
self.capturing = False
self.setCursor(Qt.CrossCursor)
def canvasReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
if not self.capturing:
self.startCapturing()
self.addVertex(event.pos())
elif event.button() == Qt.RightButton:
point = self.getDerivedPoint()
polygon = self.getCapturedPolygon()
self.stopCapturing()
if point != None and polygon != None:
pointGeom = self.getPointGeometry(point)
polygonGeom = self.getPolygonGeometry(polygon)
if pointGeom != None and polygonGeom != None:
self.mappingFinished.emit(pointGeom, polygonGeom, self.canvas.mapSettings().destinationCrs())
else:
self.clearScene()
else:
self.clearScene()
def canvasMoveEvent(self, event):
if self.tempRubberBand != None and self.capturing:
mapPt = self.transformCoordinates(event.pos())
self.tempRubberBand.movePoint(mapPt)
def keyPressEvent(self, event):
if event.key() == Qt.Key_Backspace or event.key() == Qt.Key_Delete:
self.removeLastVertex()
event.ignore()
if event.key() == Qt.Key_Escape:
self.stopCapturing()
self.clearScene()
if event.key() == Qt.Key_Return or event.key() == Qt.Key_Enter:
point = self.getDerivedPoint()
polygon = self.getCapturedPolygon()
self.stopCapturing()
if point != None and polygon != None:
pointGeom = self.getPointGeometry(point)
polygonGeom = self.getPolygonGeometry(polygon)
if pointGeom != None and polygonGeom != None:
self.mappingFinished.emit(pointGeom, polygonGeom, self.canvas.mapSettings().destinationCrs())
else:
self.clearScene()
else:
self.clearScene()
def startCapturing(self):
self.clearScene()
self.rubberBand = QgsRubberBand(self.canvas, QGis.Polygon)
self.rubberBand.setWidth(2)
self.rubberBand.setFillColor(QColor(220, 0, 0, 120))
self.rubberBand.setBorderColor(QColor(220, 0, 0))
self.rubberBand.setLineStyle(Qt.DotLine)
self.rubberBand.show()
self.tempRubberBand = QgsRubberBand(self.canvas, QGis.Polygon)
self.tempRubberBand.setWidth(2)
self.tempRubberBand.setFillColor(QColor(0, 0, 0, 0))
self.tempRubberBand.setBorderColor(QColor(220, 0, 0))
self.tempRubberBand.setLineStyle(Qt.DotLine)
self.tempRubberBand.show()
self.vertexMarker = QgsVertexMarker(self.canvas)
self.vertexMarker.setIconType(1)
self.vertexMarker.setColor(QColor(220, 0, 0))
self.vertexMarker.setIconSize(16)
self.vertexMarker.setPenWidth(3)
self.vertexMarker.show()
self.capturing = True
def clearScene(self):
if self.vertexMarker:
self.canvas.scene().removeItem(self.vertexMarker)
self.vertexMarker = None
if self.rubberBand:
self.canvas.scene().removeItem(self.rubberBand)
self.rubberBand = None
if self.tempRubberBand:
self.canvas.scene().removeItem(self.tempRubberBand)
self.tempRubberBand = None
def stopCapturing(self):
if self.vertexMarker and self.rubberBand and self.rubberBand.numberOfVertices() < 3:
#.........这里部分代码省略.........
示例8: ALKISPolygonInfo
# 需要导入模块: from qgis.gui import QgsRubberBand [as 别名]
# 或者: from qgis.gui.QgsRubberBand import numberOfVertices [as 别名]
class ALKISPolygonInfo(QgsMapTool):
def __init__(self, plugin):
QgsMapTool.__init__(self, plugin.iface.mapCanvas())
self.plugin = plugin
self.iface = plugin.iface
self.cursor = QCursor(QPixmap([
"16 16 3 1",
" c None",
". c #FF0000",
"+ c #FFFFFF",
" ",
" +.+ ",
" ++.++ ",
" +.....+ ",
" +. .+ ",
" +. . .+ ",
" +. . .+ ",
" ++. . .++",
" ... ...+... ...",
" ++. . .++",
" +. . .+ ",
" +. . .+ ",
" ++. .+ ",
" ++.....+ ",
" ++.++ ",
" +.+ "
]))
self.rubberBand = QgsRubberBand(self.iface.mapCanvas(), self.plugin.PolygonGeometry)
self.areaMarkerLayer = None
def canvasPressEvent(self, e):
if self.areaMarkerLayer is None:
(layerId, ok) = QgsProject.instance().readEntry("alkis", "/areaMarkerLayer")
if ok:
self.areaMarkerLayer = self.plugin.mapLayer(layerId)
if self.areaMarkerLayer is None:
QMessageBox.warning(None, "ALKIS", u"Fehler: Flächenmarkierungslayer nicht gefunden!")
def canvasMoveEvent(self, e):
if self.rubberBand.numberOfVertices() > 0:
point = self.iface.mapCanvas().getCoordinateTransform().toMapCoordinates(e.x(), e.y())
self.rubberBand.movePoint(point)
def canvasReleaseEvent(self, e):
point = self.iface.mapCanvas().getCoordinateTransform().toMapCoordinates(e.x(), e.y())
if e.button() == Qt.LeftButton:
self.rubberBand.addPoint(point)
return
QApplication.setOverrideCursor(Qt.WaitCursor)
if self.rubberBand.numberOfVertices() >= 3:
g = self.plugin.transform(
self.rubberBand.asGeometry()
)
self.rubberBand.reset(self.plugin.PolygonGeometry)
fs = self.plugin.highlight(
where=u"st_intersects(wkb_geometry,st_geomfromtext('POLYGON((%s))'::text,%d))" % (
",".join(["%.3lf %.3lf" % (p[0], p[1]) for p in g.asPolygon()[0]]),
self.plugin.getepsg()
)
)
if len(fs) == 0:
QApplication.restoreOverrideCursor()
QMessageBox.information(None, u"Fehler", u"Keine Flurstücke gefunden.")
return
gmlids = []
for e in fs:
gmlids.append(e['gmlid'])
try:
s = QSettings("norBIT", "EDBSgen/PRO")
for i in range(0, len(fs)):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("localhost", int(s.value("norGISPort", "6102"))))
sock.send("NORGIS_MAIN#EDBS#ALBKEY#{}#{}#".format(fs[i]['flsnr'], 0 if i + 1 == len(fs) else 1).encode("utf-8"))
sock.close()
if win32:
window = win32gui.FindWindow(None, s.value("albWin", "norGIS"))
win32gui.SetForegroundWindow(window)
except socket.error:
QMessageBox.information(None, u"Fehler", u"Verbindung zu norGIS schlug fehl.")
else:
self.rubberBand.reset(self.plugin.PolygonGeometry)
QApplication.restoreOverrideCursor()