#javascript #google-maps-markers
Вопрос:
Поэтому в настоящее время я использую хак-а-раунд для поворота пользовательского маркера изображения в картах Google.
Проблема, с которой я сталкиваюсь, заключается в определении размеров. В основном, если мое изображение png имеет ширину 400 пикселей и высоту 200 пикселей.
Когда вы поворачиваете это изображение так, чтобы ширина была вертикальной, оно отсекает изображение.
Как я предполагаю вписать изображение в рамки. Псевдокод, о котором я сначала думал, был чем-то вроде этого, но не смог заставить его работать.
const image = currentImage;
if(image.width > image.height){
//make bounding box of marker image.width squared
} else{
//make bounding box of marker image.height squared
}
Просто для справки, это моя функция поворота:
function rotate() {
const images = $("#map").find("img").get();
for (let i = 0; i < images.length; i ) {
if ($(images[i]).attr("src").replaceAll(window.location.origin, "") === currentMarker.itemSrc) {
$(images[i]).css({
'transform': 'rotate(' currentDeg 'deg)',
});
break;
}
}
}
Вот как я добавляю маркер: (не обращайте внимания на мои пользовательские поля, которые я добавил в объект маркера)
const markerIcon = {
url: currentImage.src "#" allMarkers.length,
// size: new google.maps.Size(?, ?),
// origin: new google.maps.Point(?, ?),
// anchor: new google.maps.Point(?, ?)
};
const marker = new google.maps.Marker({
position: mapsMouseEvent.latLng,
map: map,
draggable: true,
icon: markerIcon,
itemSrc: currentImage.src.replaceAll(window.location.origin, "") "#" allMarkers.length,
id: lat "," lng,
optimized: false
});
Комментарии:
1. Лучше всего просто повернуть и сохранить изображение маркера в формате png/jpg, прежде чем вставлять его в Google Maps JavaScript. Таким образом, вам не придется поворачивать его в своей реализации кода.
2. Да, это было бы лучше всего, но пользователю нужна возможность поворачивать маркер без необходимости удалять его и добавлять обратно с помощью этого нового поворота
Ответ №1:
Наконец-то я нашел решение. Этот код увеличит ваш контейнер DIV маркера и центрирует изображение.
Не беспокойтесь о пользовательском поле rotation
. Это поле не существует для пользовательского маркера изображения. Я создал его, чтобы отслеживать и обновлять поворот изображения.
const currentImage = whateverYourImageIs;
let markerSize;
let origin;
if(currentImage.naturalWidth > currentImage.naturalHeight){
markerSize = currentImage.naturalWidth;
origin = new google.maps.Point(0 , -(markerSize - currentImage.naturalHeight) / 2);
}else{
markerSize = currentImage.naturalHeight;
origin = new google.maps.Point(-(markerSize - currentImage.naturalWidth) / 2 , 0);
}
function createMarker(position, iconImage, label, rotation, markerSize, origin) {
const markerIcon = {
url: iconImage,
labelOrigin: new google.maps.Point(20, 20),
size: new google.maps.Size(markerSize, markerSize),
origin: origin,
anchor: new google.maps.Point(0,0)
};
return new google.maps.Marker({
position: position,
map: map,
draggable: true,
icon: markerIcon,
optimized: false,
label: label,
rotation: rotation
});
}