使用postgis计算旅行距离

时间:2019-01-07 17:28:35

标签: postgresql 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"

因此,这是ID为1的车辆的GPS数据。我需要计算出日期为2017-05-20的车辆行驶的总距离(以米为单位)。可能还有其他具有不同ID的视图。

参考例如https://gis.stackexchange.com/questions/268776/finding-total-distance-of-path-along-points-in-postgis 但这是采用几何学而不是地理学

1 个答案:

答案 0 :(得分:1)

您可以使用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