2017-11-03 125 views

回答

0

在下面的例子中,我們有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 
+0

因爲這必須每一條記錄進行比較,以每一個記錄,我有幾百萬行的每個表進行比較,就這需要很長的有時間處理?謝謝約翰!我會試一試。 – Irisheyes169