本文介紹了進(jìn)行查詢以從單個(Lat,Long)查找最接近的倍數(shù)(Lat,Long)的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我正在從單個點執(zhí)行最近的點查詢。以下是序列。
我在MSSQLServer中存儲了多個POI,表dbo.Place。第二個表是dbo.Position,它將存儲收集的GPS點。
我正在使用存儲過程,并且位置的LatLong已定義并可用。如何根據(jù)以下示例進(jìn)行查詢?
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個查詢中取最近的值(假設(shè)樣本數(shù)據(jù)是3行)
SQRT(POW(X(`POI.Lat`) - 49.843317 , 2) + POW(Y(`POI.Long`) - 24.026642, 2)) * 100
謝謝。
推薦答案
您可以使用SQL Server的地理功能來執(zhí)行此操作。
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
您應(yīng)該考慮在已轉(zhuǎn)換GPS點的表中添加GEOGRAPHY列,并添加SPATIAL INDEX以加快查詢速度。
這篇關(guān)于進(jìn)行查詢以從單個(Lat,Long)查找最接近的倍數(shù)(Lat,Long)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,






