我有2個緯度和經度組都接近十分接近。我如何讓SQL Server 2016認爲它們是相同的地址?的SQL Server 2016如何我可以映射緯度和經度的地址匹配的經度和緯度座標是否略有不同?
35.555925 -97.677617
35.55595 -97.677454
我有2個緯度和經度組都接近十分接近。我如何讓SQL Server 2016認爲它們是相同的地址?的SQL Server 2016如何我可以映射緯度和經度的地址匹配的經度和緯度座標是否略有不同?
35.555925 -97.677617
35.55595 -97.677454
您需要爲兩個點之間的最大可接受距離定義一些限制,以使它們被視爲「相同的地址」。然後計算該距離的函數或公式。看看Calculating distance between two points (Latitude, Longitude)
在下面的例子中,我們有3條記錄。其中兩個距離大約15米,而第三個距離更遠。
在這裏,我們每個記錄的距離比較所有其它的,如果相距不到25米,就可以認爲它們是同一個位置。 (很明顯,你可以設置自己的公差)
您可以econimize這多一點。請記住,Lat或Lng的每個「1」大約爲69英里,因此JOIN條件可以進一步合格。
例
Declare @YourTable table ([PosNr] int,Lat float,Lng float,GeoPoint Geography)
Insert Into @YourTable values
(1,35.555925, -97.677617,null)
,(2,35.55595, -97.677454,null)
,(3,38.55595, -97.677454,null)
Update @YourTable Set GeoPoint = GEOGRAPHY::Point([Lat], [Lng], 4326)
Select Distinct
Pos1 = case when Pos1<Pos2 then Pos1 Else Pos2 end
,Pos2 = case when Pos1<Pos2 then Pos2 Else Pos1 end
,Meters
From (
Select Pos1 = A.[PosNr]
,Pos2 = B.[PosNr]
,Meters = A.GeoPoint.STDistance(B.GeoPoint)
From @YourTable A
Join @YourTable B on A.PosNr<>B.PosNr
) A
Where Meters<=25
返回
Pos1 Pos2 Meters
1 2 15.0366793848766
因爲這必須每一條記錄進行比較,以每一個記錄,我有幾百萬行的每個表進行比較,就這需要很長的有時間處理?謝謝約翰!我會試一試。 – Irisheyes169