isLocationOnEdge公差计算以km为单位

gho*_*... 6 google-maps google-maps-api-3

我正在使用谷歌地图地图API
isLocationOnEdge

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

我不明白公差与公里有什么关系

isLocationOnEdge(point:LatLng, poly:Polygon|Polyline, tolerance?:number)
Run Code Online (Sandbox Code Playgroud)

让我坐下来想要检测一个用户是否在100米范围内的地图上绘制的任何折线.如何解决这个问题.

zta*_*tan 12

这篇文章中的一条评论:

公差,它基于纬度和经度所需的小数位精度.

例如,如果说(33.00276,-96.6824)在折线上,如果公差为0.00001,那么如果将点更改为(33.00278,-96.6824),那么该点将在折线上.

因此,如果要在折线内找到大约100米内的位置,则可以使用0.001作为公差值.

例如,如果您的位置为(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/


小智 5

您还可以创建一个自定义函数来以米为单位进行验证以获得更好的精度。

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;
};
Run Code Online (Sandbox Code Playgroud)