def drawMeasureAreaOnVideo(values, painter, surface, gt): ''' Draw Measure Area on Video ''' a_value = sphere.polygon_area([values]) poly = [] lat = [] long = [] for pt in values: if hasElevationModel(): pt = GetLine3DIntersectionWithPlane( GetSensor(), pt, GetFrameCenter()[2]) scr_x, scr_y = vut.GetInverseMatrix( pt[1], pt[0], gt, surface) center = QPoint(scr_x, scr_y) poly.append(center) lat.append(pt[0]) long.append(pt[1]) # Fix: Temporary correction # mousePressEvent calls after mouseMoveEvent. # A problem occurs because the centroid is miscalculated. # We remove duplicates values lat = list(dict.fromkeys(lat)) long = list(dict.fromkeys(long)) # Calculate Centroid Position scr_x, scr_y = vut.GetInverseMatrix( sum(long)/len(long), sum(lat)/len(lat), gt, surface) centroid = QPoint(scr_x, scr_y) # Create Poligon polygon = QPolygonF(poly) path = QPainterPath() path.addPolygon(polygon) painter.setFont(DrawToolBar.bold_12) painter.setPen(MeasurePen) painter.drawPolygon(polygon) painter.fillPath(path, MeasureBrush) painter.setPen(DrawToolBar.white_pen) painter.drawPoints(polygon) # Area if a_value >= 10000: painter.drawText(centroid , str(round(a_value/1000000, 2)) + " km²") else: painter.drawText(centroid , str(round(a_value, 2)) + " m²") return
def drawMeasureAreaOnVideo(values, painter, surface, gt): """ Draw Measure Area on Video """ da = QgsDistanceArea() da.setEllipsoid(WGS84String) points = [] poly = [] for pt in values: scr_x, scr_y = vut.GetInverseMatrix(pt[1], pt[0], gt, surface) center = QPoint(scr_x, scr_y) poly.append(center) points.append(QgsPointXY(pt[1], pt[0])) # Create Video Polygon polygon = QPolygonF(poly) path = QPainterPath() path.addPolygon(polygon) painter.setFont(DrawToolBar.bold_12) painter.setPen(MeasurePen) painter.drawPolygon(polygon) painter.fillPath(path, MeasureBrush) painter.setPen(DrawToolBar.white_pen) painter.drawPoints(polygon) # Create QGIS Polygon mapPolygon = QgsGeometry.fromPolygonXY([points]) # Calculate polygon area area = da.measureArea(mapPolygon) try: ctr = mapPolygon.centroid().asPoint() # Calculate Centroid Position scr_x, scr_y = vut.GetInverseMatrix(ctr.x(), ctr.y(), gt, surface) centroid = QPoint(scr_x, scr_y) # Area if area >= 10000: painter.drawText( centroid, str(round(da.convertAreaMeasurement(area, 1), 2)) + " km²") else: painter.drawText(centroid, str(round(area, 2)) + " m²") except Exception: None return
def drawMeasureAreaOnVideo(values, painter, surface, gt): ''' Draw Measure Area on Video ''' a_value = sphere.polygon_area([values]) poly = [] lat = [] long = [] for pt in values: scr_x, scr_y = vut.GetInverseMatrix(pt[1], pt[0], gt, surface) center = QPoint(scr_x, scr_y) poly.append(center) lat.append(pt[0]) long.append(pt[1]) lat = list(dict.fromkeys(lat)) long = list(dict.fromkeys(long)) # Calculate Centroid Position scr_x, scr_y = vut.GetInverseMatrix( sum(long) / len(long), sum(lat) / len(lat), gt, surface) centroid = QPoint(scr_x, scr_y) # Create Poligon polygon = QPolygonF(poly) path = QPainterPath() path.addPolygon(polygon) painter.setFont(DrawToolBar.bold_12) painter.setPen(MeasurePen) painter.drawPolygon(polygon) painter.fillPath(path, MeasureBrush) painter.setPen(DrawToolBar.white_pen) painter.drawPoints(polygon) # Area if a_value >= 10000: painter.drawText(centroid, str(round(a_value / 1000000, 2)) + " km²") else: painter.drawText(centroid, str(round(a_value, 2)) + " m²") return
def drawPolygonOnVideo(values, painter, surface, gt): ''' Draw Polygons on Video ''' poly = [] for pt in values: scr_x, scr_y = vut.GetInverseMatrix(pt[1], pt[0], gt, surface) center = QPoint(scr_x, scr_y) poly.append(center) polygon = QPolygonF(poly) path = QPainterPath() path.addPolygon(polygon) painter.setPen(PolyPen) painter.drawPolygon(polygon) painter.fillPath(path, PolyBrush) painter.setPen(DrawToolBar.white_pen) painter.drawPoints(polygon) return
def drawPolygonOnVideo(values, painter, surface, gt): ''' Draw Polygons on Video ''' poly = [] for pt in values: if hasElevationModel(): pt = GetLine3DIntersectionWithPlane(GetSensor(), pt, GetFrameCenter()[2]) scr_x, scr_y = vut.GetInverseMatrix(pt[1], pt[0], gt, surface) center = QPoint(scr_x, scr_y) poly.append(center) polygon = QPolygonF(poly) path = QPainterPath() path.addPolygon(polygon) painter.setPen(PolyPen) painter.drawPolygon(polygon) painter.fillPath(path, PolyBrush) painter.setPen(DrawToolBar.white_pen) painter.drawPoints(polygon) return
def paint(self, painter, xxx, xxx2): self.setPos(self.toCanvasCoordinates(self.map_pos)) halfSize = self.size / 2.0 rect = QRectF(0 - halfSize, 0 - halfSize, self.size, self.size) painter.setRenderHint(QPainter.Antialiasing) if self.quality == 0: color = self.red elif self.quality == 1: color = self.green elif self.quality >= 2: color = self.blue else: color = self.red self.pointpen.setColor(Qt.gray) self.pointpen.setWidth(2) self.pointbrush.setColor(color) painter.setBrush(self.pointbrush) painter.setPen(self.pointpen) y = 0 - halfSize x = rect.width() / 2 - halfSize line = QLine(x, y, x, rect.height() - halfSize) y = rect.height() / 2 - halfSize x = 0 - halfSize line2 = QLine(x, y, rect.width() - halfSize, y) # Arrow p = QPolygonF() p.append(QPoint(0 - halfSize, 0)) p.append(QPoint(0, -self.size)) x = rect.width() - halfSize p.append(QPoint(x, 0)) p.append(QPoint(0, 0)) offsetp = QPolygonF() offsetp.append(QPoint(0 - halfSize, 0)) offsetp.append(QPoint(0, -self.size)) x = rect.width() - halfSize offsetp.append(QPoint(x, 0)) offsetp.append(QPoint(0, 0)) waypoint = self.gps.waypoint if waypoint: az = self.map_pos.azimuth(waypoint) painter.save() painter.rotate(az) self.pointbrush.setColor(Qt.red) painter.setBrush(self.pointbrush) path = QPainterPath() path.addPolygon(offsetp) painter.drawPath(path) painter.restore() painter.save() painter.rotate(self._heading) path = QPainterPath() path.addPolygon(p) painter.drawPath(path) painter.restore() painter.drawEllipse(rect) painter.drawLine(line) painter.drawLine(line2)