【问题标题】:Google maps V3: prevent marker scaling谷歌地图 V3:防止标记缩放
【发布时间】:2013-03-27 18:57:25
【问题描述】:

我有一张谷歌地图,上面有一个标记。

我需要标记为固定大小,例如 10x10 像素,并且即使我放大或缩小也可以重新邮寄。

这是我现在拥有的(不是工作):

var marker = new google.maps.Marker({
    position: circleCenter,
    map: googleMap,
    icon: {
        path: google.maps.SymbolPath.CIRCLE,
        fillOpacity: 0.5,
        fillColor: 'ff0000',
        strokeWeight: 10,
        size: 5
    }
});

这是否可以在更改地图缩放时阻止缩放其大小的标记?

【问题讨论】:

  • 这个答案有帮助吗? stackoverflow.com/a/13385598/875127
  • 感谢您的链接。噗……我希望有一个开箱即用的解决方案,比如一个简单的属性。如果我添加这个回调并且我在地图上有大约 30 个标记,我会让浏览器变得非常慢:(
  • 是的,我不知道更简单的方法。不过会很好!我不认为 30 个标记会太糟糕......
  • 我在地图上玩了 6 个圆圈,它已经开始延迟响应(firefox)。无论如何,作为一个黑客,我创建了一个半径为 5 米的google.maps.Circle,并且它保持了这个比例。但这并不能解决问题

标签: javascript google-maps google-maps-api-3


【解决方案1】:

Google 没有现成的方法来阻止标记缩放。

您可以使用Ground Overlay 在地图上设置固定区域,然后附加图像。地面覆盖的诀窍是您必须知道边界对象的坐标,并且您可能必须想出一些计算边界的方法。在这个例子中,我只是将一个中心点扩展为一个矩形。

您还会失去其他标记功能,因为此方法不使用标记对象(例如拖动、动画等),但叠加层确实具有点击事件。

这是一个概念证明:http://jsfiddle.net/bryan_weaver/4rxqQ/

相关代码:

function initialize() {
    var map;
    var centerPosition = new google.maps.LatLng(38.713107, -90.42984);
    var options = {
        zoom: 9,
        center: centerPosition,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map($('#map')[0], options);

    var icon = 'https://www.google.com/mapfiles/marker_black.png';
    var iconBounds = constructBounds(38.713107, -90.42984);
    var staticOverlay = new google.maps.GroundOverlay(icon, iconBounds);
    staticOverlay.setMap(map);
}

function constructBounds(lat, lng){
    var sw = new google.maps.LatLng(lat - .03, lng - .025)
    var ne = new google.maps.LatLng(lat + .03, lng + .025) 
    return new google.maps.LatLngBounds(sw, ne);
}

【讨论】:

  • “Google 没有现成的方法来阻止标记缩放。”这很有趣,因为我现在正在努力打开标记的缩放。放大/缩小时,我的制造商不会改变大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2014-07-10
  • 1970-01-01
相关资源
最近更新 更多