attributetrackingmodel.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #include "attributetrackingmodel.h"
  2. #include <QDebug>
  3. #include <QUrl>
  4. #include <QBuffer>
  5. #include "qgssymbol.h"
  6. #include "qgsrenderer.h"
  7. #include "qgscategorizedsymbolrenderer.h"
  8. AttributeTrackingModel::AttributeTrackingModel()
  9. : QQuickImageProvider( Image ) { }
  10. QList<QObject *> AttributeTrackingModel::getLayerFields(QgsVectorLayer *layer)
  11. {
  12. //qDebug() << "getLayerFields()";
  13. QList<QObject *> fieldItems;
  14. if(!layer){ //i should not allow calling this method with no layer context
  15. //qDebug() << "no layer";
  16. return fieldItems;
  17. }
  18. QgsFields fields = layer->fields();
  19. for(int i = 0 ; i < fields.count(); i++){
  20. //qDebug() << "Name: " << fields[i].alias();
  21. //qDebug() << "Value: " << fields[i].name();
  22. fieldItems.append(new FieldItem(fields[i].name(), fields[i].alias()));
  23. }
  24. //FieldItem test = *dynamic_cast<FieldItem *>(fieldItems[3]);
  25. //qDebug() << test.alias();
  26. //qDebug() << test.name();
  27. return fieldItems;
  28. }
  29. void AttributeTrackingModel::startTracker(QgsVectorLayer *layer, QString inspectedAttribute, QModelIndex layerTreeIndex)
  30. {
  31. if(!mTracker)
  32. mTracker = new AttributeTracker();
  33. mTracker->attribute = inspectedAttribute;
  34. mTracker->layer = layer;
  35. //mTracker->layerTreeIndex = layerTreeIndex;
  36. emit trackerStarted(mTracker->layer, mTracker->attribute);
  37. }
  38. void AttributeTrackingModel::stopTracker()
  39. {
  40. delete(mTracker);
  41. mTracker = nullptr;
  42. emit trackerStopped();
  43. }
  44. void AttributeTrackingModel::processIdentifyResults(QgsFeatureList results)
  45. {
  46. if(results.count() < 1){
  47. emit locationRecieved("NO FEATURE FOUND", "");
  48. return;
  49. }
  50. QgsFeature result = results.first();
  51. QString attributeValue = result.attribute(mTracker->attribute).toString();
  52. // QgsRenderContext context = QgsRenderContext::fromMapSettings(mMapSettings->mapSettings());
  53. // QgsFeatureRenderer * renderer = mTracker->layer->renderer();
  54. // QgsCategorizedSymbolRenderer* symbolRenderer = QgsCategorizedSymbolRenderer::convertFromRenderer(renderer);
  55. // renderer->startRender(context, mTracker->layer->fields());
  56. // QgsSymbol* symbol = renderer->originalSymbolForFeature(result, context);
  57. // renderer->stopRender(context);
  58. test(mTracker->layer->id());
  59. //QImage image = symbol->asImage(QSize(40,40));
  60. //QString image = mLayerTreeModel->data(mTracker->layerTreeIndex, FlatLayerTreeModel::LegendImage).toString();
  61. emit locationRecieved(attributeValue, QString::number(result.id()));
  62. }
  63. void AttributeTrackingModel::recieveLocation(QgsPoint location)
  64. {
  65. processIdentifyResults(identifyLayer(mTracker->layer, location));
  66. }
  67. bool AttributeTrackingModel::tracking()
  68. {
  69. return mTracker != nullptr;
  70. }
  71. QgsQuickMapSettings *AttributeTrackingModel::mapSettings() const
  72. {
  73. return mMapSettings;
  74. }
  75. void AttributeTrackingModel::setMapSettings(QgsQuickMapSettings *newMapSettings)
  76. {
  77. test("setMapSettings");
  78. mMapSettings = newMapSettings;
  79. }
  80. QImage AttributeTrackingModel::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
  81. {
  82. if(id == "")
  83. return QImage();
  84. QgsRenderContext context = QgsRenderContext::fromMapSettings(mMapSettings->mapSettings());
  85. QgsFeatureRenderer * renderer = mTracker->layer->renderer();
  86. QgsCategorizedSymbolRenderer* symbolRenderer = QgsCategorizedSymbolRenderer::convertFromRenderer(renderer);
  87. renderer->startRender(context, mTracker->layer->fields());
  88. QgsSymbol* symbol = renderer->originalSymbolForFeature(mTracker->layer->getFeature(id.toLongLong()), context);
  89. renderer->stopRender(context);
  90. QSize sizeValue = *size;
  91. qDebug() << "size.width = " << size->width();
  92. qDebug() << "size.height = " << size->height();
  93. qDebug() << "requestedSize.width = " << requestedSize.width();
  94. qDebug() << "requestedSize.height = " << requestedSize.height();
  95. return symbol->asImage(QSize(requestedSize.width() / 5, requestedSize.height() / 5));
  96. }
  97. void AttributeTrackingModel::test(QString msg)
  98. {
  99. qDebug() << msg;
  100. }