检查谷歌地图中的圆圈中是否包含坐标?

时间:2018-05-15 04:47:51

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

谢谢!

更新

他们已将此问题标记为重复,并使用此解决方案 (http://jsfiddle.net/kaiser/wzcst/embedded/result/

但它并不能真正满足我的问题,因为正如您在图像中看到的那样,解决方案失败了。

enter image description here

1 个答案:

答案 0 :(得分:2)

从我在你的问题中所理解的,你要做的是

  1. 显示地图
  2. 在地图中创建一个圆圈
  3. 点击地图后, 确定该点是在圆圈之外还是在圆圈之内
  4. 在SO中有一篇关于此的帖子:Check if a latitude and longitude is within a circle google maps。如果您检查接受的答案(天才算法的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;
    }
    

    现在,关于您要实现的目标,您只需在Click事件中添加即可。这是我做的:

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

    然后我添加了条件,如果函数返回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"
          }
        });
    

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

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

    以下是我创建的示例应用程序,以防您希望在行动中看到它: http://jsbin.com/hujusod/edit?js,output

      

    这可能是Check if a latitude and longitude is within a circle google maps 的副本。或How To Display Content Based on Closest Lat/Long to Entered Address

         

    但是由于功能以不同的方式使用,我发布了我的答案,以帮助你做你原本打算做的事情。如果您需要arePointsNear功能,请随意提供答案。

    我希望这有帮助!