2011-07-22 5 views
0

特定の点から約50km離れた場所の長さと長さを見つける必要があります。どうすればいいのですか?場所から約50km離れた場所の長さと長さを見つける必要があります

+1

を見上げる「大圏距離」 – Randy

+1

はこれが開始するには良い場所でしょう.html – aroth

+0

私は前にこの問題を抱えていました。解決策はこちら http://stackoverflow.com/questions/5632406/how-to-find-latitude-and-longitude – Rasel

答えて

1

これは、それがhere可能な方程式とサンプルコードをベースにしています、あなたは非常に近い取得します:

ひどい変数名のため申し訳ありません
window.pointsAround = function(centerLat, centerLng, radius) { 
    var result = []; 

    //do annoying trig maths to work out the delta in latitude between our start and end points 
    var targetD = radius;   //km 
    var R = 6371;     //km 
    var c = (targetD/R)/2; 
    var sqrtA = Math.sin(c); 
    var a = sqrtA * sqrtA; 
    var sinHalfDLat = Math.sqrt(a); 
    var dLat = Math.asin(sinHalfDLat) * 2; 
    var dLatDegrees = ((dLat/(2 * Math.PI)) * 360); 

    var minLat = centerLat - dLatDegrees;   //furthest valid latitude above the origin 
    var maxLat = centerLat + dLatDegrees;   //furthest valid latitude below the origin 

    //alert("minLat=" + minLat + ", maxLat=" + maxLat + ", dLat=" + dLat + ", dLatDegrees=" + dLatDegrees); 

    //topmost and bottommost points in the circle 
    result.push({lat: minLat, lng: centerLng}); 
    result.push({lat: maxLat, lng: centerLng}); 

    //step from minLat to maxLat, interpolating coordinates that lie upon the circle 
    var step = (maxLat - minLat)/180.0; 
    for (var count = 0; count < 179; count++) { 
     minLat += step; 
     dLat = (centerLat - minLat) * Math.PI/180; 

     //more annoying trig to work out the delta in longitude for our interpolated coordinate 
     var dLon = 2 * Math.asin(Math.sqrt((a - (Math.sin(dLat/2) * Math.sin(dLat/2)))/(Math.cos(minLat) * Math.cos(centerLat)))); 
     var dLonDegrees = ((dLon/(2 * Math.PI)) * 360); 

     var newLng = centerLng + dLonDegrees; 
     var deltaLng = newLng - centerLng; 
     result.push({lat: minLat, lng: newLng}); 
     result.push({lat: minLat, lng: centerLng - deltaLng}); 
    } 

    return result; 
}; 

、私は彼らがサンプル実装に基づいています言ったように、同じ名前を使用します。ここで

は実施例である:http://jsfiddle.net/HmchC/8/

プロットは、より多くの私が望むよりも、楕円が、まあまあです。それは私がそれを得ることができるほど近いです、今のところ。

更新

私はそれだけで度からラジアンに変換を欠けていた、楕円形のプロットで問題を修正しました。数学者は、度だけが理にかなっていることをいつ学びますか?ここではどのような場合には

、作業例:http://www.movable-type.co.uk/scripts/latlong: http://jsfiddle.net/HmchC/11/

0

hmmm、ここであなたの後ろにあるものは特に明確ではありません。

既知の点(既知の緯度および経度)を持ち、既知の点を中心とする50kmの円周上にある点の緯度および経度を超えている場合は、

私はそれをどうにか読んでいます....あなたは私が仮定するいくつかの数学でこれを行うことができます。キロメートルのような一定の距離は、あなたが計算し定義できる緯度/経度の一定の変化と同じです。この変化のどれくらいが緯度に適用されるか、どのくらい長く適用されるかを判断することが難しい場合は、デバイスが1つをサポートしている場合、コンパスベアリングを使用することができます。

編集: Arothのコメントのリンクがあなたを助けてくれるはずです

0

あなたはハーベスン公式または空間充填曲線または空間インデックスを探したいと思います。ハーベイジン式は2つの円の衝突を計算し、空間充填曲線はマップをタイルに再帰的に細分する。クアッドツリーのように見え、2dの複雑さが1dの複雑さになります。近くのポイントを検索するためのユニークなキーまたはクォドラントを探したいとします。あなたはNickのヒルベルト曲線空間インデックスquadtreeブログを調べたいと思う。

関連する問題