【问题标题】:Convert points to line segments将点转换为线段
【发布时间】:2020-08-13 09:21:31
【问题描述】:

在 MySQL 中,我有两个表来存储 GPS 轨迹点和第二个表来存储里程值。 我希望通过使用上面的两个表来生成线段。 请参阅两个表格的附件图片:

表:跟踪点

r_id    chainage    latitude    longitude
5246    0   12.251324   105.984187
5246    5   12.251354   105.984224
5246    6   12.251357   105.984219
5246    8   12.25137    105.984231
5246    9   12.251374   105.984222
5246    9   12.251374   105.984217
5246    9   12.251374   105.984217
5246    10  12.251373   105.984217
5246    17  12.251307   105.984206
5246    38  12.251117   105.984186
5246    42  12.251082   105.984184
5246    60  12.250926   105.984155
5246    88  12.250668   105.98414
5246    125 12.250338   105.984167
5246    129 12.250311   105.984186
5246    133 12.250278   105.984209
5246    138 12.250246   105.984233
5246    189 12.249824   105.984432
5246    275 12.249232   105.984933
5246    389 12.248444   105.985601
5246    475 12.247789   105.986025
5246    493 12.247635   105.986089
5246    503 12.247557   105.986123
5246    622 12.246541   105.986484

表:

R_ID    Start_Chainage  End_Chainage    Condition
5246    0               30              Good
5246    10              50              Bad
5246    50              100             Fair
5246    100             140             Good
5246    140             230             Bad
5246    230             500             Poor
5246    500             627             Good

**如何生成能够在 QGIS 中画线的视图。类似这个

我试过这个:,但结果并不如预期。它显示每个部分没有连接,并且每个部分有很多行。

SELECT
  `t1`.`id`             AS `id`,
  `t1`.`chainage`       AS `chainage`,
  `t2`.`start_chainage` AS `start_chainage`,
  `t2`.`end_chainage`   AS `end_chainage`, 
  `t2`.`condition`    AS `Condition`,
   ST_GeomFromText(CONCAT("LineString(", GROUP_CONCAT(T1.longitude,' ',T1.latitude SEPARATOR ','), ")", ""),4326) AS line_wkt

FROM (`trackpoint` `t1`
   LEFT JOIN `Chainage` `t2`
     ON (`t1`.`id` = `t2`.`R_id`))
WHERE t1.`chainage`>=t2.`start_chainage` AND t1.`chainage`<=t2.`end_chainage`
GROUP BY t2.`end_chainage`

为我的英语道歉。
谢谢

【问题讨论】:

  • 你能不能用文字代替图片见meta.stackoverflow.com/questions/285551/…
  • 您能否说明结果与预期有何不同?
  • 嗨@MichaelEntin! 1.各个部分没有连接。 2.线条不是从点1到2..3按顺序绘制的......

标签: mysql line gis qgis segment


【解决方案1】:

你没有写出结果有什么问题,但我怀疑分数的顺序是随机的。您需要在组 concat 中排序点,例如:

GROUP_CONCAT(
   CONCAT(T1.longitude,' ',T1.latitude)
   ORDER BY chainage 
   SEPARATOR ',')

请注意,有些点的里程数为 9,此数据无法确定它们的正确顺序。

【讨论】:

  • 感谢您的帮助。它有助于纠正我在组 concat 中的错误顺序。还有一个问题是每段线路没有相互连接。
  • 还有一点工作要做。原因是有了这个GROUP BY,每个点只能进入一个组。所以组之间没有联系。你需要找到例如每组的最新点并将其添加为下一组的第一个点。也许是另一个JOIN,也许使用分析函数来代替JOIN
  • 我尝试选择每个组的最新点并添加到下一个组,但我没有找到解决方案。能否请你帮忙 ? :P
  • 我能够找到每组的最后一点,但不知道如何将其作为每组的第一点注入。能否请你帮忙?这是查找最新点的代码。 CONCAT (ST_X(ST_EndPoint(ST_GeomFromText(CONCAT("LineString(", GROUP_CONCAT(T1.longitude,' ',T1.latitude ORDER BY t1.chainage` SEPARATOR ',' ), ")", ""),4326))),' ', ST_Y(ST_EndPoint(ST_GeomFromText(CONCAT("LineString(", GROUP_CONCAT(T1.longitude,' ',T1 .latitude ORDER BY t1.chainage SEPARATOR ','), ")", ""),4326))))`
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 2018-12-06
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 2020-01-26
  • 2012-11-21
  • 2021-10-06
相关资源
最近更新 更多