1

LINESTRING을 사용하여 POINTS의 결과 집합으로 변환하는 쿼리가 있습니다.결과 집합에서 2 행의 점 사이의 거리를 어떻게 계산합니까?

내가 알 수없는 것은이 결과 집합에서 2 개의 특정 행 포인트 사이의 거리를 찾는 방법입니다.

이것은 내가 지금까지 무엇을한다 : 예를 들어

DECLARE @GeographyToConvert geography 
SET  @GeographyToConvert = geography::STGeomFromText('LINESTRING (26.6434033 -81.7097817, 26.6435367 -81.709785, 26.6435783 -81.7098033, 26.6436067 -81.709825, 26.6435883 -81.709875, 26.64356 -81.7100417, 26.6434417 -81.710125, 26.6433167 -81.7101467, 26.643195 -81.7101033, 26.6431533 -81.7099517, 26.643175 -81.7097867, 26.643165 -81.7097917, 26.6431633 -81.7097367, 26.6431583 -81.7097083)',4326); 
WITH GeographyPoints(N, Point) AS 
( 
    SELECT 1, @GeographyToConvert.STPointN(1) 
    UNION ALL 
    SELECT N + 1, @GeographyToConvert.STPointN(N + 1) 
    FROM GeographyPoints GP 
    WHERE N < @GeographyToConvert.STNumPoints() 
) 

SELECT N,Point.STBuffer(0.25) as point, Point.STAsText() FROM GeographyPoints 

enter image description here

은 어떻게 = 10 & N = 11 N 사이의 거리를 비교할 수 있는가?

이 내가 노력했다,하지만이 작동하지 않습니다

Declare @Point1 geography; 
Declare @Point2 geography; 

DECLARE @GeographyToConvert geography 
--SET  @GeometryToConvert = (select top 1 geotrack from dbo.SYNCTESTING2 where geotrack is not null); 
SET  @GeographyToConvert = geography::STGeomFromText('LINESTRING (26.6434033 -81.7097817, 26.6435367 -81.709785, 26.6435783 -81.7098033, 26.6436067 -81.709825, 26.6435883 -81.709875, 26.64356 -81.7100417, 26.6434417 -81.710125, 26.6433167 -81.7101467, 26.643195 -81.7101033, 26.6431533 -81.7099517, 26.643175 -81.7097867, 26.643165 -81.7097917, 26.6431633 -81.7097367, 26.6431583 -81.7097083)',4326); 
WITH GeographyPoints(N, Point) AS 
( 
    SELECT 1, @GeographyToConvert.STPointN(1) 
    UNION ALL 
    SELECT N + 1, @GeographyToConvert.STPointN(N + 1) 
    FROM GeographyPoints GP 
    WHERE N < @GeographyToConvert.STNumPoints() 
) 


SELECT N,Point.STBuffer(0.25) as point, Point.STAsText() FROM GeographyPoints 

select @Point1 = Point FROM GeometryPoints where N = 10; 

select @Point2 = Point FROM GeometryPoints where N = 11 

select @Point1.STDistance(@Point2) as [Distance in Meters] 
+1

분석 기능 (C)의 값을 변경 대체 ould는 당신을 도와줍니다. http://technet.microsoft.com/ko-kr/library/hh213234.aspx 다음 또는 이전 값을 가져올 수 있습니다. –

답변

2

단지

SELECT * INTO #GeographyPoints FROM GeographyPoints 

DECLARE @N1 INT = 10 
DECLARE @N2 INT = 11 

SELECT (SELECT Point FROM #GeographyPoints WHERE [email protected]).STDistance(
      (SELECT Point FROM #GeographyPoints WHERE [email protected])) 

DROP TABLE #GeographyPoints 

와 함께

SELECT N,Point.STBuffer(0.25) as point, Point.STAsText() FROM GeographyPoints 

@ N1 & @ N2 등이 켜지지

+0

이것은 정확하게 내가하고 싶었던 것이다! 이런 식으로 초기 게시물을 편집했지만 구문을 올바르게 알 수 없었습니다. 너! –

+1

CTE에는 트릭이 있습니다. 단 한 번만 테이블에 액세스 할 수 있으므로이 경우 값을 임시 테이블에 저장 한 다음 임시 테이블에서 다시 꺼내야했습니다. http://stackoverflow.com/questions/1590994/why-cant-i-access-my-cte-after-i-used-it-once –

2

이 당신이 찾고있는 무엇인가? 이전 지점까지의 거리?

DECLARE @GeographyToConvert geography 
SET  @GeographyToConvert = geography::STGeomFromText('LINESTRING (26.6434033 -81.7097817, 26.6435367 -81.709785, 26.6435783 -81.7098033, 26.6436067 -81.709825, 26.6435883 -81.709875, 26.64356 -81.7100417, 26.6434417 -81.710125, 26.6433167 -81.7101467, 26.643195 -81.7101033, 26.6431533 -81.7099517, 26.643175 -81.7097867, 26.643165 -81.7097917, 26.6431633 -81.7097367, 26.6431583 -81.7097083)',4326); 
WITH GeographyPoints(N, Point, PreviousPoint, DistanceFromPrevious) AS 
( 
    SELECT 1, @GeographyToConvert.STPointN(1), CAST(NULL AS GEOGRAPHY), CAST(0 AS Float) 
    UNION ALL 
    SELECT N + 1, @GeographyToConvert.STPointN(N + 1) 
      , @GeographyToConvert.STPointN(N) 
      , @GeographyToConvert.STPointN(N).STDistance(@GeographyToConvert.STPointN(N + 1)) 
    FROM GeographyPoints GP 
    WHERE N < @GeographyToConvert.STNumPoints() 
) 

SELECT N,Point.STBuffer(0.25) as point, Point.STAsText(), PreviousPoint, DistanceFromPrevious FROM GeographyPoints 

enter image description here

+0

거리를 계산할 두 점을 수동으로 선택할 수 있기를 원합니다. N 열을 사용하여 원하는 것을 결정하십시오. 이것은 거의 그래도 –

+0

이것은 빛이다 –

관련 문제