1.在Map中增加轨迹图层MapPolyline
.......
// 飞机图标(你可以使用任何图片作为飞机图标)
Image {
id: planeIcon
source: "qrc:/../../bin/Img/home0.png" // 替换为你的飞机图标路径
width: 50; height: 50 // 根据需要调整大小
visible: true
}
// 飞机位置标记
MapQuickItem {
id: planeMarker
//coordinate: QtPositioning.coordinate(30.66, 104.11) // 飞机的初始位置
anchorPoint: Qt.point(planeIcon.width / 2, planeIcon.height / 2 +15) // 使图标中心对齐标记中心
sourceItem: planeIcon // 设置图标为标记的源项
}
2.在Map_Navigation.qml中增加如
import QtQuick 2.0
import QtQuick.Controls 2.12
import QtQuick.Controls 2.12
import QtLocation 5.12
import QtPositioning 5.12
import MyModel 1.0
import QtQuick.Dialogs 1.2
Canvas {
id: canvas
anchors.fill: parent
anchors.margins: 1
FileDialog{
id: pathtxt_dailog
visible: false
title: "打开轨迹文件"
onAccepted: {
//此处轨迹文件直接从文件读取。如果不想从文件读取,可参考上篇文章轨迹绘制,直接从coordinatesModel获取即可
file.source =pathtxt_dailog.fileUrl;
console.log("File selected:", pathtxt_dailog.fileUrl) // 获取选择的文件路径
// 这里可以将fileDialog.fileUrl传递给其他函数或直接处理文件
}
onRejected: {
console.log("Canceled") // 用户取消了选择
}
Component.onCompleted: visible = false // 默认不显示对话框,由Button触发显示
}
File {
id: file
source: "D:/M.txt";
}
/*
//用来页面显示dd数值
Text {
text: dd
font.pixelSize: 32
anchors.centerIn: parent
}
*/
ListModel {
id: coordinateModel
ListElement { Latitude: 0.00000000; Longitude: 0.00000000} // Initial point if needed
// 添加更多坐标点
}
/*
QtObject {
Component.onCompleted: {
//requestshot();
source: "D:/M.txt";
}
}
*/
property var tmpData : file.text; //从文件中抽取所有字符到var字符串
property var lines : tmpData.split("\n"); //先按行读取字符串
onPaint: {
var var1=""; // 用于存储第一个元素
var var2=""; // 用于存储第二个元素等
for (var i = 0; i < lines.length; i++) { //接下来按行进行处理
//console.log("xxx---" + lines[i]);
//逗号分割纬、经度
var parts = lines[i].split(","); // 分割字符串
//得到了对应的,示例:“{Latitude:30.100241237281463”、“Longitude:124.3352980367739}”字符串,接下来继续提取
var1 = parts[0]; //获取Latitude
if(var1.length>0) //如果能获取到Latitude再继续
{
var1 = var1.substring(var1.indexOf(":") + 1) //把字符1部分的,“:”之前的全去掉
var2 = parts[1]; //获取Longitude
var2 = var2.substring(var2.indexOf(":") + 1) //把字符2部分的,“:”之前的全去掉
var2= var2.replace("}", ""); // 删除字符串2结尾的“}”
//生成点位坐标
var nextPosition = QtPositioning.coordinate(var1, var2);
//console.log("ddd---" + var1, var2)
//开始画轨迹线
trackLine.addCoordinate(nextPosition);
//将当前点位坐标存入ListModel
coordinateModel.append({"Latitude": Number(var1), "Longitude": Number(var2)})
}
}
/*
for (var kk = 0; kk < coordinateModel.count; kk++) {
//var element = coordinateModel.get(kk);
var element = "Point: (" + coordinateModel.get(kk).Latitude + ", " + coordinateModel.get(kk).Longitude + ")"
console.log(element);
}*/
onClicked: {
//requestshot();
timer1.running=true;
if(bearing_timer.visible == true)
{
bearing_timer.visible = false
}else
{
bearing_timer.visible = true;
}
}
}
function requestshot(){
pathtxt_dailog.open();
}
Timer {
id: timer1
interval: bearing_timer.value // 每秒更新一次位置
running: false // 自动开始计时器
repeat: true // 重复运行计时器
property int dd: 0
onTriggered: {
var index = coordinateModel.count; // 循环获取坐标索引
if(index >0){
//开始探寻轨迹
//to: QtPositioning.coordinate(30.66, 104.11) // 新中心点坐标
//trackLine2.addCoordinate(QtPositioning.coordinate(coordinateModel.get(dd).Latitude, coordinateModel.get(dd).Longitude)); // 更新地图中心点,更新飞机位置标记的坐标
planeMarker.coordinate = QtPositioning.coordinate(coordinateModel.get(dd).Latitude, coordinateModel.get(dd).Longitude); // 更新地图中心点,更新飞机位置标记的坐标
//coordinateModel.move(index, 1, 0); // 将当前坐标移到数组末尾,以便下次触发时取下一个坐标
//console.log(dd, +" "+ coordinateModel.get(dd).Latitude, coordinateModel.get(dd).Longitude)
//判断一下,别越界
if(dd <index-1)
{
dd++;
}else
{
dd=0; //归零之后继续循环寻轨
}
}
}
}
}
3.实现效果:
Map地图QtLocation实现轨迹导航,时间轴控制速度