해결과제. 두점이 주어지고 한점을 다른점 방향으로 특정 거리만큼 이동하고 싶은 문제
뇌피셜로 해결 : 기준 좌표에 좌표간의 차이를 기존 거리 대비 이동하고싶은 거리로 곱한만큼 가산하여 도출
SQL 표준 수학 함수 조회 (ex. SQRL)
검출 단계
1. 두 좌표간의 거리 구하기 : 피타고라스 정의
2. 벡터의 개념을 활용하여 좌표 변경 위치 도출
3. 검출된 위치를 기준으로 거리 검수
주요 코드 부분 및 결과 화면
--거리 구하기
SET @DIST = SQRT(POWER(@X2-@X1,2)+POWER(@Y2-@Y1,2))
--이동좌표 구하기 구하기
SET @X3 = @X1+3.3*((@X2-@X1)/@DIST)
SET @Y3 = @Y1+3.3*((@Y2-@Y1)/@DIST)
3.3 은 제가 쓰는 변수 값이고 이동할 만큼의 거리입니다.
함께알면 좋은 정보 : mssql에서 float를 동적으로 문자열로 생성
2021.01.06 - [프로그래밍/TSQL] - [MSSQL] FLOAT를 문자열로 바꾸기 |
MSSQL 함수로 개발하여 사용하였습니다.
@MV 를 이동 거리로 생각하시면 됩니다. 3.3을 곱한건 제가 쓰고있는 특수한 환경에 의해 가산한것입니다.
아래 코드 활용시 이동 거리부분은 기본 좌표계에 따라 다르게 설정하셔야합니다.
ALTER FUNCTION [dbo].[FN_UtilMoveDistance](
@X1 FLOAT,
@Y1 FLOAT,
@X2 FLOAT,
@Y2 FLOAT,
@MV FLOAT
)RETURNS GEOMETRY
AS
BEGIN
DECLARE @DIST FLOAT,@X3 FLOAT,@Y3 FLOAT
SET @DIST = SQRT(POWER(@X2-@X1,2)+POWER(@Y2-@Y1,2))
SET @X3 = @X1+3.3*@MV*((@X2-@X1)/@DIST)
SET @Y3 = @Y1+3.3*@MV*((@Y2-@Y1)/@DIST)
RETURN GEOMETRY::STGeomFromText('POINT('+CONVERT(VARCHAR(20),CONVERT(NUMERIC(30),@X3))+' '++CONVERT(VARCHAR(20),CONVERT(NUMERIC(30),@Y3))+')',0)
END
To move one point in a planar coordinate system in the direction of another point.
(How to move a distance in the direction of one point?)
Calculate the reference coordinates by multiplying the difference between the coordinates by the proportion of distance you want to move.
(Derived by multiplying the difference between the coordinates by the distance desired to travel compared to the existing distance.)
'프로그래밍 > TSQL' 카테고리의 다른 글
[MSSQL] datetime vs datetime2 타입 차이 (0) | 2021.08.25 |
---|---|
[MSSQL]병렬처리의 조건 (0) | 2021.07.08 |
[MSSQL]OPENQUERY 실패 (해결) (2) | 2021.06.16 |
BCP 호스트 데이터 파일을 열 수 없습니다.(“Unable to Open BCP host data-file”) - 해결(solved) (0) | 2021.06.09 |
[MSSQL]XP_CMDSHELL 'BCP'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. (1) | 2021.06.07 |
댓글