Несмотря на то, что iH8 прав, и в листе нет поддержки, чтобы проверить, содержится ли многоугольник внутри другого, я мог бы предложить, возможно, немного лучший ответ с примером, который следует ниже.
Да, GeoScript предлагает методы, которые мы могли бы использовать, чтобы проверить, содержится ли многоугольник внутри другого, но я считаю его сложным и их документация неполной и не такой интуитивной.
Именно поэтому для таких вещей я всегда использую JTS (или это порт JavaScript JSTS). Для того, чтобы использовать методы, которые имеют там листовку или Google Map координаты, вам сначала нужно будет преобразовать их в JSTS координат, просто:
function _leafletLatLng2JTS (polygon) {
var coordinates = [];
var length = 0;
if (polygon && polygon.length) {
length = polygon.length;
}
for (var i = 0; i < length; i++) {
if (polygon.length) {
coordinates.push(new jsts.geom.Coordinate(polygon[i].lat, polygon[i].lng));
}
}
return coordinates;
}
Теперь вам просто нужно создать два JSTS многоугольники и проверить, если один содержится внутри другой:
function _isWithin (firstLayer, secondLayer) {
var firstInput = _leafletLatLng2JTS(firstLayer.getLatLngs()[0]),
secondInput = _leafletLatLng2JTS(secondLayer.getLatLngs()[0]),
geometryFactory = new jsts.geom.GeometryFactory();
//add last point to the end to create a closed polygon
firstInput.push(firstInput[0]);
secondInput.push(secondInput[0]);
var firstPolygon = geometryFactory.createPolygon(firstInput),
secondPolygon = geometryFactory.createPolygon(secondInput);
var isWithin = firstPolygon.contains(secondPolygon);
return isWithin;
}
Как это работает с Leaflet.Draw плагин вы можете увидеть в этом jsFiddle я создал. В этом примере вы можете нарисовать только два слоя на карте (это работает для прямоугольников и многоугольников), а затем проверяет, содержится ли второй в первом. Если вы удалите один, все будут удалены, чтобы вы могли рисовать с самого начала.
ОБНОВЛЕНИЕ 30.10.2017.:
Теперь вы можете использовать turf.js для этих вещей (метод booleanContains)
Высоких, спасибо за продолжение. Это было недоступно в то время, когда я написал свой ответ. Довольно классный материал :) – iH8
не может использовать в ES6, есть ли вообще импорт в ES6? – AhammadaliPK
Вы проверили turf.js? Я обновил ответ. –