检查坐标是否包含在Google地图的圆内?

yav*_*avg 5 google-maps google-maps-api-3

我试图制作一个告诉我坐标是否包含在中的应用程序circle

为此,每次我在地图上单击一个点时,都会得到坐标。我想知道新坐标是否包含在圆内

我也想知道如何使一个圆占据距坐标5米的位置。在我的示例中,半径为:50000但是我不知道如何执行转换以将值设置为米。

这是我的代码:

http://plnkr.co/edit/OI4sjcuS526rFYxPnvDv?p=preview

function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
        center: {lat:4.624335 , lng: -74.063644 },
        zoom: 5,
    });

    //circle coordinates
    var circle = new google.maps.Circle({
        map: map,
        radius: 50000,    
        fillColor: '#FFFFFF',
        opacity:0,
        center:{lat:4.624335 , lng: -74.063644 }
    });   

    google.maps.event.addListener(map, 'click', function(e) {
        //I get new coordinates ( e.latLng)
    });
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新

他们已将此问题标记为具有此解决方案的重复问题(http://jsfiddle.net/kaiser/wzcst/embedded/result/

但这并不能真正满足我的问题,因为如您在图像中所见,解决方案失败了。

在此处输入图片说明

tom*_*sef 14

根据我在你的问题中的理解,你想要做的是

  1. 显示地图
  2. 在地图上创建一个圆圈
  3. 单击地图后,确定该点是在圆外还是在圆内

这里有一篇关于这个的帖子:检查纬度和经度是否在一个圆圈内 谷歌地图。如果您检查已接受的答案(归功于Guffa的天才算法),他会使用此函数来检查该点是否在半径范围内:

// credits to user:69083 for this specific function
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;
}
Run Code Online (Sandbox Code Playgroud)

现在至于您想要实现的目标,您只需将其添加到您的点击事件中即可。这是我所做的:

google.maps.event.addListener(map, 'click', function(event) {
  var click = event.latLng;
  var locs = {lat: event.latLng.lat(), lng: event.latLng.lng()};
  var n = arePointsNear(user, locs, diameter);
Run Code Online (Sandbox Code Playgroud)

然后我添加了一个条件,如果函数返回 true,标记将有一个标签“ I ”(内部的缩写)。

  if(n){
    marker = new google.maps.Marker({
      map: map,
      position: locs,
      label: {
        text:"I", //marking all jobs inside radius with I
        color:"white"
      }
    });
Run Code Online (Sandbox Code Playgroud)

然后,如果没有,标记将被标记为“ O ”(外部的缩写)......

  }else{
    marker = new google.maps.Marker({
      map: map,
      position: locs,
      label: {
        text:"O", //marking all jobs outside radius with O
        color:"white"
      }
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

这是我创建的示例应用程序,以防万一您想查看它的实际效果:http : //jsbin.com/hujusod/edit?js,output

这可能与Check if a latitude and longitude is within a circle google maps 重复。或如何根据与输入的地址最近的纬度/经度显示内容

但是由于函数以不同的方式使用,我发布了我的答案来帮助你做你最初打算做的事情。arePointsNear如果这只是您需要的,请随意对函数来自何处的答案进行投票。

我希望这有帮助!