javascript - 检查纬度和经度是否在谷歌地图的圆圈内

标签 javascript google-maps google-maps-api-3

下面是我想要的结果

enter image description here

我想知道的是:

我使用中心点经纬度和围绕它的半径创建了圆。现在我想知道,如何检查(计算)纬度和经度是在区域内还是区域外,如果您能给我 Javascript 代码示例,我将不胜感激。我正在使用 Google Maps API V3。

我找到了这个功能,但对我来说没有按预期工作:

function arePointsNear(checkPoint, centerPoint) {
    var sw = new google.maps.LatLng(centerPoint.lat() - 0.005, centerPoint.lng() - 0.005);
    var ne = new google.maps.LatLng(centerPoint.lat() + 0.005, centerPoint.lng() + 0.005);
    var bounds = new google.maps.LatLngBounds(sw, ne);
    if (bounds.contains (checkPoint)){
        return true;
    }
    return false;
}

任何帮助都会很棒..提前致谢!!

最佳答案

对于如此短的距离,并且精度不必精确到厘米,您可以将地球表面视为平坦的。在中心点的纬度处计算从度数到公里数的转换,然后Pythagorean theorem可用于获取距离:

function arePointsNear(checkPoint, centerPoint, km) {
  var ky = 40000 / 360;
  var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;
  var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
  var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
  return Math.sqrt(dx * dx + dy * dy) <= km;
}

演示:http://jsfiddle.net/Guffa/57gQa/

注意:如果您传递的是 0/360 经度,则代码不会考虑在内。如果是这种情况,您必须先标准化经度。

关于javascript - 检查纬度和经度是否在谷歌地图的圆圈内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24680247/

相关文章:

javascript - Reactjs - 使用 xlsx.utils.json_to_sheet 导出到 Excel

javascript - 为什么 "this"不等于调用该函数的对象?

google-maps - 带有邮政信箱的 Google Places 自动填写地址表?

javascript - 构建以地理为中心的应用程序 : what should I know?

google-maps - Google map : Given a point, 如何查找给定旅行时间的所有点?

javascript - 在 Google map V3 上旋转图像/标记图像

javascript - AngularJS 中 $index 的计算?

javascript - 如何使用 Selenium 根据亚马逊上自动建议的某些建议将 "click"化?

reactjs - google.maps.places.PlacesService(map) 总是返回 null

javascript - 攻击者能否用完其他站点的 Google map 配额?