此功能是一个客户定制的,主要是需要在地图上动态显示GPS的运动轨迹,有个应用场景就是一个带有监控的车子,实时在运动中,后台可以接收到经纬度信息,需要绘制对应的轨迹,相当于这些摄像机点位是动态移动的,这样就可以观测到摄像机的实时位置信息,双击摄像机还可以弹出画面实时预览,很直观。
GPS运动轨迹这个功能,也需要用到js的知识,其实就是封装一个js函数,绘制对应的线条路径,这个轨迹点可能包括的信息有经度、纬度、速度、时间、是否标记、时间等信息,写个结构体封装下,方便后期拓展,是否标记的含义是是否改点同时作为一个设备点添加,分段线的含义。
void frmMapWeb::loadPoint()
{
if (pointIndex == pointAll.count()) {
pointIndex = 0;
this->clear();
}
loadPoint(pointIndex);
pointIndex++;
}
void frmMapWeb::loadPoint(int index)
{
int count = pointAll.count();
QStringList list = pointAll.at(index).split(",");
GpsPointInfo gpsPointInfo;
gpsPointInfo.lng = list.at(0);
gpsPointInfo.lat = list.at(1);
gpsPointInfo.isMark = (index == 0 || index == 5 || index == count - 1);
gpsPointInfo.speed = qrand() % 90 + 10;
gpsPointInfo.time = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
append(gpsPointInfo);
}
void frmMapWeb::append(const frmMapWeb::GpsPointInfo &gpsPointInfo)
{
//取出详细数据,添加到坐标集合中进行绘制线条
QString point = gpsPointInfo.lng + "," + gpsPointInfo.lat;
pointCurrent << point;
QString js = QString("addPolyline('%1')").arg(pointCurrent.join("|"));
runJs(js);
//如果isMark则还需要添加对应的点
if (gpsPointInfo.isMark) {
//标注点名称 为空则不显示
QString name = "";
//标注点地址 为空则不显示
QString addr = "";
//标注点弹框信息html格式标题 为空则采用默认的格式
QString title = "";
//title = "<div style=\"color:#CE5521;font-size:25px;\">标题: 测试设备</div>";
//标注点弹框信息html格式内容 为空则采用默认的格式
QString tips = "";
QStringList list;
list << QString("<div style=\"color:#CE5521;font-size:15px;\">经度: %1</div>").arg(gpsPointInfo.lng);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">纬度: %1</div>").arg(gpsPointInfo.lat);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">速度: %1 kv/h</div>").arg(gpsPointInfo.speed);
list << QString("<div style=\"color:#CE5521;font-size:15px;\">时间: [%1]</div>").arg(gpsPointInfo.time);
tips = list.join("");
//标注点弹框信息最小宽度
int width = 150;
//单击以后触发什么动作 0-不处理 1-自己弹框 2-发送信号
int action = 1;
//动画效果 0-不处理 1-跳动 2-坠落
int animation = 0;
//动态图 http://lbsyun.baidu.com/jsdemo/img/fox.gif
//静态图 http://api.map.baidu.com/img/markers.png 需要指定iconindex
//本地图 m0.png ./m0.png m1.png 图标必须放在config文件夹下 大小默认53*52
//为空则采用默认图标
QString iconfile = "http://api.map.baidu.com/img/markers.png";
QString js = QString("addMarker('%1', '%2', '%3', '%4', %5, '%6', %7, %8, '%9')")
.arg(name).arg(addr).arg(title).arg(tips).arg(width)
.arg(point).arg(action).arg(animation).arg(iconfile);
runJs(js);
}
}