2014-01-22 1 views
19

내가있는 곳에 따라 구체적인 정보를 표시하고 싶습니다.Geolocation 내 위치에서 가장 가까운 위치 (위도, 경도)

나는 다른 정보를 가진 5 개의 도시가 있으며, 나는 그 도시 (정보)를 보여주고 싶습니다.

가장 간단한 방법은 javascript를 사용하는 것입니다.

Ex. 내가 긴 배열

var cities = [ 
    ['new york', '111111', '222222', 'blablabla'] 
    ['boston', '111111', '222222', 'blablabla'] 
    ['seattle', '111111', '222222', 'blablabla'] 
    ['london', '111111', '222222', 'blablabla'] 
] 

에 그리고 내 현재 위치, 위도 도시를 저장하는 경우

은 (위도, 긴) 난에 옷장있어 도시를합니다.

+0

무엇을 시도해야합니까? –

+1

아직 시도하지 않았 으면 가능한지 확인하십시오. –

답변

36

하여 사용하여 기본 코드 예제 HTML5 위치 정보를 사용하여 사용자의 위치를 ​​파악합니다. 그런 다음 NearestCity()을 호출하고 위치에서 각 도시까지의 거리 (km)를 계산합니다. Haversine 수식을 사용하여 대신에 피타고라스 공식과 투영법을 사용하여 경도선의 곡률을 조정했습니다.

// Get User's Coordinate from their Browser 
window.onload = function() { 
    // HTML5/W3C Geolocation 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(UserLocation); 
    } 
    // Default to Washington, DC 
    else 
    NearestCity(38.8951, -77.0367); 
} 

// Callback function for asynchronous call to HTML5 geolocation 
function UserLocation(position) { 
    NearestCity(position.coords.latitude, position.coords.longitude); 
} 


// Convert Degress to Radians 
function Deg2Rad(deg) { 
    return deg * Math.PI/180; 
} 

function PythagorasEquirectangular(lat1, lon1, lat2, lon2) { 
    lat1 = Deg2Rad(lat1); 
    lat2 = Deg2Rad(lat2); 
    lon1 = Deg2Rad(lon1); 
    lon2 = Deg2Rad(lon2); 
    var R = 6371; // km 
    var x = (lon2 - lon1) * Math.cos((lat1 + lat2)/2); 
    var y = (lat2 - lat1); 
    var d = Math.sqrt(x * x + y * y) * R; 
    return d; 
} 

var lat = 20; // user's latitude 
var lon = 40; // user's longitude 

var cities = [ 
    ["city1", 10, 50, "blah"], 
    ["city2", 40, 60, "blah"], 
    ["city3", 25, 10, "blah"], 
    ["city4", 5, 80, "blah"] 
]; 

function NearestCity(latitude, longitude) { 
    var mindif = 99999; 
    var closest; 

    for (index = 0; index < cities.length; ++index) { 
    var dif = PythagorasEquirectangular(latitude, longitude, cities[index][1], cities[index][2]); 
    if (dif < mindif) { 
     closest = index; 
     mindif = dif; 
    } 
    } 

    // echo the nearest city 
    alert(cities[closest]); 
} 
+0

다음 줄에는 오타가 있습니다. var dif = PythagorasEquirectangular (lat, lon, cities [index] [1], cities [index] [2]); var dif = PythagorasEquirectangular 여야합니다 (위도, 경도, cities [index] [1], cities [index] [2]); – Kennet

+0

@Kennet - 오타에 대해 알려 주셔서 감사합니다. 나는 대답으로 그것을 고쳤다. –

+0

. 입니다. 굉장해. 감사합니다 @ Andrew-OpenGeoCode – AndrewLeonardi

15

는, 사용자가 사용자의 위치를 ​​풀 수있는 더 읽을 수 계산 후 하버 사인 함수 (function below taken from here)를 사용하여 본 실시 예와 비교하기 : 여기

function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) { 
    var R = 6371; // Radius of the earth in km 
    var dLat = deg2rad(lat2-lat1); // deg2rad below 
    var dLon = deg2rad(lon2-lon1); 
    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 d; 
} 

function deg2rad(deg) { 
    return deg * (Math.PI/180) 
} 
관련 문제