.net – SQL Server 2008 R2地理距离?
发布时间:2020-12-12 06:42:21 所属栏目:MsSql教程 来源:网络整理
导读:我创建了一个包含以下列的表: Text:varchar(255)Location:geography 它们包含来自荷兰的一些城市作为数据(从谷歌地图获得坐标): Rotterdam - POINT (51.925637 4.493408 4326)Utrecht - POINT (52.055868 5.103149 4326)Nijmegen - POINT (51.801822 5.8282
我创建了一个包含以下列的表:
Text:varchar(255) Location:geography 它们包含来自荷兰的一些城市作为数据(从谷歌地图获得坐标): Rotterdam - POINT (51.925637 4.493408 4326) Utrecht - POINT (52.055868 5.103149 4326) Nijmegen - POINT (51.801822 5.828247 4326) Breda - POINT (51.542919 4.77356 4326) 我想知道鹿特丹数据库中所有城市之间的距离,所以我执行这个查询: Select Text,Location,Location.STDistance(geography::Point(51.925638,4.493408,4326)) as Distance from Messages 但结果是每个城市的距离接近6800000. 可能是什么导致了这个? 我能想到的唯一原因是我使用了错误的SRID,但我无法弄清楚应该使用哪一个. 谢谢! 编辑: 只是为了它,我去玩数字,我得到了一些奇怪的结果: Distance from Rotterdam to Rotterdam: 6828459.57 (A) (weird but true) Distance from Rotterdam to Breda: 6779956.10 (B) Distance from Rotterdam to Nijmegen: 6695336.38 (C) 现在这里有趣的地方: (A) - (B) = 48504 m = 48 km (A) - (C) = 133123 m = 133 km 这些值大致是这些城市之间的距离. 解决方法根据这个测试用例,似乎工作正常:DECLARE @rotterdam geography = geography::Point(51.925637,4326); with tmp(txt,geo) as ( select 'Rotterdam',geography::Point(51.925637,4326) UNION ALL select 'Utrecht',geography::Point(52.055868,5.103149,4326) UNION ALL select 'Nijmegen',geography::Point(51.801822,5.828247,4326) UNION ALL select 'Breda',geography::Point(51.542919,4.77356,4326) ) SELECT t.txt,t.geo.STDistance(geography::Point(51.925637,4326)) from tmp t 所以你的实际查询看起来很好,这让我想知道问题是由于你的表中的数据不正确. 另外,我建议将您比较的地理值存储在单独的值中,如@TrickyNixons示例中所示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |