在 google 地图中的某个点查找对象

Find objects at a point in google maps

我正在使用多边形和圆形在 google 地图中添加感兴趣的区域。 在每个多边形和圆形中,我添加了一个 ID,以便在用户单击多边形或圆形时获得有关该区域的详细信息。 存在两个区域重叠的情况。通过单击公共区域,我可以获得 "above" 对象的 ID,但我无法获取位于 "below" 的对象的 ID。下面给出一个例子。

有没有办法获取重叠对象的 ID?

创建多边形和圆的代码如下。

function drawpolygonExersice(res, ExerciseID){
  var points = new Array();
  var ptn;

  for (var j=0;j<res.length/2;j++)
    {ptn = new google.maps.LatLng(res[2*j],res[2*j+1]);
      points.push(ptn);}
  var polygonExercise = new google.maps.Polygon({
    path: points,
    geodesic: true,
    strokeColor: 'red',
    strokeOpacity: 0.8,
    strokeWeight: 1,
    fillColor: "red",
    fillOpacity: 0.20,
    ID: ExerciseID,  //look up ID
    map: map
  });
   google.maps.event.addListener(polygonExercise, 'click', function(event) {
     alert(this.ID);
   });
  exerciseAreas.push(polygonExercise);  
}

function drawcircleExersice(res, ExerciseID) {

  var circleExercise = new google.maps.Circle ({
      center: new google.maps.LatLng(res[0],res[1]),
      radius: res[2] * 1852, //Nautical miles to meters
      geodesic: true,
      strokeColor: 'red',      
      strokeOpacity: 0.8,
      strokeWeight: 1,
      fillColor:'red',
      fillOpacity: 0.20,
      ID: ExerciseID,  //look up ID
      map: map
    });

   google.maps.event.addListener(circleExercise, 'click', function(event) {
     alert(this.ID);
   });
   exerciseAreas.push(circleExercise);
}

我看到的唯一方法是遍历所有形状并计算(通过几何库)形状是否包含单击的 latLng。预期的形状数量应该没有问题。

圆圈使用.computeDistanceBetween(clickedLatLng,circle.getCenter()),当结果为<=circle.getRadius()时,点击已经在圆圈上。

对于多边形,使用 .containsLocation(clickedLatLng,polygon),当它 returns true 点击已在多边形上。

演示:http://jsfiddle.net/doktormolle/qotg0o2x/