gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:50:05 25 4
gpt4 key购买 nike

我基本上有两个带有 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

最佳答案

这是我们在项目中用来计算距离的预言机函数。请相应修改语法以适应 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;

关于mysql - 给定两个区域的经度和纬度,如何找到它们之间的距离(以米为单位)。如何在 SQL 中查询..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com