У меня есть таблица "Terminal_data" с позициями моих терминалов GPS:
+-------------+------------+------------------+--------------+
| terminal_id | location | gnss_date | trackline_id |
+-------------+------------+------------------+--------------+
| 0001 | POINT(x y) | 2019-10-04 13:20 | 1 |
+-------------+------------+------------------+--------------+
| 0001 | POINT(x y) | 2019-10-04 13:25 | 1 |
+-------------+------------+------------------+--------------+
| 0001 | POINT(x y) | 2019-10-04 14:05 | 2 |
+-------------+------------+------------------+--------------+
| 0001 | POINT(x y) | 2019-10-04 14:10 | 2 |
+-------------+------------+------------------+--------------+
| 0002 | POINT(x y) | 2019-10-04 13:21 | 1 |
+-------------+------------+------------------+--------------+
| 0002 | POINT(x y) | 2019-10-04 13:26 | 1 |
+-------------+------------+------------------+--------------+
Иногда терминалы GPS теряют подключение к Интернету, и я теряю данные GPS на сервере. Эти поездки отражены в столбце trackline_id.
У меня есть SQL-запрос, он возвращает одну линию трека для терминала GPS:
SELECT feature.terminal_id,
jsonb_build_object(
'type', 'FeatureCollection',
'features', jsonb_agg(feature.jsonb_build_object)) AS track_geojson
FROM (
SELECT
terminal_id,
jsonb_build_object(
'type', 'Feature',
'geometry', ST_AsGeoJson(
ST_MakeLine(location::geometry)
)::jsonb
--'properties', jsonb_build_object('terminal_id', terminal_id)
)
AS jsonb_build_object
FROM terminals_data
GROUP BY terminal_id
) as feature
WHERE terminal_id = '0001'
GROUP BY feature.terminal_id
РЕЗУЛЬТАТ:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[x, y],
[x, y],
[x, y],
[x, y],
]
}
}
]
}
Итак, я хочу получить объект GeoJSON в столбце «track_geojson» результатов для терминала 0001, усеченного на trackline_id
следующим образом:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[x, y],
[x, y],
]
}
},
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[x, y],
[x, y],
]
}
}
]
}
Две функции для каждого trackline_id на терминал_ид.
Как это сделать?