You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于MySQL的GPS轨迹点与里程桩表生成QGIS可绘视图

解决MySQL生成QGIS可用轨迹线段的问题

我来帮你搞定这个问题!你的原SQL主要有几个关键问题导致线段不连接、重复生成:

  • 分组逻辑缺失:只按end_chainage分组,没关联R_id,导致不同线路(不同R_id)的同里程区段被错误合并
  • 轨迹点未排序:GROUP_CONCAT时没按chainage升序排列,生成的LineString点顺序混乱,自然连不成正确的线段
  • 关联逻辑冗余:LEFT JOIN会保留不在任何里程区段的轨迹点,改用INNER JOIN更贴合需求(只处理在区段内的点)

正确的SQL语句

CREATE VIEW qgis_track_segments AS
SELECT
    t2.R_ID AS route_id,
    t2.Start_Chainage AS start_chainage,
    t2.End_Chainage AS end_chainage,
    t2.Condition AS segment_condition,
    -- 按里程顺序拼接轨迹点,生成LineString
    ST_GeomFromText(
        CONCAT(
            'LineString(',
            GROUP_CONCAT(CONCAT(t1.longitude, ' ', t1.latitude) ORDER BY t1.chainage ASC SEPARATOR ','),
            ')'
        ),
        4326
    ) AS line_geom
FROM
    Trackpoint t1
INNER JOIN Chainage t2
    ON t1.r_id = t2.R_ID
    AND t1.chainage BETWEEN t2.Start_Chainage AND t2.End_Chainage
-- 按线路+里程区段唯一分组,确保每个区段对应一条线段
GROUP BY
    t2.R_ID,
    t2.Start_Chainage,
    t2.End_Chainage,
    t2.Condition;

关键修正说明

  • 分组逻辑优化:通过R_ID + Start_Chainage + End_Chainage组合分组,确保每个线路的每个里程区段只生成一条线段
  • 轨迹点排序:在GROUP_CONCAT中添加ORDER BY t1.chainage ASC,让轨迹点严格按里程顺序排列,生成连续的线段
  • 关联方式调整:用INNER JOIN替代LEFT JOIN,只保留属于某个里程区段的轨迹点,避免无效的空线段
  • 视图创建:直接创建视图qgis_track_segments,方便后续在QGIS中直接加载

QGIS使用步骤

  1. 在QGIS中添加MySQL数据库连接
  2. 找到刚创建的qgis_track_segments视图,添加到画布中
  3. 系统会自动识别line_geom字段为空间几何列,直接就能看到正确连接的轨迹线段

内容的提问来源于stack exchange,提问作者loy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:47:32