geography
sql server에는 geography 라는 속성의 컬럼이 생겼습니다. (언제부터인지...)
그걸 이용하면 특정 지점에서 가장 가까운 순으로 소팅된 데이터를 부를 수 있지요.
DECLARE @InputLatitude FLOAT = 40.7128; -- 입력 지점의 위도
DECLARE @InputLongitude FLOAT = -74.0060; -- 입력 지점의 경도
SELECT TOP 50 *
FROM YourTableName
ORDER BY geographyColumn.STDistance(geography::Point(@InputLatitude, @InputLongitude, 4326)) ASC;
만약 당신 주변의 가장 가까운 사람들 리스트를 얻고 싶다면 이렇게 하시면 됩니다. 그런데 데이터를 넣을때는?
create table tUser(
uSn bigint identity(1, 1),
uUid nvarchar(200),
uLoc geography,
uLocText nvarchar(200)
)
이렇게 테이블을 만들었다 칩시다. 위도 경도를 받아서 uLocText에 위도 경도를 넣고, uLoc 에는 geography값을 넣는다면,
declare @uLocText nvarchar(200), @uSn bigint
set @uLocText = '40.7128, -74.0060'
set @uSn = 1
UPDATE tUser
SET uLoc= geography::Point(CAST(SUBSTRING(@uLocText, 1, CHARINDEX(',', @uLocText) - 1) AS FLOAT),
CAST(SUBSTRING(@uLocText, CHARINDEX(',', @uLocText) + 1, LEN(@uLocText)) AS FLOAT),
4326)
, uLocText = @uLocText
where uSn = @uSn
가 되는 것이지요. 실제로 uLoc 값에는 hex코드가 들어있어서 확인이 어려우니 위도 경도에 대한 텍스트를 따로 가지고 있으면 활용하기가 쉬워 집니다.
댓글
댓글 쓰기