0

緯度と経度の多次元配列と、もう 1 つのマーカー「m」があります。他の 2 つのマーカーを作成するには、配列から "m" に最も近い 2 つの点を取得する必要があります。どんな助けでも大歓迎です。

これは緯度と経度の配列です

var locations= [
                   ['loc1', 54.1121824,-1.3983992],
                   ['loc2', 54.2121824,-1.4323992],
                   ['loc3', 54.4121824,-1.5993992],
                   ['loc4', 54.3871874,-1.6773992],
                   ['loc5', 54.1963824,-1.5983992]
                 ];  

54.1143824,-1.4963992それらから2つのマーカーを作成するために、m =に最も近い2つのポイントを取得したい

4

2 に答える 2

3

コンポーネントの 1 つは、オプション (地球の半径)であるgeometryライブラリ関数を使用しています。computeDistanceBetween(from:LatLng, to:LatLng, radius?:number)radius

パラメータgeometryを使用して JS APIに含める必要があります。libraries

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false"></script>

これで、データをループして、各座標と特別なマーカーの間の計算された距離を保存できますm。結果はデフォルトでメートル単位になります(オプションで半径を変更すると、別の単位になります)

座標データの各行に対して、rowLatLng = new google.maps.LatLng(row[1], row[2])

google.maps.geometry.spherical.computeDistanceBetween(rowLatLng, m.getPosition())

次に、最も近い 2 つのポイントを抽出する最善の方法は、オブジェクトを使用して、{ locationname: "loc1", distance: 20 }マーカー「m」と比較されているポイントと、計算された距離を保存することです。さらに良いのは、位置変数から「行」インデックスを保存して、座標を簡単に取得できるようにすることです。

これらのオブジェクトの配列は、距離で並べ替えることができます。私はここに投稿を見つけました:価格で家を並べ替えるための次の回答を使用してJavaScript オブジェクトの配列を並べ替える:

homes.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) } );
于 2012-05-20T02:55:20.543 に答える
0

メインコンピューターにそのためのコードがいくつかありますが、基本的には次のことを行う必要があります。

  • 座標をループして、それぞれの座標と m の間の距離を計算します (Haversine Formula)
  • 各距離を位置の名前とともに配列に格納します
  • 配列をソートする

ビンゴ。

編集:

Haversine を計算するコード:

Number.prototype.toRad=function() {
 return this * (Math.PI / 180);
}


function Haversine=function(lat1, lon1, lat2, lon2) {
  var R = 6371; // km
  var dLat = (lat2-lat1).toRad();
  var dLon = (lon2-lon1).toRad();
  var lat1 = lat1.toRad();
  var lat2 = lat2.toRad();
  var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  var d = R * c;
  return d;
}
于 2012-05-20T03:03:22.247 に答える