我正在使用谷歌地图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米范围内。如何解决这个问题。
答案 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()
对我有用。