일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 다형성
- 업캐스팅
- 전체
- 25가지 효율적인 sql작성법
- 전자정부
- 야구게임
- 상속예제
- 전체텍스트
- jquery
- 페이징
- 가변인자
- 추상클래스
- Validations
- 상속
- 자바 야구게임
- Full text
- 자바
- 다운캐스팅
- Random
- Login with OAuth Authentication
- IBatis procedure
- full text indexing
- while
- 이클립스
- 단축키
- 형변환
- 로또
- 스프링
- angular2
- Today
- Total
nalaolla
WGS-84 방식의 좌표값을 가지는 두 좌표의 거리를 구하는 함수 본문
WGS-84 방식의 좌표값을 가지는 두 좌표의 거리를 구하는 함수이다.
지구를 가상의 구체로 인식하여 위도와 경도로 거리를 구하는 방식으로
반환 단위는 km로 반환된다.
헌데, java 함수와, 오라클 함수 프로시저로 반환된 값이 서로 다른데 뭐가 문제일까했더니
오라클 함수 프로시저에는 파이 값을 이용해서 계산되는 로직이 들어가 있다...
좌표 부분은 잘 몰라서 뭐가 맞는지는 모르겠지만 우선 아래 소스를 이용하면 도움이 많이 될것 같다.
1.java 함수
private static double getDistance_arc(double sLat, double sLong, double dLat, double dLong){
final int radius=6371009;
double uLat=Math.toRadians(sLat-dLat);
double uLong=Math.toRadians(sLong-dLong);
double a = Math.sin(uLat/2) * Math.sin(uLat/2) + Math.cos(Math.toRadians(sLong)) * Math.cos(Math.toRadians(dLong)) * Math.sin(uLong/2) * Math.sin(uLong/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double distance = radius * c;
return Double.parseDouble(String.format("%.3f", distance/1000));
}
2.오라클 함수
현재 좌표와 구글 좌표를 이용하여 거리 구하는 오라클 프로시저
CREATE OR REPLACE FUNCTION GOOGLE_DISTANCE (
LAT1 FLOAT,
LNG1 FLOAT,
LAT2 FLOAT,
LNG2 FLOAT
)
RETURN FLOAT
IS
fEARTH_R FLOAT := 6371000.0;
fPIE FLOAT := 3.141592653589793;
fRAD FLOAT := 0.0;
radLAT1 FLOAT := 0.0;
radLAT2 FLOAT := 0.0;
radDIST FLOAT := 0.0;
fDIST FLOAT := 0.0;
BEGIN
fRAD := fPIE / 180;
radLAT1 := fRAD * LAT1;
radLAT2 := fRAD * LAT2;
radDIST := fRAD * ( LNG1 - LNG2 );
fDIST := SIN( radLAT1 ) * SIN( radLAT2 );
fDIST := fDIST + COS( radLAT1 ) * COS( radLAT2 ) * COS( radDIST );
RETURN ((fEARTH_R * ACOS( fDIST ))/1000);
END;
/
'ORACLE' 카테고리의 다른 글
hr스키마 테스트 (0) | 2015.12.21 |
---|---|
데이터 병합 (0) | 2015.12.21 |
25가지 효율적인 sql작성법 (0) | 2015.12.20 |
오라클 함수 - ROLLUP, CUBE, GROUPING (0) | 2015.12.20 |
오라클(ORACLE) 날짜 레코드 만들기 CONNECT BY (0) | 2015.12.20 |