绘制高精地图时需要gps的经纬度坐标,之前的实现方式是QGeocoordinate类的经纬度变量通过json的方式在qml中使用。
以画线为例,使用方式是这样哒。
1 for(var i in vehicleMapProcess.laneMedian){ // 道路条数 2 var newMapLaneMedian = Qt.createQmlObject('import QtLocation 5.9;import QtPositioning 5.5; // 这里只画中线 3 MapPolyline { 4 line.color:"'+color+'"; 5 line.width: 1; 6 smooth: true; 7 opacity: 0.6;}', 8 rootHighPrecisionMap, 9 "dynamicSnippet1"); 10 11 for( var j in vehicleMapProcess.laneMedian[i]){ // 每条道路差不多有1557个坐标点,laneMedian 是json变量 12 newMapLaneMedian.addCoordinate(QtPositioning.coordinate(vehicleMapProcess.laneMedian[i][j].lat, vehicleMapProcess.laneMedian[i][j].lon)) } 13 rootHighPrecisionMap.addMapItem(newMapLaneMedian) 14 }
影响时间的关键点在addCoordinate这是,这个函数就是往要画的path中增加gps坐标点。
查找帮助文档发现MapPolyline有个setPath(geoPath path)函数,该函数是设置整体的一个绘制路径,
我把所有的坐标添加 QList<QGeoCoordinate>变量,然后使用setPath赋值给到QGeoPath。
qml 代码中使用如下
var line = vehicleMapProcess.getMiddleGeopath();
middleRoad.setPath(line);
rootHighPrecisionMap.addMapItem(middleRoad);
效果秒加载,不用再苦等十几分钟。
该问题出现在qt版本是5.10.1而在qt5.11上做了修改,提高了性能。
Qt Location
- Greatly improved MapPolyline performance