从MSSQL数据库表中获取最近的经度和纬度?
|
好的,我已经搜索了SO和谷歌,但还没有真正找到明确的答案,所以把它扔到那里为SO社区. 基本上我有一个针对特定兴趣点的经度和纬度表,sql查询将知道你当前所在的位置(这将是表格中的一个,作为参数传入),因此它需要计算并将最接近纬度和经度的一行返回到传入的一行. 我要求这一切都在MSSQL(2012 /存储过程)而不是在调用应用程序(这是.NET)中完成,因为我听说SQL处理此类查询通常比.NET更快? 编辑: 我找到了STDistance函数,它给出了位置之间的里程数,例如: DECLARE @NWI geography,@EDI geography SET @NWI = geography::Point(52.675833,1.282778,4326) SET @EDI = geography::Point(55.95,-3.3725,4326) SELECT @NWI.STDistance(@EDI) / 1000 但是我不想迭代遍历表中的所有纬度/经度,因为这对于性能来说肯定会很糟糕吗? 我也试过转换下面的一个注释链接中指出的一个例子(这是MYSQL而不是MSSQL)但是我收到一个错误,代码如下: DECLARE @orig_lat decimal(6,2),@orig_long decimal(6,@bounding_distance int
set @orig_lat=52.056736;
set @orig_long=1.14822;
set @bounding_distance=1;
SELECT *,((ACOS(SIN(@orig_lat * PI() / 180) * SIN('lat' * PI() / 180) + COS(@orig_lat * PI() / 180) * COS('lat' * PI() / 180) * COS((@orig_long - 'lon') * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS 'distance'
FROM [DB1].[dbo].[LatLons]
WHERE
(
'lat' BETWEEN (@orig_lat - @bounding_distance) AND (@orig_lat + @bounding_distance)
AND 'lon' BETWEEN (@orig_long - @bounding_distance) AND (@orig_long + @bounding_distance)
)
ORDER BY 'distance' ASC
收到的错误是:
谁能够解决上述代码或提出更好的解决方案? 解决方法几年前我写了一篇博客,解释了如何在不使用空间数据类型的情况下完成这项工作.由于看起来好像你有一张经度/纬度值表,这个博客可能会有很大的帮助.SQL Server Zipcode Latitude Longitude Proximity Search (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server – 每个实例的SQL Server Express内存
- 数据库 – mysqldump – where with =运算符不能
- Mac上将brew安装的MySql改用Docker执行操作过程
- MySQL 5.6 中TIMESTAMP with implicit DEFAULT v
- sql-server – SQL查询中的IF条件
- document-database – 如何避免像RavenDB这样的文
- SQL中使用撇号查询访问中的文本
- 将行反规范化为列可以增强SQL Server的性能吗?
- sql-server – 从非sysadmin域用户拥有的SQL Age
- sql-server-2008 – 与SQL Server分开安装Team F
