2015-02-28 2 views
3

Я использую Google Map карту API
isLocationOnEdgeisLocationOnEdge в терминах км

var isLocationNear = google.maps.geometry.poly.isLocationOnEdge(latlng, new google.maps.Polyline({ 
    path: google.maps.geometry.encoding.decodePath(result.routes[0].overview_polyline) 
}), .00001); 

Я ДНТ понять, как толерантность связана км

isLocationOnEdge(point:LatLng, poly:Polygon|Polyline, tolerance?:number) 

Пусть сидел я хочу, чтобы обнаружить, если пользователь находится в пределах 100 м для любой полилинии, нарисованной на карте. Как это исправить.

ответ

7

От одного из комментариев в this post:

толерантности, она основана на десятичной точности место желаемой с точки зрения широты и долготы.

Пример, если скажем (33,00276, -96,6824) находится на ломаной линии, если толерантность 0,00001 тогда, если вы измените пункт (33.00278, -96.6824), то точка будет находиться на ОНТ полилинии.

Таким образом, вы можете использовать 0,001 как значение допуска, если вы хотите найти местоположение в пределах около 100 м для полилинии.

Например, если ваше местоположение (1.001, 12), одна из точек в полилинии (1, 12), расстояние между вашим местоположением и полилинией будет около 111,319 метра. Допуск между (1.001, 12) и (1, 12) равен 0,001, поэтому isLocationOnEdge() вернет true.

Если ваше местоположение (1.002, 12), расстояние до (1, 12), будет около 222,638 метров. Допуск между ними равен 0,02, поэтому, если вы используете 0,001 в качестве значения допуска для isLocaitonOnEdge(), он вернет false.

Вы можете увидеть пример кода из этого JSFiddle: https://jsfiddle.net/j7cco3b0/1/

1

Вы также можете создать пользовательскую функцию проверки в метрах для лучшей точности.

var isLocationOnEdge=function(location,polyline,toleranceInMeters) { 
    for(var leg of polyline.getPath().b) { 
     if(google.maps.geometry.spherical.computeDistanceBetween(location,leg) <= toleranceInMeters){ 
      return true; 
     } 
    } 
    return false; 
}; 
Смежные вопросы