在谷歌地图 api v3 上旋转 .gif 图像?

Posted

技术标签:

【中文标题】在谷歌地图 api v3 上旋转 .gif 图像?【英文标题】:rotate a .gif image on google maps api v3? 【发布时间】:2016-12-07 23:50:30 【问题描述】:

我在这个问题上找到了很多答案,但没有一个在使用 .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 图像吗?

【问题讨论】:

感谢optimized 参数。让我开心。 【参考方案1】:

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

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

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

proof of concept fiddle proof of concept fiddle rotating a .png image

代码 sn-p:

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>

【讨论】:

感谢您的回复。有趣的。目前所有图像都是相同的(但旋转角度不同),所以为了实现这一点,我可以创建具有不同名称的相同 gif 的副本。有点笨拙的方式,但只要地图上没有很多图像是可行的 添加一个 GET 变量(什么都不做),例如 nonclumsy.gif?1 / nonclumsy.gif?2 / nonclumsy.gif?3 将帮助您复制 gif。仍然不是很好,因为浏览器会单独下载,但如果不是数千个...... 可以从 store_id 旋转吗?如果在地图上加载超过 10 个标记,则重复图像不好【参考方案2】:

另一种方法是使用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)';
    .

请参阅此demo pen 以获得更清晰的信息。

【讨论】:

以上是关于在谷歌地图 api v3 上旋转 .gif 图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置Map(),setVisible()4000/5000的标记而不会在谷歌地图api V3中失去性能?

如何使用 Google Maps JavaScript API v3 在谷歌地图中获取查看区域中心的坐标

在谷歌地图 api v3 中将地区、城市、州、国家/地区转换为纬度和经度?

在谷歌地图上显示风向

如何使用谷歌地图 api v3 旋转地图方向

谷歌地图 API V3 fitBounds() 不工作