计算用户位置与地图上所有标记之间的距离

时间:2016-05-03 09:19:14

标签: javascript google-maps google-maps-api-3

自己做了一些谷歌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与地图上其他所有标记之间的距离?

1 个答案:

答案 0 :(得分:2)

您可以使用directionsService知道地图上两个标记之间的距离取决于您选择的travelling mode"DRIVING""WALKING",{{1} },"BICYCLING")。

如果你想计算空气距离,你需要使用Haversine公式的几何几何(检查代码:https://stackoverflow.com/a/1502821/2314737

以下是"TRANSIT"

的示例
"DRIVING"

这是一个演示 http://jsfiddle.net/user2314737/fLogwsff/

编辑:或者,您可以使用spherical geometry包中的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); } }); } 功能

  

computeDistanceBetween (从: LatLng ,到: LatLng ,半径?:数字)
  返回值:number返回两个LatLng之间的距离(以米为单位)。   您可以选择指定自定义半径。半径默认为   地球半径。

computeDistanceBetween

更新了演示:http://jsfiddle.net/user2314737/qxrg4o3y/