Google maps isLocationOnEdge公差计算(以km为单位)

Google maps isLocationOnEdge公差计算(以km为单位),google-maps,google-maps-api-3,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); 我不明白公差与公里有什么关系 isLocat

我正在使用谷歌地图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)

让sat来检测用户是否在地图上绘制的任何多段线的100米范围内。如何解决此问题。

来自下列评论之一:

公差,基于纬度和经度方面所需的小数点精度

例如,如果(33.00276,-96.6824)在多段线上,如果公差为0.00001,则如果将点更改为(33.00278,-96.6824),则该点将不在多段线上

因此,如果要在多段线的大约100m范围内找到一个位置,可以使用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.002,因此如果使用数字0.001作为
isLocaitonEdge()
的公差值,它将返回false


您可以从这个JSFiddle中看到示例代码:

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

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;
};
var isLocationOnEdge=函数(位置、多段线、公差单位){
for(polyline.getPath().b的变量腿){
如果(google.maps.geometry.sphere.ComputedDistanceBeween(location,leg)我找到的isLocationOnEdge的包如下所示-

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

它对我很有用。

谢谢,Mario。你能添加更多关于它如何工作的信息吗?欢迎来到Stack Overflow,感谢你的贡献!虽然你的答案可能会解决问题中提到的问题,但不清楚你提到的包是如何解决的。请阅读我们的指南,并通过单击编辑它下面的链接。