2016-05-03 7 views
0

Google Mpasのコンテンツを自分で作成しましたが、距離計算を停止しました。 は、私が現在位置マーカを利用者の位置を特定するための機能があります。ユーザーの場所と地図上のすべてのマーカーとの距離を計算する

function myLocationMarker(latLng) { 
    var markerOptions = { 
     position: latLng, 
     map: map, 
     clickable: true 
    } 
    var myMarker = new MarkerWithLabel(markerOptions); 

を、この機能は他のマーカーを配置します。データベースからデータを取得し、約1000個のマーカーを配置します。

var markers = []; //blank array from markers 
function addMarker(lat, lng, info) { //info - needed for database 
    var pt = new google.maps.LatLng(lat, lng); 
    var marker = new google.maps.Marker({ //marker options 
     position: pt, 
     icon: icon, 
     map: map 
    }); 
    markers.push(marker); //pushing every marker to markers array 

しかし、私はそれらの間の距離が必要です。 myLocationMarkerとマップ上の他のすべてのマーカーとの距離を計算する方法はaddMarkerですか?

答えて

2

あなたはdirectionsServiceは、マップ上の2つのマーカー間の距離は、あなたが("DRIVING""WALKING""BICYCLING""TRANSIT")を選択しますtravelling modeに依存していることを意識することができます。

あなたは空気の距離を計算したい場合は、半正矢式で、いくつかのジオメトリが必要になります(ここではコードをチェック:https://stackoverflow.com/a/1502821/2314737)を

はここでここでデモが http://jsfiddle.net/user2314737/fLogwsff/

"DRIVING"

function calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB, outputTxt) { 
    var selectedMode = "DRIVING"; 
    directionsService.route({ 
    origin: pointA, 
    destination: pointB, 
    unitSystem: google.maps.UnitSystem.METRIC, 
    travelMode: google.maps.TravelMode[selectedMode] 
    }, function(response, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(response); 

     outputTxt.innerHTML = Math.round(directionsDisplay.getDirections().routes[directionsDisplay.getRouteIndex()].legs[0].distance.value/1000) + "Km"; 
    } else { 
     window.alert('Directions request failed due to ' + status); 
    } 
    }); 
} 

との例です

EDIT:代わりにspherical geometryパッケージのcomputeDistanceBetween機能を使用することができます

(から緯度経度、半径:?番号:へ緯度経度)computeDistanceBetween
戻り値:数が2 LatLngs間、メートルで、距離を返します。 カスタム半径を指定することもできます。半径のデフォルトは、地球の半径の です。

var distance = google.maps.geometry.spherical.computeDistanceBetween(pointA, pointB); 
// by default distance is in meters 
distance = Math.round(distance/ 1000) + "Km"; 

更新デモ:http://jsfiddle.net/user2314737/qxrg4o3y/

関連する問題