我使用SVG路径表示法来创建使用谷歌地图API V3折线沿着标记。 有时,增加了一些标记之后,他们还只停留在地图上显示。 如果我平移地图,甚至只是1px的,他们再次显示。
SVG标记停止显示增加了一些后,
SVG标记出锅后再次出现
这发生在FF,Safari浏览器,Chrome和iPhone浏览器。
这里是我的折线代码:
var lineSymbol = {
path: g.SymbolPath.FORWARD_OPEN_ARROW,
scale:1.5
};
polyOptions = {
strokeColor: '#0026b3',
strokeOpacity: 1.0,
strokeWeight: 1,
geodesic: true,
icons: [{
icon: lineSymbol,
repeat: '100px'
}],
zIndex: 10
};
polyLine = new g.Polyline(polyOptions);
polyLine.setMap(map);
而对于SVG标记的代码:
var path = polyLine.getPath();
path.push(event.latLng);
var icon = {
path: "M68.501,23.781 43.752,48.529 66.918,71.695 66.918,120.362 70.085,120.362 70.085,71.694 93.249,48.529",
fillColor: iconColor,
fillOpacity: .8,
anchor: new g.Point(70.085, 120.362),
strokeWeight: 0,
scale:.4
};
var marker = new g.Marker({
position: event.latLng,
map: map,
draggable: false,
icon: icon,
title: title,
zIndex : -20
});
任何想法,为什么我的标记只是消失时,他们实际上是在地图上? 提前致谢。
这里是一个小提琴在那里你可以重现该问题: http://jsfiddle.net/upsidown/gNQRB/
这里是一个YT视频来说明这个问题: https://www.youtube.com/watch?v=uGAiwAuasmU
编辑:
bug报告已在谷歌创建了: http://code.google.com/p/gmaps-api-issues/issues/detail?id=5351
作品对我来说,与Chrome浏览器(Windows)中版本26.0.1410.64测试
然而,几件事尝试:
- 删除标记zIndex的 ,你是故意要隐瞒它下? 看:
zIndex -20
- 删除fillOpacity
- 你说,移动地图它带给可见? 你已经在做map.setCenter(); 但它不是足够? 你可以交替触发图中的事件之一,当你所以你不需要移动它,就像添加标记:
google.maps.event.trigger(map, 'drag');
- 如果你里面存储阵列和循环他们通过所有标志当新的一个添加? 并触发其
google.maps.event.trigger(marker, 'icon_changed');
- 与使用相同的代码PNG格式,看看问题是否与SVG只
这里是JS提琴 ,我尝试了一些事情。
编辑:
经过多次试验,我注意到,使用map.panTo(latLng);
代替map.setCenter(latLng);
使得SVG标记,以正确绘制。 另外,如果你不想平移到中心,利用map.panBy(x, y);
为1个像素,然后返回到之前的中心(快)可能有解决这个问题的类似的效果。
这里是JS提琴地看到,在行动。
我不得不使用PNG用于标记标记的图标同样的问题,fitBounds经过一些时间(一些标记消失,当我放大它们出现),只有dissappears如果我做这个标记拖拽元素。
我尝试这样做:map.panTo(map.getCenter()); 设置标记拖拽元素后
而现在它工作正常。 http://www.mapgolfcourse.com/view/2.php?card=no
这似乎在th V3实现中的错误。 米格尔
我有一种同样的麻烦。 约10 100标志物在启动显示。 缩放,然后进行平移或每标记要么glitched或隐藏。
找出它的图标文件的SVG加价是造成了麻烦。
车用:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
修正了:
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg">
感谢您的@MaunoVähä答案“哑剧”!
我还设置“优化:假”。 伟大的作品。
下面是一个使用动画SVG文件我的代码:
var marker;
var map;
var image = {
url: "http://localhost:8080/images/animarker.svg",
size: new google.maps.Size(100, 100),
origin: new google.maps.Point(0, 0),
anchor: new google.maps.Point(42, 42),
scaledSize: new google.maps.Size(100, 100)
};
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
zoom: 17,
center: {lat: 59.325, lng: 18.070}
});
marker = new google.maps.Marker({
map: map,
icon: image,
draggable: false,
optimized: false,
position: {lat: 59.327, lng: 18.067}
});
}
有人以上建议由1个像素,然后再返回到平移。 这是一个供参考的是panBy(0,0)的作品也具有更加简单且没有视觉假象的优势:
使用tomchentw有同样的问题/反应-谷歌-地图。 使用onMapIdle panBy(0,0),()解决了这一问题。 如果你不使用包我想添加地图“空闲”事件与panBy(0,0)监听器会工作。