두 Geo location 좌표의 중간점 구하기

시작점 끝점 2개의 좌표를 가진 도로 정보가 주어지고 특정 좌표를 중심으로 반경 얼마 이내의 도로 ID를 계산하려고 했더니 시작점 기준으로 하기도 애매하고 끝점 기준으로 하기도 애매해서 아예 중간점을 계산해서 중간점을 기준으로 찾기로 했다

데이터는 시작점, 끝점, 중간점을 Elasticsearch에 저장한 후 Elasticsearch에서 지원하는 Geolocation query를 사용하기로 함

아래는 중간점을 구할 때 사용한 코드…

import org.junit.Test;

public class GeoLocationTest {


    @Test

    public void midPoint() {

        midPoint(37.5355890233, 126.8956214339, 37.5366147292, 126.8964237604);

    }


    private void midPoint(double lat1, double lon1, double lat2, double lon2) {

        double dLon = Math.toRadians(lon2 - lon1);


        //convert to radians

        lat1 = Math.toRadians(lat1);

        lat2 = Math.toRadians(lat2);

        lon1 = Math.toRadians(lon1);


        double Bx = Math.cos(lat2) * Math.cos(dLon);

        double By = Math.cos(lat2) * Math.sin(dLon);

        double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));

        double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);


        //print out in degrees

        System.out.println(Math.toDegrees(lat3) + " " + Math.toDegrees(lon3));

    }

}

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중