2016-04-05 13 views
2

私は2つのポストコード間の距離を計算しようとしています。 1つのポストコードの座標は一般的ですが、もう1つのポストコードはデータベースに保存されています。以下のコードは、一般的な郵便番号と私が入力した郵便番号の間の距離には作用しません。上記1としてjavascriptを使用して2つのポストコード間の距離を計算する

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

この行は何をしようとしていますか?私には奇妙に見えます。間違った関数のシグニチャで、値を追加していないようです: 'var distanceFromSpecificPoint = getDistanceFromLatLonInKm.bind(null、52.486637、-1.890952);' – ManoDestra

+0

また、 'a'の計算にいくつかの角括弧を入れることもできます。これまでの計算の数学的妥当性をチェックしていないが、それはすぐに思い浮かぶエラーの1つの可能な領域である。また、2回のsin演算を2回行うことを避けるために、その計算でMath.powを呼び出すこともできます。 – ManoDestra

答えて

0

、あなたは、単にサーバー側でデータベースから値を取得し、あなたが望むものは何でも、サーバー側のWebフレームワークを使用することができます。私がここで示した例は、値がどこに入力されたかを示す例としての純粋なClassic ASPです。サーバー側では、データベースの値は定数であり、1つの点のlat/lonを入力して、データベースlat/lon(ここでは定数LAT1/LON1)からの距離を取得します。 dbModelは、データベースから取り込まれるサーバー側のオブジェクトです。このオブジェクトから緯度/経度の値を取得し、サーバー側のスクリプトを使用してWebページに挿入することができます。

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

それとも、あなたはこのような動的であることを、それを必要としない場合は、単にデータベースからの静的な値を取得し、LAT1とLON1の値としてここに入力します。

など。

FreeMapTools

Google Maps

const LAT1 = 52.482799; 
    const LON1 = -2.000643; 

は、それからちょうどPAF検索を行うために...このよう

var distance = getDistanceFromLatLonInKm(52.48463500000000, -1.980759000000000); 

をあなたの関数を呼び出します。あなたの郵便番号を検索してから、URLから緯度/経度を取得してください。

+0

私のためにうまく動作します。あなたは何を得ているのですか、それはなぜ機能していませんか?あなたが何がうまくいかないか教えて、私があなたを助けることができるようにする必要があります。 – ManoDestra

+0

コードを転送したときにマイナーなタイプミスがありました。今更新されました: – ManoDestra

+0

ありがとうございます。私はデータベースから情報を取得するためにPHPを使用しています。私は、プロパティポストコードは長いlat情報なしで格納されているので、私はポストコード情報をどのように取得するのかわかりません。しかし、私はそこにポストコードと呼ばれる別のテーブルにそれぞれの長いとラットの情報を持つすべての英国ポストコードを持っています。では、プロパティテーブルからプロパティポストコードを取得し、ポストコードテーブルにリンクして、この情報をこの式に入力する方法はありますか? –

関連する問題