将点转换为线段
Convert points to line segments
在 MySQL 中,我有两个 table 用于存储 GPS 轨迹点,第二个 table 用于存储里程值。
我希望使用上面的两个 table 生成线段。
请查看 table 的附件图片:
Table:Trackpoint
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
Table: Chainage
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`
为我的英语道歉。
谢谢
你没有写出结果有什么问题,但我怀疑点的顺序是随机的。您需要在 group concat 内订购点,例如:
GROUP_CONCAT(
CONCAT(T1.longitude,' ',T1.latitude)
ORDER BY chainage
SEPARATOR ',')
请注意,有些点的里程数重复为 9,无法根据此数据确定它们的正确顺序。
在 MySQL 中,我有两个 table 用于存储 GPS 轨迹点,第二个 table 用于存储里程值。 我希望使用上面的两个 table 生成线段。 请查看 table 的附件图片:
Table:Trackpoint
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
Table: Chainage
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`
为我的英语道歉。
谢谢
你没有写出结果有什么问题,但我怀疑点的顺序是随机的。您需要在 group concat 内订购点,例如:
GROUP_CONCAT(
CONCAT(T1.longitude,' ',T1.latitude)
ORDER BY chainage
SEPARATOR ',')
请注意,有些点的里程数重复为 9,无法根据此数据确定它们的正确顺序。