Рассчитайте пройденное расстояние, используя postgis - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь написать свой первый запрос postgis

Моя таблица выглядит как ниже

time (with time time zone), track_id, geography(geography(Point, 4326))

Я пытаюсь вычислить расстояние на определенной трассе в течение некоторого временного диапазона. например,

select track_id, distance (in meters) from mytable where time between x and y group by track_id

Я видел пару постов в сети, но ни один из них не работает с географией или не набирает несколько баллов географии

CREATE TABLE data (
    time        TIMESTAMPTZ         NOT NULL,
    track_id    VARCHAR NOT NULL
    geography geography(point,4326) 
);

Пример данных

"2017-04-05 09:10:12-04";"1";"0101000020E6100000689B768C864A5540E00CA3C5BE953940"
"2017-04-06 15:23:10-04";"1";"0101000020E6100000358584DED14B55408F49905BDD953940"
"2017-05-12 05:30:03-04";"1";"0101000020E610000008420D3A7C50554060BE068E15903940"
"2017-05-20 01:19:24-04";"1";"0101000020E61000001D5C959F2F805540EEDBFFB6DDC23940"
"2017-05-20 01:17:52-04";"1";"0101000020E6100000E3F50599897F55406523C621D1C03940"

Итак, это данные GPS автомобиля, чей идентификатор равен единице. Мне нужно рассчитать общее расстояние, пройденное транспортным средством, скажем, на дату 2017-05-20 в метрах. Могут быть и другие виды с другим идентификатором.

Ссылка, например. https://gis.stackexchange.com/questions/268776/finding-total-distance-of-path-along-points-in-postgis но это берет геометрию вместо географии

1 Ответ

0 голосов
/ 07 января 2019

Вы можете использовать ST_MakeLine для агрегирования точек и затем ST_Length, которые могут принимать географические аргументы для получения расстояния

SELECT trak_id, ST_Length(ST_MakeLine("geography"::geometry)::geography) as d
FROM data 
GROUP by track_id --optionally group by date for example
...