위도와 경도가 매우 근접한 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 미터 미만이면 동일한 위치로 간주 할 수 있습니다. (분명히 자신의 관용을 설정할 수 있습니다)
좀 더 효율적으로 할 수 있습니다. 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