Qt位置编辑地图多段线
我的目标是允许用户使用鼠标在地图多段线上拖放点来编辑地图多段线。我通过创建一个C++模型来实现,它公开了<>强> PATH()/Sturial>方法,用于抛出所有点来画线。 然后,我使用该模型为直线上的每个顶点显示一组贴图圆。这些Mapcircles具有拖动事件,这些事件会在拖动完成后更新MapPolyLine模型 这适用于顶点数小于500的直线。然后表现就很糟糕了。我的一些线(来自GPX文件)有10000个顶点 所以我尝试只在靠近鼠标悬停点的线上显示MapCircles。但是(除非我弄错了),MapPolyLine的鼠标earea似乎是线条的边界框,在奇怪的情况下可能会触发悬停 我发现onenterned事件运行得很好,足以让我计算出线上的位置,然后在该位置附近显示一组地图圈。但这是一个次优解决方案,因为用户必须主动单击线条才能显示这些地图圈 我的问题是:“我是否使用了正确的策略来允许编辑贴图多段线?”。在当前的QtLocation实现中,我看不到任何其他方法 代码现在相当复杂。它的结构是:-Qt位置编辑地图多段线,qt,qml,qtlocation,Qt,Qml,Qtlocation,我的目标是允许用户使用鼠标在地图多段线上拖放点来编辑地图多段线。我通过创建一个C++模型来实现,它公开了强> PATH()/Sturial>方法,用于抛出所有点来画线。 然后,我使用该模型为直线上的每个顶点显示一组贴图圆。这些Mapcircles具有拖动事件,这些事件会在拖动完成后更新MapPolyLine模型 这适用于顶点数小于500的直线。然后表现就很糟糕了。我的一些线(来自GPX文件)有10000个顶点 所以我尝试只在靠近鼠标悬停点的线上显示MapCircles。但是(除非我弄错了),Ma
GPXModel {
id: gpxModel
}
MapPolyLine {
path: gpxModel.path
MouseArea {
onEntered: {
var mapCoord = gpxLine.mapToItem(mapView,mouseX,mouseY);
var coord = mapView.toCoordinate(Qt.point(mapCoord.x,mapCoord.y));
//tell the model where we are in the array of points so we can display MapCircles around this point
gpxModel.setEditLocationFromCoordinate(coord);
}
}
}
MapItemView {
model: gpxModel
MapCircle {
//this is a custom role I use to return a sub-set of points set by setEditLocationFromCoordinate
center: positionRole
MouseArea{
anchors.fill: parent
drag.target: parent
onDragActiveChanged: {
if(!drag.active){
gpxModel.updatePositionOfMarker();
}
}
}
}
}
这个项目是开源的,但有一点需要注意,我把它作为一个学习练习,所以它是有点乱七八糟的
编辑:我不想使用基于webview的解决方案。该项目的重点是在本机Qt中实现这一点,同时尽量不依赖第三方javascript库/浏览器。请在您的应用程序中提供一种方法,以便轻松创建这样一条有问题的线条。当我加载它时,它看起来很平滑。当我按edit时,应用程序会在短时间后崩溃