gpt4 book ai didi

sql-server - SQL Server GEOGRAPHY STDistance 函数返回的结果与其他测试结果有很大差异

转载 作者:行者123 更新时间:2023-12-03 03:40:47 24 4
gpt4 key购买 nike

我正在计算两个经纬度值之间的距离(以米为单位)-40.1844441 -77.2252771 和
40.319166 -76.7880552

我在以下两个网站中测试了这两点之间的距离 - http://www.nhc.noaa.gov/gccalc.shtmlhttp://www.movable-type.co.uk/scripts/latlong.html
这两个网站都会返回大约 40014 米。

因此,我使用 SQL Server 的 GEOGRAPHY 数据类型再次计算这两点之间的距离,结果返回 48927 米。这对我来说是一个巨大的差异。
以下是我的代码,如有任何建议,我们将不胜感激。

declare @latlong1 GEOGRAPHY
declare @latlong2 GEOGRAPHY
DECLARE @distance float

set @latlong1 = GEOGRAPHY::STGeomFromText('POINT(40.1844441 -77.2252771)', 4326)
set @latlong2 = GEOGRAPHY::STGeomFromText('POINT(40.319166 -76.7880552)', 4326)

SET @distance = @latlong1.STDistance(@latlong2)
SELECT @distance -- this returns 48927 meters

最佳答案

我也注意到了一些奇怪的结果,所以我倾向于使用 geography::Point() 这似乎会产生更清晰的结果。即便如此,选项 2 距离 UDF 80 米,这似乎是准确的。

示例

declare @latlong1 GEOGRAPHY
declare @latlong2 GEOGRAPHY

Set @latlong1 = GEOGRAPHY::STGeomFromText('POINT(40.1844441 -77.2252771)',4326)
Set @latlong2 = GEOGRAPHY::STGeomFromText('POINT(40.319166 -76.7880552)',4326)

Select VeryOdd = @latlong1.STDistance(@latlong2)
,SQLGeo = geography::Point(40.1844441, -77.2252771, 4326).STDistance(geography::Point(40.319166,-76.7880552, 4326))
,UDFGeo = [dbo].[udf-Geo-Meters](40.1844441,-77.2252771,40.319166,-76.7880552)

返回

VeryOdd             SQLGeo              UDFGeo
48927.1485292471 40093.8055001913 40014.8833526855

UDF(如果有兴趣)

CREATE Function [dbo].[udf-Geo-Meters](@Lat1 FLOAT, @Lng1 FLOAT, @Lat2 FLOAT, @Lng2 FLOAT)
Returns Float as
Begin
Return ACOS(SIN(PI()*@Lat1/180.0)*SIN(PI()*@Lat2/180.0)+COS(PI()*@Lat1/180.0)*COS(PI()*@Lat2/180.0)*COS(PI()*@Lng2/180.0-PI()*@Lng1/180.0)) * 6371008.8
-- 6.371 mean radius of earth in meters
End

关于sql-server - SQL Server GEOGRAPHY STDistance 函数返回的结果与其他测试结果有很大差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42237521/

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