2016-04-05 35 views
2

İki posta kodu arasındaki mesafeyi çözmeye çalışıyorum. Bir posta kodu koordinatları geneldir, ancak diğer posta kodu almam gereken veritabanında saklanır. Aşağıdaki kod, genel posta kodu ile girdiğim adres arasındaki mesafeyi aşmamaktadır.javascript kullanarak iki posta kodları arasındaki mesafeyi hesaplamak

var x = getDistanceFromLatLonInKm(52.482799000000000, -2.000643000000000, 52.48463500000000, -1.980759000000000); 

function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2){ 
    console.log(lat1, lon1, lat2, lon2); 
var distanceFromSpecificPoint = getDistanceFromLatLonInKm.bind(null, 52.486637, -1.890952); 

    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) 
} 


document.getElementById('result').textContent = x; 

console.log(x) 
</script> 
+0

http://www.zipcodeapi.com/ –

+0

Bu çizgi ne yapmaya çalışıyor? Bana garip görünüyor. Yanlış işlev imzası ve herhangi bir değer eklemiyor gibi görünmüyor: 'vari distanceFromSpecificPoint = getDistanceFromLatLonInKm.bind (null, 52.486637, -1.890952);' – ManoDestra

+0

Ayrıca, hesabınıza bazı parantezler koymak için 'a'. Bu hesaplamaların matematiksel geçerliliğini şu ana kadar kontrol etmedik, ancak bu derhal akla gelen hata için olası bir alan. Ve iki günah işlemlerini iki kez yapmaktan kaçınmak için Math.pow'a yapılan bazı aramaları da kullanabilirsiniz. – ManoDestra

cevap

0

Yukarıda gereğince, sadece sunucu tarafında web çerçeve dilediğiniz sunucu tarafında ve kullanımına ilişkin veri tabanından değer elde edebilirsiniz. Burada verdiğim örnek, yalnızca değerlerin girildiği yeri gösteren bir örnek olarak Klasik ASP'dir. Daha sonra sunucu tarafında, veritabanı değerleri sabittir ve sadece bir nokta için lat/lon girer ve veri tabanından lat/lon'a olan mesafeyi (burada LAT1/LON1 sabitleri) alırsınız. dbModel, veritabanından alınan sunucu tarafında bir nesne olacaktır. Daha sonra, sunucu tarafındaki komut dosyası aracılığıyla web sayfasına eklemek için bu nesneden enlem/boylam değerlerini alabilirsiniz. Böyle dinamik olmasını gerektirmez eğer

function getDistanceFromLatLonInKm(lat, lon) { 
    const EARTH_RADIUS = 6371; // Radius of the earth in km 
    // Here's where you would add the value dynamically from the DB. 
    // I'm using classic ASP here just as an example. You'll have to 
    // amend for your particular server side web framework, be it 
    // JSP, MVC, etc. 
    const LAT1 = <%=dbModel.getLatitude()%>; 
    const LON1 = <%=dbModel.getLongitude()%>; 
    console.log(LAT1, LON1, lat, lon); 

    var dLat = deg2rad(lat - LAT1); 
    var dLon = deg2rad(lon - LON1); 
    var a = Math.pow(Math.sin(dLat/2), 2) + Math.cos(deg2rad(LAT1)) * Math.cos(deg2rad(LON1)) * Math.pow(Math.sin(dLon/2), 2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    var d = EARTH_RADIUS * c; // Distance in km 

    return d; 
} 

function deg2rad(deg) { 
    return deg * (Math.PI/180); 
} 

Veya, sadece veritabanından statik değerlerini yakalamak ve LAT1 ve LON1 değerleri olarak buraya girin.

E.g.

const LAT1 = 52.482799; 
    const LON1 = -2.000643; 

Sonra sadece

var distance = getDistanceFromLatLonInKm(52.48463500000000, -1.980759000000000); 

PAF aramalarını yapmak için bu gibi işlev ... çağırmak:

FreeMapTools

Google Maps. Sadece posta kodunuzu arayın, ardından enlem/boylamı URL'den alın.

+0

Benim için iyi çalışıyor. Aldığınız hatanın ya da neden çalışmıyor?Bana neyin yanlış gittiğini söylemelisin, böylece sana yardım edebilirim. – ManoDestra

+0

Kodu aktardığımda küçük bir yazım hatası oluştu. Şimdi güncellendi :) – ManoDestra

+0

Teşekkürler. Veritabanından bilgi almak için php kullanıyorum. Özellik posta kodu uzun lat bilgisi olmadan saklanır gibi posta kodu bilgilerini nasıl alacağından emin değilim. Ancak, posta kodları olarak adlandırılan başka bir tabloda ilgili uzun ve lat bilgisiyle birlikte tüm İngiltere posta kodlarım var. Öyleyse, mülk posta kodunu mülk tablosundan nasıl alırım, sonra posta kodları tablosuna bağlar ve sonra bu bilgiyi bu formül içine alır mıyım? –