在 google maps api v3 上旋转 .gif 图像?

IT技术 javascript image google-maps-api-3 rotation gif
2021-03-14 20:19:51

我在这个问题上找到了很多答案,但没有一个在使用 .gif 图像而不是标记时有效。要使用 .gif 图像(以及动画 gif),我使用代码(有效)

var image = {
  url: 'img/RedFlashYacht.gif',
  size: new google.maps.Size(75, 75),
  origin: new google.maps.Point(0, 0),
  anchor: new google.maps.Point(0, 32),
  scaledSize: new google.maps.Size(50, 50)
};
marker = new google.maps.Marker({
    position: pos , 
    map: map,
    icon: image,
    store_id: mkrID,
    optimized: false
}); 

//对于任何没有使用过 .gif 的人来说,'optimized: false' 这行很关键

我现在想要做的是旋转 gif 图像(到指定的角度,而不是持续旋转 [我可以做动画 gif])。尽管使用 'store_id: mkrID' 设置了图像的 ID,var mkrID 之前已创建,我可以使用代码 marker.get('store_id') 读取它,所以我知道它已设置。我无法使用 document.getElementById 访问图像。我也不能让任何谷歌地图 API 旋转示例代码工作。我发现的示例似乎适用于 v2 或与谷歌地图自己的标记有关,而不是使用 gif 的自定义图像。

有没有人能够在谷歌地图中旋转 gif 图像?

2个回答

标记的“store_id”属性不允许您访问包含图像的 DOM 元素。如果每个标记都有一个唯一的图标,您可以使用它的 URL 和 JQuery 来抓取它,然后对其应用 CSS 转换:

$('img[src="http://www.geocodezip.com/mapIcons/boat-10-64.gif"]').css({
  'transform': 'rotate(45deg)'
});

注意:这仅适用于带有optimized: false

代码片段:

function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.47949, -122.083168),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  var image = {
    url: 'http://www.geocodezip.com/mapIcons/boat-10-64.gif',
    size: new google.maps.Size(75, 75),
    origin: new google.maps.Point(0, 0),
    anchor: new google.maps.Point(0, 32),
    scaledSize: new google.maps.Size(50, 50)
  };
  var marker = new google.maps.Marker({
    position: map.getCenter(),
    map: map,
    icon: image,
    store_id: "mkrID",
    optimized: false
  });
  var rotationAngle = 10;
  google.maps.event.addListenerOnce(map, 'idle', function() {
    setInterval(function() {
      $('img[src="http://www.geocodezip.com/mapIcons/boat-10-64.gif"]').css({
        'transform': 'rotate(' + rotationAngle + 'deg)'
      });
      rotationAngle += 10;
    }, 1000);
  });
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map_canvas"></div>

添加一个GET变量(即什么都不做),如nonclumsy.gif?1/ nonclumsy.gif?2/nonclumsy.gif?3将帮助您复制GIF文件。仍然不是很好,因为浏览器会单独下载所有内容,但如果不是成千上万...
2021-04-24 20:19:51
谢谢你的回复。有趣的。目前,所有图像都将相同(但旋转角度不同),因此为此,我可以创建具有不同名称的相同 gif 的副本。有点笨拙的方法,但只要地图上没有很多图像可以放置
2021-05-02 20:19:51
可以从 store_id 旋转吗?如果地图加载超过 10 个标记,则重复图像不好
2021-05-15 20:19:51

另一种方法是使用Custom Overlay

    .
    .
    var overlay = new google.maps.OverlayView();
    overlay.draw = function() {
        this.getPanes().markerLayer.id = 'markerLayer';
    }
    overlay.setMap(map);
    .
    .
    var deg = 270;
    document.querySelector("#markerLayer img").style.transform = 'rotate(' + deg + 'deg)';
    .

请参阅此演示笔以获得更清晰的信息。