def testSettingFeature(self): """ test that feature is set when item moves """ a = QgsTextAnnotation() a.setFrameSize(QSizeF(300, 200)) a.setFrameOffsetFromReferencePoint(QPointF(40, 50)) a.setHasFixedMapPosition(True) a.setMapPosition(QgsPoint(12, 34)) a.setMapPositionCrs(QgsCoordinateReferenceSystem(4326)) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) # NOQA layer = QgsVectorLayer("Point?crs=EPSG:4326&field=station:string&field=suburb:string", 'test', "memory") canvas.setLayers([layer]) f = QgsFeature(layer.fields()) f.setGeometry(QgsGeometry.fromPoint(QgsPoint(14, 31))) f.setValid(True) f.setAttributes(['hurstbridge', 'somewhere']) self.assertTrue(layer.dataProvider().addFeatures([f])) a.setMapLayer(layer) self.assertFalse(a.associatedFeature().isValid()) a.setMapPosition(QgsPoint(14, 31)) self.assertTrue(a.associatedFeature().isValid()) self.assertEqual(a.associatedFeature().attributes()[0], 'hurstbridge') a.setMapPosition(QgsPoint(17, 31)) self.assertFalse(a.associatedFeature().isValid())
def testSettingFeature(self): """ test that feature is set when item moves """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm(QPointF(40 / 3.7795275, 50 / 3.7795275)) a.setHasFixedMapPosition(True) a.setMapPosition(QgsPointXY(12, 34)) a.setMapPositionCrs(QgsCoordinateReferenceSystem(4326)) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) # NOQA layer = QgsVectorLayer("Point?crs=EPSG:4326&field=station:string&field=suburb:string", 'test', "memory") canvas.setLayers([layer]) f = QgsFeature(layer.fields()) f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(14, 31))) f.setValid(True) f.setAttributes(['hurstbridge', 'somewhere']) self.assertTrue(layer.dataProvider().addFeatures([f])) a.setMapLayer(layer) self.assertFalse(a.associatedFeature().isValid()) a.setMapPosition(QgsPointXY(14, 31)) self.assertTrue(a.associatedFeature().isValid()) self.assertEqual(a.associatedFeature().attributes()[0], 'hurstbridge') a.setMapPosition(QgsPointXY(17, 31)) self.assertFalse(a.associatedFeature().isValid())
def annotatePredictions(self): if self.stationFeature is None: return a = QgsTextAnnotation() a.setMapLayer(self.predictionManager.stationsLayer) document = a.document() columnWidth = [80, 100, 60] columnAlign = ['left', 'left', 'right'] html = '<font size="+2"><b>' html += self.stationFeature['name'] + '<br>' + self.dateEdit.date( ).toString() + '<br>' html += '</b></font>' html += '<font size="+1"><table cellpadding="0" cellspacing="0">' html += '<tr>' for j in range(0, self.tableWidget.columnCount()): html += '<td width="{}"><b>{}</b></td>'.format( columnWidth[j], self.tableWidget.horizontalHeaderItem(j).text()) html += '</tr>' for i in range(0, self.tableWidget.rowCount()): html += '<tr bgcolor="{}">'.format('#FFFFFF' if i % 2 else '#EEEEEE') for j in range(0, self.tableWidget.columnCount()): html += '<td align="{}" width="{}">{}</td>'.format( columnAlign[j], columnWidth[j], self.tableWidget.item(i, j).text()) html += '</tr>' html += '</table></font>' document.setHtml(html) # TODO: this size and offset are wack. Can we dynamically calculate from the content somehow? a.setFrameSize(QSizeF(270, 300)) a.setFrameOffsetFromReferencePoint(QPointF(-300, -200)) a.setMapPosition(self.stationFeature.geometry().asPoint()) a.setMapPositionCrs( QgsCoordinateReferenceSystem( self.predictionManager.stationsLayer.crs())) # disable its symbol for symbol in a.markerSymbol().symbolLayers(): symbol.setEnabled(False) QgsProject.instance().annotationManager().addAnnotation(a)
def _linetool_annotate_point(self, point, idx): annotation = QgsTextAnnotation() c = QTextDocument() html = "<strong>" + str(idx) + "</strong>" c.setHtml(html) annotation.setDocument(c) annotation.setFrameSize(QSizeF(27, 20)) annotation.setFrameOffsetFromReferencePoint(QPointF(5, 5)) annotation.setMapPosition(point) annotation.setMapPositionCrs(self.map_crs) return QgsMapCanvasAnnotationItem( annotation, self._iface.mapCanvas()).annotation()
def testPosition(self): """ test that map canvas annotation item syncs position correctly """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm( QPointF(40 / 3.7795275, 50 / 3.7795275)) a.setMapPosition(QgsPointXY(12, 34)) a.setMapPositionCrs(QgsCoordinateReferenceSystem(4326)) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.show() canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) self.assertEqual(canvas.width(), 600) self.assertEqual(canvas.height(), 400) # test that correct initial position is set self.assertAlmostEqual(i.pos().x(), 120, 1) self.assertAlmostEqual(i.pos().y(), 110, 1) # shift annotation map position, check that item is moved a.setMapPosition(QgsPointXY(14, 32)) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) # check relative position a.setHasFixedMapPosition(False) a.setRelativePosition(QPointF(0.8, 0.4)) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1) # flicking between relative and fixed position a.setHasFixedMapPosition(True) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) a.setHasFixedMapPosition(False) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1)
def testPosition(self): """ test that map canvas annotation item syncs position correctly """ a = QgsTextAnnotation() a.setFrameSizeMm(QSizeF(300 / 3.7795275, 200 / 3.7795275)) a.setFrameOffsetFromReferencePointMm(QPointF(40 / 3.7795275, 50 / 3.7795275)) a.setMapPosition(QgsPointXY(12, 34)) a.setMapPositionCrs(QgsCoordinateReferenceSystem(4326)) canvas = QgsMapCanvas() canvas.setDestinationCrs(QgsCoordinateReferenceSystem(4326)) canvas.setFrameStyle(0) canvas.resize(600, 400) canvas.show() canvas.setExtent(QgsRectangle(10, 30, 20, 35)) i = QgsMapCanvasAnnotationItem(a, canvas) self.assertEqual(canvas.width(), 600) self.assertEqual(canvas.height(), 400) # test that correct initial position is set self.assertAlmostEqual(i.pos().x(), 120, 1) self.assertAlmostEqual(i.pos().y(), 110, 1) # shift annotation map position, check that item is moved a.setMapPosition(QgsPointXY(14, 32)) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) # check relative position a.setHasFixedMapPosition(False) a.setRelativePosition(QPointF(0.8, 0.4)) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1) # flicking between relative and fixed position a.setHasFixedMapPosition(True) self.assertAlmostEqual(i.pos().x(), 240, 1) self.assertAlmostEqual(i.pos().y(), 230, 1) a.setHasFixedMapPosition(False) self.assertAlmostEqual(i.pos().x(), 480, 1) self.assertAlmostEqual(i.pos().y(), 160, 1)