2015-02-04 5 views
0

위도와 경도를 사용하여 한 위치에서 다른 위치까지의 거리를 마일 단위로 측정하는 함수를 작성하는 방법을 파악하려고합니다. EXECUTE가 실행될 때 매개 변수가 추가됩니다. "geography :: Point()"및 "STDistance"float 대신 사용하려고합니다.피연산자 유형 충돌 지형이 부동 소수점과 호환되지 않습니다.

IF OBJECT_ID('dbo.udfDistanceMiles') IS NOT NULL 
    DROP FUNCTION dbo.udfDistanceMiles 
GO 
CREATE FUNCTION dbo.udfDistanceMiles 
(
    @long1 geography, 
    @long2 geography, 
    @lat1 geography, 
    @lat2 geography 
) 
RETURNS geography 
AS 
BEGIN 
    DECLARE @from geography 
    DECLARE @to geography 
    DECLARE @kilo geography 
    DECLARE @miles as geography 

    SET @from = geography::Point(@lat1,@long1,4268); 
    SET @to = geography::Point(@lat2,@long2,4268); 
    SET @kilo = (SELECT @from.STDistance(@to)); 
     BEGIN 
      SET @miles = (@kilo * '.621371'); 
     END 

    RETURN @miles 

END 
GO 

이것은 공간 데이터베이스를 사용하는 수업에 대한 과제이지만, 알아낼 수없는 걸음으로 이어졌습니다. 함수를 만들려고 할 때이 피연산자 유형 충돌을 실행 중입니다.

Msg 206, Level 16, State 2, Procedure udfDistanceMiles, Line 19 
Operand type clash: geography is incompatible with float 
Msg 206, Level 16, State 2, Procedure udfDistanceMiles, Line 19 
Operand type clash: geography is incompatible with float 
Msg 206, Level 16, State 2, Procedure udfDistanceMiles, Line 20 
Operand type clash: geography is incompatible with float 
Msg 206, Level 16, State 2, Procedure udfDistanceMiles, Line 20 
Operand type clash: geography is incompatible with float 
Msg 206, Level 16, State 2, Procedure udfDistanceMiles, Line 21 
Operand type clash: float is incompatible with geography 
Msg 403, Level 16, State 1, Procedure udfDistanceMiles, Line 23 
Invalid operator for data type. Operator equals multiply, type equals geography. 

newb에 대한 도움을 주시면 감사하겠습니다.

감사

답변

0

SLC, UT에서 LA, CA까지의 거리를 측정하는 EXEC와 함께 저에게 도움이되는 완성 된 기능입니다.

ALTER FUNCTION [dbo].[udfDistanceMiles] 
(
    @long1 float, 
    @long2 float, 
    @lat1 float, 
    @lat2 float 
) 
RETURNS float 
AS 
BEGIN 
    DECLARE @from geography 
    DECLARE @to geography 
    DECLARE @miles as float 

    SET @from = geography::Point(@lat1,@long1,4326); 
    SET @to = geography::Point(@lat2,@long2,4326); 
    SET @miles = (SELECT ((@from.STDistance(@to) * '.001') * '.621371')); 
    --SET @miles = (SELECT (@from.STDistance(@to) * '.621371')); 

    RETURN @miles 

END 

그리고 EXEC :

USE DBM384; 
GO 

DECLARE @miles float= NULL; 

EXEC @miles = dbo.udfDistanceMiles @lat1= 34, @long1= -118, @lat2= 40.758701, @long2= -111.876183; 

PRINT @miles; 
0

그것은 잘못 입력하는 함수에 매개 변수 것 같습니다. 즉, 위도/경도의 쌍을 전달하는 경우 유형은 지형 유형이 아니라 float 유형입니다. 당신은 그걸 바꿀 수있을 것이고 그 밖의 모든 것들을 해결할 수있을 것입니다.

관련 문제