isLocationOnEdge公差计算以km为单位

时间:2015-02-28 15:56:08

标签: 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);

我不明白公差与公里的关系

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

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

3 个答案:

答案 0 :(得分:12)

来自this post中的一条评论:

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

例如,如果说(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/

答案 1 :(得分:2)

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

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;
};

答案 2 :(得分:0)

我发现的 isLocationOnEdge 软件包如下所示-

com.google.maps.android.PolyUtil.isLocationOnEdge()

对我有用。