gpt4 book ai didi

javascript - 如何根据经纬度计算距离

转载 作者:行者123 更新时间:2023-11-29 13:21:44 24 4
gpt4 key购买 nike

在 Postgres 9.1+ 数据库中包含路由点:

create table doksyndm (
id serial primary key,
readingtime timestamp with time zone not null,
latitude float,
longitude float
);

使用来自 javascript 的 navigator.geolocation 调用从浏览器保存点。

如何根据这些数据计算路线长度?路线小于 300 公里,因此点之间的直线长度可以相加。它应该适用于 Postgres 9.1 和更新版本。

结果应该是一个数字,以千米为单位的点之间的总距离。如果合理,可以重构数据库和javascript代码发送点。

Calculate distance between two points in google maps V3 中的答案如何用过程语言实现这一点。

它们使用 SQL 中不可用的 for 循环。带有窗口函数的 Maby SUM() 可以用来实现这个吗?

最佳答案

我假设您想要从最早点到下一个最早点的距离,依此类推...

从 Postgresql 9.3 开始,有一个使用 lateral join 的优雅解决方案。 .

首先,安装 postgis 扩展,这样您就可以使用它的距离功能:

CREATE EXTENSION POSTGIS;

现在查询:

 SELECT SUM(st_distance(st_point(a.longitude,a.latitude)::geography,
st_point(b.longitude,b.latitude)::geography)
) / 1000 AS distance_km FROM doksyndm a
LEFT JOIN LATERAL
(SELECT * FROM doksyndm WHERE readingtime > a.readingtime limit 1) b ON TRUE;

此查询使用 distinct on应该适用于所有版本:

 SELECT SUM (st_distance(st_point(alon,alat)::geography,
st_point(blon,blat)::geography))/1000 as distance_km FROM
( select distinct ON (a.readingtime) a.readingtime,
a.latitude as alat,
a.longitude as alon,
b.latitude as blat ,
b.longitude as blon
FROM doksyndm a inner join doksyndm b on a.readingtime < b.readingtime
ORDER by a.readingtime,b.readingtime) x

关于javascript - 如何根据经纬度计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40514702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com