두 지점 사이의 거리 계산(위도, 경도)
지도에서 두 위치 사이의 거리를 계산하려고 합니다. 내 데이터에 저장했습니다: 경도, 위도, X 위치, Y 위치.
이전에는 아래 스니펫을 사용했습니다.
DECLARE @orig_lat DECIMAL
DECLARE @orig_lng DECIMAL
SET @orig_lat=53.381538 set @orig_lng=-1.463526
SELECT *,
3956 * 2 * ASIN(
SQRT( POWER(SIN((@orig_lat - abs(dest.Latitude)) * pi()/180 / 2), 2)
+ COS(@orig_lng * pi()/180 ) * COS(abs(dest.Latitude) * pi()/180)
* POWER(SIN((@orig_lng - dest.Longitude) * pi()/180 / 2), 2) ))
AS distance
--INTO #includeDistances
FROM #orig dest
그러나 여기에서 나오는 데이터를 신뢰하지 못하며 약간 부정확한 결과를 제공하는 것 같습니다.
필요한 경우를 대비해 몇 가지 샘플 데이터를 제공합니다.
Latitude Longitude Distance
53.429108 -2.500953 85.2981833133896
누구든지 제 코드를 도와 주실 수 있나요? 제가 이미 가지고있는 것을 수정하고 싶다면 새로운 방법이 있다면 괜찮습니다.
결과가 어떤 측정 단위로 표시되는지 알려주세요.
82
6
SQL Server 2008을 사용 중이므로 이러한 종류의 데이터에 맞게 설계된
지리
데이터 유형을 사용할 수 있습니다:Gives
(가까운) 런던에서 (가까운) 에든버러까지 약 538km입니다.
당연히 먼저 배워야 할 것이 많지만, 일단 알고 나면 직접 하버신 계산을 구현하는 것보다 훨씬 쉬울 뿐만 아니라 많은 기능을 사용할 수 있습니다.
기존 데이터 구조를 유지하려는 경우
Point
메서드를 사용하여 적절한지리
인스턴스를 구성하여STDistance
를 계속 사용할 수 있습니다:아래 함수는 두 위치 정보 좌표 사이의 거리를 마일 단위로 제공합니다.
아래 함수는 두 위치 좌표 사이의 거리를 킬로미터 단위로 반환합니다.
아래 함수는 두 위치 좌표 사이의 거리를 킬로미터 단위로 반환합니다. SQL Server 2008에 도입된 Geography 데이터 유형 사용
사용:
Reference: Ref1,Ref2
마이크로소프트 (ms) 가 그 다음으로 쓰기, 브라운아저씨의 달려 들어 마치 다른 모든 복잡한 솔루션을 수 있다. 가장 간단한 방법은 슬라이드에서는 없이 추가 기능 / 너희가운데 명령문입니다:
'지역 점 선택 (, longitude_1 latitude_1 4326) 이스타디스턴스 (지역 점 (, longitude_2 latitude_2 4326)'
단순히 ',' 대신 'LATITUDE_1 데이터의 대체하십시오 LONGITUDE_1 LATITUDE_2 LONGITUDE_2', '', '' 예:
SQL 2008 이상을 사용하는 경우 GEOGRAPHY 데이터 유형을 확인하는 것이 좋습니다. SQL에는 지리적 공간 쿼리에 대한 지원이 내장되어 있습니다.
예를 들어 테이블에 좌표의 지리 공간 표현으로 채워지는 GEOGRAPHY 유형의 열이 있다고 가정해 보겠습니다(예제는 위에 링크된 MSDN 참조를 참조하세요). 이 데이터 유형은 다양한 지리공간 쿼리(예: 두 지점 사이의 거리 찾기)를 수행할 수 있는 메서드를 노출합니다.
dbo 선택합니다. 트리스탄스크마 (37.848832506474, 37.848732506474, 27.83935546875, 27.83905546875)
0,02849639
또한 이전 답변, 슬라이드에서는 거리를 계산할 수 있는 길을 선택합니다.
사용법:
하지만 이들은 스칼라 함수 또한 매우 비효율적인 작업 때 많은 양의 데이터를 컴퓨팅용으로.
누군가 이 도움이 됐으면 좋겠다 "고 말했다.