如何在Google Maps API V3上旋转GIF图像?

6

我在这个问题上找到了很多答案,但没有一个可以在使用.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,变量mkrID事先创建好了,并且我可以通过代码marker.get('store_id')读取它,所以我知道已经设置了ID,但我无法通过document.getElementById访问该图像。google maps API旋转示例代码也无法正常工作。我发现的示例似乎是针对v2或与谷歌地图自己的标记相关的,并非使用gif的自定义图像。

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


感谢您提供optimized参数,让我的一天变得更加美好。 - shukshin.ivan
2个回答

9

标记的"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>


1
感谢回复。很有趣。目前所有的图像都将是相同的(但旋转角度不同),因此为了使其工作,我可以创建具有不同名称的相同gif的副本。这是有点笨拙的方式,但只要在地图上放置的图像不多,就可以做到。 - Mike Scott
添加一个没有用途的 GET 变量,比如 nonclumsy.gif?1 / nonclumsy.gif?2 / nonclumsy.gif?3,可以帮助您复制 GIF。这仍然不是很好,因为浏览器会单独下载所有 GIF,但如果它们不是成千上万的... - benzkji
可以从store_id旋转吗?如果在地图上加载超过10个标记,重复的图像不好。 - Nugka

0

另一种方法是使用自定义覆盖层

    .
    .
    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)';
    .

请查看此演示文稿以获得更清晰的了解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接