一场不期而遇的美好 当无线遇上大数据

新华三集团利用无线网络和大数据技术,提升数据感知和服务能力。通过收集实时数据并进行深入分析,为企业提供基于位置的服务和行为分析,实现了从关注网络管道到洞悉数据内容的转变。

大数据是这个时代最伟大的机遇之一,其应用已经渗透到我们的各行各业和生产生活中。而无线网络为人们提供了高速上网体验,极大地丰富了我们的生活。当两者不期而遇,又会邂逅到怎样的美好“情缘”?

“有了大数据,我们能做的更多更好!”如此自信之语来自新华三集团。新华三是国内新IT解决方案领导者,尤其在无线网络建设方面积累有丰富的经验。过去,新华三一直专注于信息技术变革,聚焦在如何让无线设备更快、更稳定、更可靠,也就是“T”上;而现在,新华三力争实现经验价值最大化,将聚光灯瞄向“I”上,即关注数据本身的价值。

无线网络是未来大数据采集的重要途径

要挖掘数据价值,找到海量数据采集传输管道是关键。作为移动互联网的入口,无线网络为人们提供了良好的移动化办公接入体验,并逐渐发展成为线下数据的重要入口,发挥着数据采集与数据管道的作用。随着大数据时代的来临,无线网络与大数据结合形成的无线数据,也受到越来越多企业的重视!

无线数据的使用从MAC探针数据开始,通过MAC探针数据分析人流情况,利用漫游轨迹分析用户移动规律,无线数据带来了很大便利。随着大数据等新技术的发展普及,不少无线网络设备提供商期待利用新技术能做一些更有价值的事情,为用户提供更好的数据服务。

如何提供更好的数据服务呢?最重要的还是提高数据感知、行为感知能力。以往,人们通过时间、地点、人物、背景、事件、经过、结果等要素来认知事情,可多数情况下,纪录事件的相关数据是结果数据,对过程数据无从考究。而现在利用无线网络收集数据及日志,可纪录一件事情的关键过程数据,通过对这些数据进行分析总结,能够知道用户何时上线,位置轨迹如何,进而提供基于位置的服务以及行为分析。

新华三具备专业大数据分析能力

虽然,无线网络具备了数据采集能力,但仅有数据不做分析并不能挖掘出数据的真正价值。对此,在新IT领域有着广泛积累的新华三,基于无线大数据技术及解决方案,建立了完整的服务体系,拥有更强的服务能力。

1.常规数据收集能力。无线网络不只解决终端接入和数据转发,还具备数据收集的能力,尤其数据实时获取能力。基于位置服务的应用对无线设备实时获取数据提出了更高的要求,目前新华三Wi-Fi网络已经具备秒级获取数据的能力。

2.数据解析及存储能力。无线数据类型丰富多样、格式各异,要让数据发挥价值,必须能够充分解析无线数据,并拥有海量数据存储能力,大规模分布式数据平台显得尤为重要。

3.数据分析挖掘能力。新华三无线大数据平台包含丰富的数据挖掘算法及可视化呈现能力,可以将无线数据与用户业务数据进行关联分析,提供更精准的大数据服务。这一切能力的体现都基于一个根本原则:新华三了解无线网络、了解数据类型、掌握数据格式,尤其拥有大数据平台及大数据分析挖掘能力。

无线大数据  校园新实践

对于新华三无线大数据技术及解决方案,应用场景十分广泛。以无线校园大数据技术应用为例,新华三通过H3C DataEngine大数据平台整合机器数据、传统业务数据、互联网非结构化数据。经过数据治理,输出提炼后规范化中间数据作为iPaaS对上层服务。

其中,无线大数据技术是区别于传统数据应用的主要组成部分。例如,通过校园AP位置信息与地图结合生成基础坐标库,学校通过人员分布、轨迹分析、失联预警等应用服务调用该坐标库,从而获得所需要的位置信息。

大数据技术与无线网络结合,使新华三从关注网络管道转向洞悉数据内容,实现新IT价值最大化。无线大数据解决方案正在走向成熟,这一过程任重道远,新华三将通过持续不断的探索来完善无线大数据解决方案,为客户提供更好体验的数据服务体系。



本文出处:畅享网
本文来自云栖社区合作伙伴畅享网,了解相关信息可以关注vsharing.com网站。

<think>我们希望在QCustomPlot中,当鼠标悬停在线段的数据点上时,显示该点的字符串信息(例如坐标值或自定义标签)。这通常通过以下步骤实现:1.启用鼠标跟踪和悬停事件。2.创建一个文本标签(QCPItemText)或者使用其他方式(如QToolTip)来显示信息。3.在鼠标移动事件中,检查是否有数据点在鼠标位置附近(通过计算距离),如果有,则更新标签位置和内容。这里我们采用QCPItemText来显示信息,并跟随鼠标移动。同时,为了在数据点附近悬停时显示,我们需要在鼠标移动事件中遍历所有数据点,找到最近的数据点。具体步骤如下:步骤1:初始化设置在构造函数中启用鼠标跟踪和悬停事件:customPlot->setMouseTracking(true);customPlot->setInteraction(QCP::iRangeDrag,true);customPlot->setInteraction(QCP::iRangeZoom,true);步骤2:创建用于显示的文本标签和背景矩形(可选)我们可以创建两个QCPItem对象:一个矩形作为背景,一个文本标签。步骤3:连接鼠标移动信号连接customPlot的mouseMove信号到一个自定义槽函数。步骤4:在槽函数中实现-获取鼠标位置,将其转换为坐标值。-遍历需要检测的曲线上的数据点,计算每个数据点到鼠标坐标的距离(像素距离)。-找到最近的数据点,如果该距离小于一个阈值(例如5像素),则显示该点的信息。-更新文本标签的位置和内容,并显示出来。如果距离大于阈值,则隐藏标签。注意:为了性能,我们只检查当前鼠标所在位置的附近点,避免遍历整个数据集。代码示例:头文件声明槽函数:privateslots:voidonMouseMove(QMouseEvent*event);在初始化函数中://创建文本标签和背景QCPItemText*textLabel=newQCPItemText(customPlot);QCPItemRect*rect=newQCPItemRect(customPlot);//将rect设置为textLabel的背景,这里可以设置rect在textLabel后面//并设置rect的大小和位置绑定到textLabel//连接信号connect(customPlot,&QCustomPlot::mouseMove,this,&MyClass::onMouseMove);//初始隐藏标签textLabel->setVisible(false);rect->setVisible(false);槽函数实现:voidMyClass::onMouseMove(QMouseEvent*event){doublex=customPlot->xAxis->pixelToCoord(event->pos().x());doubley=customPlot->yAxis->pixelToCoord(event->pos().y());//假设我们有一条曲线graph,获取其数据if(graph){doubleminDist=5;//像素距离阈值doubledist=minDist;QCPGraphDataContainer::const_iteratorclosestPointIt=graph->data()->constEnd();//遍历数据点for(autoit=graph->data()->constBegin();it!=graph->data()->constEnd();++it){doublepointX=it->key;doublepointY=it->value;QPointFpointPixels=customPlot->xAxis->coordToPixel(pointX);QPointFmousePixels(event->pos());doublecurrentDist=sqrt(pow(pointPixels.x()-mousePixels.x(),2)+pow(pointPixels.y()-mousePixels.y(),2));if(currentDist< dist){dist=currentDist;closestPointIt=it;}}if(closestPointIt!=graph->data()->constEnd()){//显示标签textLabel->setText(QString("(%1,%2)").arg(closestPointIt->key).arg(closestPointIt->value));textLabel->position->setCoords(closestPointIt->key,closestPointIt->value);textLabel->setVisible(true);//调整背景矩形的位置和大小,使其围绕文本//这里省略背景矩形的调整,可以根据需要设置rect->setVisible(true);//重绘customPlot->replot();}else{//没有找到,则隐藏textLabel->setVisible(false);rect->setVisible(false);customPlot->replot();}}}但是,上面的做法在数据点很多时可能会影响性能。因此,我们可以优化:只检查鼠标附近一定范围内的点。另外,QCustomPlot提供了一个更高效的方法:使用`selectTest`或`getKeyAxis()->pixelToCoord`和`valueAxis()->pixelToCoord`,然后利用数据的排序特性(如按x排序)只检查邻近点。但对于简单应用,上述遍历是可以接受的(如果点数不多)。更高效的方法:利用QCustomPlot的数据为键值对排序的特点,通过二分查找快速定位到鼠标x坐标附近,然后检查前后一定数量的点。但是,为了简单,我们假设数据点不多,采用遍历。如果需要显示自定义字符串(而不仅仅是坐标),可以在数据点的数据中存储额外信息(例如,使用`QCPData`的子类或者用map存储额外信息),然后在显示时读取。另外,我们也可以使用QToolTip来显示信息,但是QToolTip会在鼠标下方显示,可能不如文本标签灵活。选择使用QToolTip的示例:if(closestPointIt!=graph->data()->constEnd()){QToolTip::showText(event->globalPos(),QString("X:%1\nY:%2").arg(closestPointIt->key).arg(closestPointIt->value),customPlot);}else{QToolTip::hideText();}但用户要求显示字符串信息,且希望使用文本标签,所以我们用第一种方法。注意:在多个曲线的情况下,我们需要遍历所有曲线,并找到所有曲线中最近的点。这里假设我们只针对一条曲线。针对多条曲线:doubleminDist=5;QCPGraph*closestGraph=nullptr;QCPGraphDataContainer::const_iteratorclosestPointIt;//遍历所有曲线for(inti=0;i<customPlot->graphCount();++i){QCPGraph*graph=customPlot->graph(i);//对graph的数据进行遍历,找到最小距离点for(autoit=graph->data()->constBegin();it!=graph->data()->constEnd();++it){//计算距离...}}然后显示最近的点(注意,要比较所有曲线上的点)。由于时间关系,这里只针对一条曲线。用户可以根据需要扩展。下面我们给出完整代码示例(假设在MainWindow中操作):</think> 在 QCustomPlot 中实现鼠标悬停在线段点时显示字符串信息,可以通过以下步骤实现: ### 实现方案 #### 1. 继承 `QCPLayerable` 创建自定义数据点提示类 ```cpp class DataPointTracer : public QCPLayerable { public: explicit DataPointTracer(QCustomPlot *parentPlot, QCPGraph *targetGraph); void setText(const QString &text); void updatePosition(QPointF pos); protected: void draw(QCPPainter *painter) override; private: QPointer<QCPGraph> mGraph; QPointF mPosition; QString mText; }; DataPointTracer::DataPointTracer(QCustomPlot *parentPlot, QCPGraph *targetGraph) : QCPLayerable(parentPlot), mGraph(targetGraph) { // 设置层在绘图元素之上 setLayer("overlay"); setAntialiased(false); } void DataPointTracer::setText(const QString &text) { mText = text; } void DataPointTracer::updatePosition(QPointF pos) { mPosition = pos; } void DataPointTracer::draw(QCPPainter *painter) { if (mText.isEmpty()) return; // 计算文本在绘图区的位置 QPointF pixelPos = customPlot()->xAxis->coordToPixel(mPosition.x()); pixelPos.setY(customPlot()->yAxis->coordToPixel(mPosition.y())); // 绘制文本背景 QFontMetrics metrics(painter->font()); QRect textRect = metrics.boundingRect(mText); textRect.moveTo(pixelPos.x() + 8, pixelPos.y() - textRect.height()); painter->setPen(Qt::NoPen); painter->setBrush(QColor(255, 255, 255, 220)); painter->drawRect(textRect); // 绘制文本 painter->setPen(Qt::black); painter->drawText(textRect, Qt::AlignCenter, mText); } ``` #### 2. 重写 `graph` 的鼠标悬停事件 ```cpp class InteractiveGraph : public QCPGraph { protected: void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) override; void deselectEvent(bool *selectionStateChanged) override; private: QSharedPointer<DataPointTracer> mTracer; }; void InteractiveGraph::selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) { QCPGraph::selectEvent(event, additive, details, selectionStateChanged); if (!mTracer) { mTracer.reset(new DataPointTracer(parentPlot(), this)); mTracer->setVisible(true); } // 获取最接近的数据点 QPoint pos = event->pos(); double key = parentPlot()->xAxis->pixelToCoord(pos.x()); double value; bool found; value = data()->findBegin(key)->value; // 简化版,实际使用应精确查找 // 设置提示内容 mTracer->setText(QString("点(%1, %2)").arg(key, 0, 'f', 2).arg(value, 0, 'f', 2)); mTracer->updatePosition(QPointF(key, value)); // 重绘图表 parentPlot()->replot(); } void InteractiveGraph::deselectEvent(bool *selectionStateChanged) { QCPGraph::deselectEvent(selectionStateChanged); if (mTracer) { mTracer->setText(""); // 清空文本 parentPlot()->replot(); } } ``` #### 3. 在绘图区域初始化 ```cpp void initPlot() { // 创建交互式曲线 InteractiveGraph *graph = new InteractiveGraph(customPlot->xAxis, customPlot->yAxis); graph->setData(xData, yData); // 启用点选择功能 graph->setSelectable(QCP::stSinglePoint); // 配置图表样式... customPlot->replot(); } ``` #### 4. 注册处理函数 ```cpp // 在构造函数中添加 customPlot->setInteractions(QCP::iSelectPlottables); ``` ### 关键技术点 1. **精确点检测**: 使用 `QCPDataContainer` 的二分查找: ```cpp auto point = graph->data()->findBegin(key); double minDistance = std::abs(point->key - key); // 搜索前后5个点找最近点 ``` 2. **自定义文本格式**: ```cpp // 可扩展为显示额外数据 QString info = QString("温度: %1℃\n时间: %2") .arg(value, 0, 'f', 1) .arg(QDateTime::fromSecsSinceEpoch(key).toString("hh:mm:ss")); ``` 3. **性能优化**: ```cpp // 在数据量大时启用OpenGL加速 customPlot->setOpenGl(true); // 设置点搜索半径限制 const double maxPixelDist = 15.0; // 最大允许像素距离 ``` 4. **多图表支持**: 当多个图表共存时,为每个 `InteractiveGraph` 实例创建独立的 `DataPointTracer` ### 效果演示 当鼠标悬停在数据点上时: 1. 显示半透明背景矩形 2. 显示精确的坐标值或自定义信息 3. 鼠标离开后提示自动消失 [^1]: QCustomPlot 官方文档中关于绘图项扩展的示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值