首页 > 解决方案 > postgresql:输入超出范围

问题描述

我正在尝试创建一个查询来获取 2 个位置之间的距离。

https://developers.google.com/maps/solutions/store-locator/clothing-store-locator

来自链接的示例:

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

基于示例链接,我创建了以下查询。

select ( 6371 * acos( cos( radians(3.139003) ) * cos( radians( 3.10726 ) ) * cos( radians( 101.60671 ) - radians(101.68685499999992) ) + sin( radians(3.139003) ) * sin( radians( 101.60671 ) ) ) ) AS distance from requests

位置1:3.139003、101.68685499999992

位置 2:3.10726、101.60671

但是,查询总是失败,输入超出范围,这似乎是由于 acos。

任何人都可以为此提供一些指示吗?

标签: sqlpostgresql

解决方案


是的,这是相当微不足道的。

最左边acos函数的参数是

cos( radians(3.139003) )
* cos( radians( 3.10726 ) )
* cos( radians( 101.60671 )
       - radians(101.68685499999992) )
+ sin( radians(3.139003) ) * sin( radians( 101.60671 ) )

计算结果为 1.05066948199501。

但是 [-1,1] 范围之外的任何东西都不是acos.


推荐阅读