0

각 위치에 대한 사용자 거리를 기반으로 목록을 표시하려고합니다. 위치는 Firebase에서 JSON으로 수신됩니다. 위도와 경도를 기준으로 두 위치 간 거리를 얻는 방법은 무엇입니까?

사용자의 위치를 ​​얻으려면, 내가 사용하고 있습니다 :

navigator.geolocation.getCurrentPosition(function(position) { 
     var latitude = position.coords.latitude; 
     var longitude = position.coords.longitude; 

당신은 방법을 알고 있나요 거리에 의해이 JSON을 정렬하고 (여러 자식 노드를 가짐)을 나열?

감사합니다.

+0

'{lat, lng}'의 ​​목록을 보시겠습니까? –

+0

예, 각 위치에 대해 {lat, lng, ...}의 목록을받습니다. – featorres

+0

답장을 보내 드리겠습니다. –

답변

1

당신은 다른 위도/경도 위도/경도 사이의 거리를 얻을 수있는 두 가지 방법이 있습니다

은 - 구글 API를 사용하여

function getDistanceOneToOne(lat1, lng1, lat2, lng2) 
    { 
     const Location1Str = lat1 + "," + lng1; 
     const Location2Str = lat2 + "," + lng2; 

     let ApiURL = "https://maps.googleapis.com/maps/api/distancematrix/json?"; 

     let params = `origins=${Location1Str}&destinations=${Location2Str}&key=${GOOGLE_API_KEY}`; // you need to get a key 
     let finalApiURL = `${ApiURL}${encodeURI(params)}`; 

     let fetchResult = await fetch(finalApiURL); // call API 
     let Result = await fetchResult.json(); // extract json 

     return Result.rows[0].elements[0].distance; 
    } 

이 모바일에 네트워크 연결이 필요하지만, 직선 거리를 제공하는 두 번째 접근 방식과 달리 주행 거리 (정확히는 주행 네비게이터)와 PLUS (예 : 도착 소요 시간)을 제공합니다.

위 내용은 get a Google Api Key이어야합니다. 여기에 더 많은 정보 : Google Maps Api

- 순수 수학

이 장치에 로컬로 발생하고, 두 개의 위도/경도 사이의 직선 거리를 제공하는 사용.

function distance(lat1, lon1, lat2, lon2, unit) { 
    var radlat1 = Math.PI * lat1/180 
    var radlat2 = Math.PI * lat2/180 
    var theta = lon1-lon2 
    var radtheta = Math.PI * theta/180 
    var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta); 
    dist = Math.acos(dist) 
    dist = dist * 180/Math.PI 
    dist = dist * 60 * 1.1515 
    if (unit=="K") { dist = dist * 1.609344 } 
    if (unit=="M") { dist = dist * 0.8684 } 
    return dist 
} 

각 항목에 대해 위 항목 중 하나를 실행하면 각각에 대해 거리가 표시됩니다. 희망이 도움이됩니다.

관련 문제