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

使用WHERE子句在距经度和纬度的距​​离范围内找到POI

颛孙嘉玉
2023-03-14
问题内容

我正在使用以下sql代码来找出最接近设置坐标的“所有”
poi,但是我想找出特定的poi而不是所有的poi。当我尝试使用where子句时,我得到一个错误,它不起作用,这是我目前遇到的问题,因为我只使用一张表来表示所有poi的所有坐标。

SET @orig_lat=55.4058;  
SET @orig_lon=13.7907; 
SET @dist=10;
SELECT 
    *, 
    3956 * 2 * ASIN(SQRT(POWER(SIN((@orig_lat -abs(latitude)) * pi()/180 / 2), 2) 
    + COS(@orig_lat * pi()/180 ) * COS(abs(latitude) * pi()/180) 
    * POWER(SIN((@orig_lon - longitude) * pi()/180 / 2), 2) )) as distance 
FROM geo_kulplex.sweden_bobo
HAVING distance < @dist 
ORDER BY distance limit 10;

问题答案:

问题是您不能distanceselectorwhere子句中引用别名列(在这种情况下)。例如,您不能执行以下操作:

select a, b, a + b as NewCol, NewCol + 1 as AnotherCol from table
where NewCol = 2

这将在以下两个方面均失败:select尝试处理时的语句NewCol + 1以及where尝试处理时的语句NewCol = 2

有两种方法可以解决此问题:

1)将参考值替换为计算值本身。例子:

select a, b, a + b as NewCol, a + b + 1 as AnotherCol from table
where  a + b = 2

2)使用外部select语句:

select a, b, NewCol, NewCol + 1 as AnotherCol from (
    select a, b, a + b as NewCol from table
) as S
where NewCol = 2

现在,考虑到您的计算量很大而不是非常人性化的列:)我想您应该选择最后一种选择来提高可读性:

SET @orig_lat=55.4058;  
SET @orig_lon=13.7907; 
SET @dist=10;

SELECT * FROM (
  SELECT 
    *, 
    3956 * 2 * ASIN(SQRT(POWER(SIN((@orig_lat -abs(latitude)) * pi()/180 / 2), 2) 
    + COS(@orig_lat * pi()/180 ) * COS(abs(latitude) * pi()/180) 
    * POWER(SIN((@orig_lon - longitude) * pi()/180 / 2), 2) )) as distance 
  FROM geo_kulplex.sweden_bobo
) AS S
WHERE distance < @dist
ORDER BY distance limit 10;

编辑: 正如下面提到的@Kaii,这将导致全表扫描。根据要处理的数据量,您可能希望避免这种情况,而是选择第一个选项,该选项应能更快地执行。



 类似资料:
  • 问题内容: 我有一张表,上面有: 城市纬度经度 而且我需要一个sql查询来知道所有城市都距离纽约100英里。 问题答案: 也许这对您有帮助:http : //www.scribd.com/doc/2569355/Geo-Distance-Search-with- MySQL 这是一个不错的介绍。或只是google for ,您会发现一些教程。 如果有可能并且想让它变得更简单,请直接使用支持距离查询

  • 问题内容: 我的桌子有经度和纬度 所以我想要的是我要从页面传递两个经度和纬度。如何使用存储过程查找最近的地方?我没有太多帮助,所以我必须在这里询问 尝试过使用这个 但是我必须将其与表值进行匹配,所以我该如何实现呢? 问题答案: 您可以在SQL中使用与上面显示的查询类似的查询,其中和是要搜索的变量值。该和是从你的表的列名。顺便说一句,这称为Haversine公式,该常数用于获取以KM为单位的距离,而

  • 问题内容: 嗨,我有下表 现在我想获得两点之间的距离。假设一个用户有一个城市3,一个用户有一个城市7。我的情况是一个用户有一个城市和纬度,纬度正在搜索其他用户与城市的距离。例如,拥有城市3的用户正在搜索。他想得到其他城市的用户的距离是7。我已搜索到以下查询 据我所知,此查询查找从一个点到所有其他点的距离。现在我想获得一个点到另一点的距离。 任何指导方针将不胜感激。 问题答案: 我认为您的问题是您具

  • 问题内容: 我很难缠一些三角学。我正在尝试根据起始纬度,对数,距离和方位来推论目标纬度和经度。 幸运的是,我找到了一个令人惊叹的网站,该网站准确地描述了我需要的功能:http : //www.movable- type.co.uk/scripts/latlong.html “给定目标点的距离并与起点保持距离”我尝试了java程序,但对我不起作用。我按照网站所述部署它。这是我的代码: 但它显示的输出

  • 问题内容: 我在Python 2.7中的Pandas DataFrame中具有以下内容: 我正在寻找计算数据帧中连续行之间的距离。输出应如下所示: 我尝试如下进行调整: 但是,出现以下错误: 此错误已通过MaxU的注释修复。修复后,此计算的输出没有意义-距离近8000 km: 根据: 这个在线计算器:如果我使用Latitude1 = 74.166061,Longitude1 = 30.512811

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: MySQL纬度和经度表设置 我知道这个问题可能已经被问过很多遍了,我已经进行了很多研究,并且在某些具体问题上需要帮助。 假设我有一个表单,用户输入了经度和纬度,并且我有一个数据库,该数据库的表包含经度和纬度,我将如何在该表中搜索半径15英里以内的一个或多个点? 问题答案: 您可以使用公式来计算两点之间的距离。例如: 您还可以执行