Как сделать GeoJSON FeatureCollection урезанным указанным столбцом в PostgreSQL? - PullRequest
0 голосов
/ 04 октября 2019

У меня есть таблица "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 на терминал_ид.

Как это сделать?

...