ymaps API 3.0 utils
В 2 версии api карт был метод ymaps.util.bounds.containsPoint. Как его использовать в 3 версии api?
Не нашел этот метод в модуле utils, не нашел ничего в документации. Подскажите пожалуйста.
PS Попробывал сделать метод сам:
export function containsPoint(bounds: LngLatBounds, point: LngLat): boolean {
if (!bounds || !point) {
return false
}
const [southWest, northEast] = bounds
const [lonSouthWest, latSouthWest] = southWest
const [lonNorthEast, latNorthEast] = northEast
const [lon, lat] = point
return (lon >= lonSouthWest && lon <= lonNorthEast) &&
(lat >= latSouthWest && lat <= latNorthEast)
}
Создаю событие, для получения актуального bounds карты:
new ymaps3.YMapListener({
layerId: 'bounds',
onUpdate: handleUpdateBounds,
}),
Хендлер:
function handleUpdateBounds(updateObject: any): void {
if (updateObject?.type === 'update') {
console.log(containsPoint(updateObject?.location?.bounds, [33.586404, 45.13348]))
}
},
В updateObject?.location?.bound приходит странные данные, я не могу попасть в условия, когда функция вернет true. Где я ошибку совершаю?
Ответы (1 шт):
Автор решения: OKTAV
→ Ссылка
В АПИ 3.0 поменялся порядок координат, при получении гранц карты, так что у вас происходит неверное сравнение для широты. Модифицируйте код следующим образом (Переименовал переменные, чтобы было нагляднее):
export function containsPoint(bounds?: LngLatBounds, point?: LngLat): boolean {
if (!bounds || !point) return false;
const [[minLng, maxLat], [maxLng, minLat]] = bounds;
const [pointLng, pointLat] = point
return (
pointLng >= minLng
&& pointLng <= maxLng
&& pointLat >= minLat
&& pointLat <= maxLat
);
};