1

我正在尝试对可编辑多边形的移动进行限制。我想防止内部路径被拉到外部路径之外。我正在使用谷歌地图 google.maps.geometry.poly.containsLocation 函数来检查新点是否在外部边界内,但如果它在外部,我找不到阻止动作发生的方法。

我已尝试返回 false 但多边形仍会转到新位置

google.maps.event.addListener(poly.getPaths().getArray()[1], 'set_at', function() {
  return keepInside(this, arguments[0], arguments[1]);
});

function keepInside(polygon, index, new_point)
{
    outer_edge = new google.maps.Polygon({
      paths: polygon.getArray(),
    });
    is_in = google.maps.geometry.poly.containsLocation(new_point,outer_edge);
    if(!is_in)
    {
        return false;
    }
    return true;
}
4

1 回答 1

0

您与原始代码非常接近。您可以将点设置回其原始位置,而不是返回 false。此外,传递给set_at侦听器的第二个参数不是新点,而是旧点。尝试这个:

google.maps.event.addListener(poly.getPaths().getArray()[1], 'set_at', function(index, oldPoint) {
  return keepInside(this, index, this.getAt(index), oldPoint);
});

function keepInside(polygon, index, newPoint, oldPoint)
{
    outer_edge = new google.maps.Polygon({
      paths: polygon.getArray(),
    });
    if(!google.maps.geometry.poly.containsLocation(newPoint, outer_edge))
    {
        polygon.setAt(index, oldPoint);
    }
}
于 2014-01-24T18:27:46.223 回答