Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算与经纬度的距离_Javascript_Sql_Postgresql_Geolocation_Plpgsql - Fatal编程技术网

Javascript 如何计算与经纬度的距离

Javascript 如何计算与经纬度的距离,javascript,sql,postgresql,geolocation,plpgsql,Javascript,Sql,Postgresql,Geolocation,Plpgsql,在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+中,数据库包含路由点:

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代码发送点

关于如何在神化语言中实现这一点的答案


它们使用SQL中不可用的for循环。可以使用带窗口的求和函数来实现这一点吗?

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

从Postgresql 9.3开始,使用

首先,安装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;
此查询应适用于所有版本:

 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

答案包含C、Javascript和Java代码。它们使用sql中不可用的for循环。如何在sql或Postgres中实现这一点?可能应该使用一些窗口功能。???有很多没有循环的答案。这个想法是引入哈弗森公式,你可以用任何你想要的语言来应用它。有了这个代表,你已经知道,你不能指望得到一个问题的答案,而这个问题并不表示你有任何解决问题的尝试。有问题的尝试描述不是强制性的。那么为什么我不应该期待这样的答案呢。创建扩展名POSTGIS返回错误:无法打开扩展名控制文件/usr/share/postgresql/9.1/EXTENSION/POSTGIS.control:没有此类文件或目录此目录中有其他扩展名,但没有POSTGIS。如何在Debian Squeeze x64 Linux中的Postgres 9.1中安装postgis?从未尝试过,但有一个指南,例如:本页写道,postgis在9.1中不受支持。如何使用公式计算距离而不是postgis?嗯,我在页面上看不到。Postgis已经运行在比9.1旧得多的Postgres版本上,所以我确信可以安装它。只需谷歌安装postgis linux。安装postgis并使用其距离计算比编写自己的函数更容易。好吧,考虑到它出现在Teemu posted的链接中,可能是的,但请注意,坐标必须以弧度为单位。这里有一个答案: