给定两个区域的经度和纬度,如何找到它们之间的距离(以米为单位)。如何在 SQL 中查询..?

Posted

技术标签:

【中文标题】给定两个区域的经度和纬度,如何找到它们之间的距离(以米为单位)。如何在 SQL 中查询..?【英文标题】:Given longitude and latitude of two areas, how to find the distance between them in meters. How to query in SQL..? 【发布时间】:2014-07-22 09:54:14 【问题描述】:

我基本上有两个带有 ID 的表,Area.Longitude 和 latitude 列。我需要找出每个区域相距超过 20 米的距离差异。

表 1

##[ID]  [Area]  [Latitude]  [Longitude]##

ID1 Area1   51.51141557 -0.138341652

ID2 Area2   51.50950278 -0.156438192

ID3 Area3   51.5071583  -0.153418937

表 2

##[ID]  [Area]  [Latitude]  [Longitude]##
ID1 Area1    51.50819747    -0.141020749

ID2 Area2    51.50781548    -0.14294574

ID3 Area3    51.51286329    -0.14765827

我想比较表 1(区域 1)和表 2(区域 2)找出它们之间的差异(以经度和纬度给出)并以米为单位显示结果(它们之间的距离)

结果##

##[ID]  [Area]  [Distance apart in Meter]##

ID1 Area1   5 meter

ID2 Area2   10 meter

ID3 Area3   20 meter

我如何编写一个 sql 查询来实现这一点。请help

【问题讨论】:

[链接]***.com/questions/13747500/… mysql还是sql server?您将获得的答案的质量很大程度上取决于您所使用的技术的准确标记。 【参考方案1】:

这是我们在项目中用于计算距离的 oracle 函数。您请相应地修改语法以适应 mysql / sql-server

create or replace
FUNCTION CALC_DISTANCE (Lat1 IN NUMBER,
                                     Lon1 IN NUMBER,
                                     Lat2 IN NUMBER,
                                     Lon2 IN NUMBER) RETURN NUMBER IS
 -- Convert degrees to radians
 DEGTORAD NUMBER := 57.29577951;
 --Radius NUMBER := 6387.7;  -- For km
   Radius NUMBER := 6387700  -- For metres

BEGIN
  RETURN(NVL(Radius,0) * ACOS((sin(NVL(Lat1,0) / DegToRad) * SIN(NVL(Lat2,0) / DegToRad)) +
        (COS(NVL(Lat1,0) / DegToRad) * COS(NVL(Lat2,0) / DegToRad) *
         Cos(Nvl(Lon2,0) / Degtorad - Nvl(Lon1,0)/ Degtorad))));
END;

要使用此功能以米为单位,您可能可以使用,

SELECT
CALC_DISTANCE ('51.51141557' ,'-0.138341652',
              '51.50819747', '-0.141020749') AS DISTANCE
FROM DUAL;

【讨论】:

"要使用这个函数以米为单位..." 或者只使用米作为地球半径而不是公里:Radius NUMBER := 6387700...(虽然这个数字似乎只是一点点偏高,我会说。平均为 6371 公里。)请记住,许多数据库已经专门支持像这样的更快的计算,这些天使用某种地理扩展。最佳答案很大程度上取决于您使用的 RDBMS。 @MattGibson:答案编辑得当。感谢您的意见。

以上是关于给定两个区域的经度和纬度,如何找到它们之间的距离(以米为单位)。如何在 SQL 中查询..?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算城市中两个区域之间的距离

查找两个经度纬度之间的距离-Mysql

给定两个纬度/经度,我如何判断它们是不是在 1 英里范围内?

给定(纬度,经度)点,距离和方位,如何获得新的经纬度

如何在弹性搜索中使用纬度经度搜索位置附近的区域

经纬度之间距离怎么算?