Получить видимые на карте объекты (не работает)
Пытаюсь получить видимые на карте объекты, выдает ошибку "Uncaught Error: geometry.component.pixelContains: Для рассчета вхождения точки геометрия должна быть добавлена на карту.". Как исправить? Новичок в YM API.
Метки в нескольких городах, сначала задаю центр карты так, чтобы вписались все метки, если разрешена геолокация - центрирую карту по расположению пользователя. Пытаюсь сделать второй setBounds, чтобы затем в карту вписывались все видимые на текущий момент точки.
//prepare variables
let placemarks = [];
//add map
let myMap = new ymaps.Map("yamap", {
center: [0,0],
zoom: 11
},{
autoFitToViewport: 'always'
});
//get all warehouses from the left list
let els = $('.shlist .whitem');
els = els.length > 0 ? els : $('.whcont .whitem');
//iterate over warehouses, add a placemark for each one
els.each(function(){
//prepare variables
let eid = $(this).attr('data-id');
let coord = $(this).attr('data-coord').split(',');
//add placemark
let myPlacemark = new ymaps.Placemark([coord[0],coord[1]],{},{
id: eid,
iconLayout: 'default#image',
iconImageHref: thmeurl+'/img/placemark.svg',
iconImageSize: [25,30],
iconImageOffset: [-12, -21]
});
myMap.geoObjects.add(myPlacemark);
placemarks[eid] = (myPlacemark);
});
//center the map to show all placemarks
myMap.setBounds(myMap.geoObjects.getBounds(),{checkZoomRange:true, zoomMargin:9});
//ig geolocation is on, center map on user's location
ymaps.geolocation.get({}).then(function(result){
let crd = result.geoObjects.get(0).geometry.getCoordinates();
myMap.setCenter(crd, 10);
}, function(){
myMap.setBounds(myMap.geoObjects.getBounds(),{checkZoomRange:true, zoomMargin:9});
});
//get visible objects
//выдает ошибку "Uncaught Error: geometry.component.pixelContains: Для рассчета вхождения точки геометрия должна быть добавлена на карту."
let visibleGeoObjects = ymaps.geoQuery(myMap.geoObjects).searchIntersect(myMap.getBounds());
console.log(visibleGeoObjects);
Ответы (1 шт):
Автор решения: dekho
→ Ссылка
Объекты карты нужно создавать с помощью функции geoQuery, как в этом примере. Тогда можно будет получить список видимых объектов таким образом:
const result = ymaps.geoQuery(myMap.geoObjects).searchIntersect(myMap);