Programing/JavaScript

Javascript 두 좌표 사이의 거리 구하기, 두 좌표의 중앙 좌표 구하기

리커니 2018. 11. 19.
반응형

Javascript 두 좌표 사이의 거리 구하기, 두 좌표의 중앙 좌표 구하기

 

 

WGS84 좌표계의 두 좌표 사이의 중앙에 좌표간 거리를 구해서 출력하는 방법을 알아보도록 하겠습니다.

GSP지도는 카카오(다음) 지도 기반입니다.

 

 

 

- 두 좌표의 중심점을 구하는 함수

function makeLengthInfo(data){
    var iwContent = '';
    var distanceArray = [];
    data.reduce(function(a,b){
        var d = [];
        var position1 = new daum.maps.LatLng(Number(a.split('/')[0]),Number(a.split('/')[1]));
        var position2 = new daum.maps.LatLng(Number(b.split('/')[0]),Number(b.split('/')[1]));
        d.push(position1, position2);
        var x = (Number(a.split('/')[0])+Number(b.split('/')[0]))/2;
        var y = (Number(a.split('/')[1])+Number(b.split('/')[1]))/2;
        var positions = new daum.maps.LatLng(x,y);
        var infoWinArray = new daum.maps.InfoWindow({
            position: positions,
            zIndex:1,
             content:(getDistanceFromLatLonInKm(d)/1000)+"Km"
        }).setMap(map);
        return b;
    });
}

 

여기서 data의 포멧은 x+"/"+y 데이터가 있는 배열입니다.

두 좌표 사이의 중심 값은 (x1+x2)/2, (y1+y2)/2 로 구하는 것을 보실 수 있습니다.

사용된 reduce 함수에 대해서는 아래의 Link를 참고하세요.

 

* 단순히 두 좌표의 중심점은 x1 - x2 /2 로 구하시면 됩니다.

 

Link : javascript reduce 함수에 대해 알아보자 자바스크립트 reduce 함수, reduceRight 함수

 

- 두 좌표 사이의 거리를 구하는 함수

function getDistanceFromLatLonInKm(array) {
    var lat1 = array[0].getLat();
    var lng1 = array[0].getLng();
    var lat2 = array[1].getLat();
    var lng2 = array[1].getLng();
    
    function deg2rad(deg) {
        return deg * (Math.PI/180)
    }
    var r = 6371; //지구의 반지름(km)
    var dLat = deg2rad(lat2-lat1);
    var dLon = deg2rad(lng2-lng1);
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = r * c; // Distance in km
    return Math.round(d*1000);
}

 

여기서 매개변수로 받는 배열은 makeLengthInfo 함수를 보시면,

var position1 = new daum.maps.LatLng(Number(a.split('/')[0]),Number(a.split('/')[1]));
var position2 = new daum.maps.LatLng(Number(b.split('/')[0]),Number(b.split('/')[1]));

 

다음지도의 포지션 값인 것을 확인하실 수 있습니다.

 

 

 

반응형

댓글

💲 추천 글