进行查询以从单个(Lat,Long)查找最接近的倍数(Lat,Long)

Making query to find nearest multiple(Lat,Long) from the single(Lat,Long)(进行查询以从单个(Lat,Long)查找最接近的倍数(Lat,Long))
本文介绍了进行查询以从单个(Lat,Long)查找最接近的倍数(Lat,Long)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从单个点执行最近的点查询。以下是序列。 我在MSSQLServer中存储了多个POI,表dbo.Place。第二个表是dbo.Position,它将存储收集的GPS点。

我正在使用存储过程,并且位置的LatLong已定义并可用。如何根据以下示例进行查询?

dbo.Place

Id   | Name   | Lat   | Long
1      POI1     1.735   4.73225
2      POI2     1.5665  3.9983
3      Tim2     1.4344  3.1282

Lat Long变量在存储过程中定义。我想使用下面的公式来找到最近的点,我只会从3个查询中取最近的值(假设样本数据是3行)

SQRT(POW(X(`POI.Lat`) - 49.843317 , 2) + POW(Y(`POI.Long`) - 24.026642, 2)) * 100

谢谢。

推荐答案

您可以使用SQL Server的地理功能来执行此操作。

DECLARE @InputLatitude FLOAT = 1.64
DECLARE @InputLongitude FLOAT = 4.25

DECLARE @GPS GEOGRAPHY = GEOGRAPHY::Point(@InputLatitude, @InputLongitude, 4326)

SELECT TOP 1
    P.*,
    Distance = @GPS.STDistance(GEOGRAPHY::Point(P.Lat, P.Long, 4326))
FROM
    dbo.Place AS P
ORDER BY
    @GPS.STDistance(GEOGRAPHY::Point(P.Lat, P.Long, 4326)) ASC

您应该考虑在已转换GPS点的表中添加GEOGRAPHY列,并添加SPATIAL INDEX以加快查询速度。

这篇关于进行查询以从单个(Lat,Long)查找最接近的倍数(Lat,Long)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)