当前位置: 首页 > 面试题库 >

如何使此地理距离SQL查询与Postgres兼容

叶文博
2023-03-14
问题内容

我尝试使用的库具有给定的纬度和经度,并且对表中的条目进行计算后得出的纬度/经度在此范围内。生成的SQL查询适用于MySQL,但不适用于PostgreSQL。

这是我的server.log文件中详细说明错误psql和完整查询的条目:

ERROR:  column "distance" does not exist at character 507
STATEMENT:  select *, ( '3959' * acos( cos( radians('53.49') ) * cos( radians( places.lat ) ) * cos( radians( places.lng ) - radians('-2.38') ) + sin( radians('53.49') ) * sin( radians( places.lat ) ) ) ) AS distance from (
                        Select *
                        From places
                        Where places.lat Between 53.475527714192 And 53.504472285808
                        And places.lng Between -2.4043246788967 And -2.3556753211033
                    ) As places where "places"."deleted_at" is null having "distance" <= $1 order by "distance" asc

知道了什么是SQL之后,我可以编辑生成SQL的PHP​​代码,并将PR发送回库。


问题答案:

该查询使用特定于MySql的语法。在Postgres(以及我所知的所有其他RDBMS)中,应使用派生表:

select *
from (
    select *, 
        (3959 * acos( cos( radians(53.49) ) * cos( radians( places.lat ) ) 
        * cos( radians( places.lng ) - radians(-2.38) ) 
        + sin( radians(53.49) ) * sin( radians( places.lat ) ) ) ) AS distance 
    from (
        select *
        from places
        where places.lat between 53.475527714192 and 53.504472285808
        and places.lng between -2.4043246788967 and -2.3556753211033
        ) as places 
    where places.deleted_at is null 
    ) sub
where distance <= $1 
order by distance asc

我还从数字常量中删除了引号。



 类似资料:
  • 距离查询 距离查询,是指查询指定几何对象一定距离范围内的地物。对于点几何对象,则查询以该点为圆心,以距离为半径画圆,落在该圆形范围内的地物;对于线和面几何对象,则查询距离对象边界一定范围内的地物。 以 World 数据服务为例。使用接口 ol.supermap.QueryService 在图层 “Capitals@World.1” 中查找距离指定点为10度(地图坐标单位)的矢量要素。 // 添加查

  • 我在一个csv文件中有很多纬度/经度点,我创建了一个表,其中包含4326投影中的一个点(表邮政编码,字段位置) 我正在构建这样的数据:- 并将p存储在位置字段中。 问题是,我想找到一个给定点的“接近”记录。我在以下位置看到了一些有前途的代码:- https://github.com/rgeo/activerecord-postgis-adapter/blob/master/test/spatial

  • 问题内容: 选项 询问 我有一个包含4列的数据库表: 唯一身份 城市名 纬度(纬度) 经度(lng) 我在顶部使用查询返回距指定坐标距离指定英里数内的位置。它似乎可行,但我不确定它的准确性如何。我很想知道查询是否很好,或者您是否有更好的解决方案。 问题答案: 看起来像是正确的大圆距查询。 您对WRT的准确性有何看法?

  • 问题内容: 今天,我遇到了一个有趣的SQL问题,尽管我想出了一个行之有效的解决方案,但我怀疑这是最佳还是最有效的答案。在这里,我请专家- 帮助我学习一些知识并改善查询条件!RDBMS是SQL Server 2008 R2,查询是SSRS报告的一部分,该报告将针对约100,000行运行。 本质上,我有一个ID列表,该ID可能具有多个与之关联的值,这些值是Yes,No或其他字符串。对于ID x,如果任

  • 问题内容: 我有一个不支持三角函数的SQLite数据库。我想按距离对桌中的一组经纬度进行排序,而不是第二对经纬度对。我熟悉用于按距离对经纬度对进行排序的标准Haversine距离公式。 在这种情况下,我并不特别在意精度,因为我的点之间相隔很远,所以我不介意通过将曲线视为直线来舍入距离。 我的问题是,这种查询是否有公认的公式?记住没有触发功能! 问题答案: 如果您的点彼此之间的距离在合理范围内(即,

  • 我创建了一个表,其中包含位置及其空间坐标(纬度、经度(度数)),以postgres表示。我用于相同用途的命令有: 我在postgres中插入了空间坐标(经度、纬度) 我创建了一个表,其中包含位置及其空间坐标(纬度、经度(度数)),以postgres表示。我用于相同用途的命令有: testSpatial。csv包含以下值: 现在,我想找到彼此距离在50公里以内的所有空间位置。为此,我使用了以下命令: