Внутренний контур полигона вырезается, только если добавлять его как одиночный объект

Рейтинг: 0Ответов: 1Опубликовано: 20.03.2023

Если полигон с внутренним контуром добавляю на карту так:

      var myGeoObject = new ymaps.GeoObject({
        geometry: {
          type: "Polygon",
          coordinates: [
                        [
                         [53.34, 43.07], [65.92, 81.91], [50.40, 98.90]
                        ], 
                        [
                         [53.50, 82.48], [58.42, 87.57], [58.05, 75.04]
                        ]
                       ]
        }
      });
      myMap.geoObjects.add(myGeoObject);

То он отображается правильно (с внутренним вырезанным контуром).

Если же добавляю его через ObjectManager, то внутренний контур не вырезается:

objectManagerSourses.add({
    type: 'Feature',
    id: 7777,
    geometry: {
        type: 'Polygon',
        coordinates: [
                      [
                       [53.34, 43.07], [65.92, 81.91], [50.40, 98.90]
                      ], 
                      [
                       [53.34, 43.07], [65.92, 81.91], [50.40, 98.90]
                      ]
                     ]
    }
});
myMap.geoObjects.add(objectManagerSourses);

Как можно добавить на карту большое количество подобных полигонов?

Ответы

▲ 0Принят

Прописывайте полигонам fillRule как evenOdd. Для обычных полигонов API Яндекс Карт это значение и так задаётся по умолчанию, но в ObjectManager оно по дефолту почему-то nonZero.

objectManagerSourses.add({
    type: 'Feature',
    id: 7777,
    geometry: {
        type: 'Polygon',
        coordinates: [
            [[53.34, 43.07], [65.92, 81.91], [50.40, 98.90]], 
            [[53.34, 43.07], [65.92, 81.91], [50.40, 98.90]]
            ],
        fillRule: "evenOdd"
    }
});

По работе же с большим числом объектов у Яндекса в документации описано несколько возможных вариантов - выбирайте, какой вам реализовать будет удобней.