【问题标题】:Google Maps Javascript API V3 - Markers cutted at tile bordersGoogle Maps Javascript API V3 - 在图块边界处切割的标记
【发布时间】:2013-03-01 04:00:35
【问题描述】:

我正在开发一款基于地理位置的游戏。带有标记的地图是它的核心组成部分之一。我们正在使用

  • Phonegap 2.2
  • 该问题仅在 Android 4.2.x 上出现(在 Nexus 4、7 和 10 上测试)
  • GoogleMaps API V3
  • 我们正在使用 PhonegapBuild 构建它
  • MarkerImages 与缩放图像一起使用(参见下面的代码)

不幸的是,我在地图上正确显示标记时遇到了一些问题。瓷砖周围似乎有一个小边框,并且标记在该边框处被切割。 该问题并不总是发生。

放大地图后,标记显示正确。

下面的代码显示了我们如何添加标记和定义地图。

map = new google.maps.Map(document.getElementById('map'), {
            zoom : 14,
            mapTypeControl : false,
            center : new google.maps.LatLng(lastPos.lat, lastPos.lon),
            mapTypeId : google.maps.MapTypeId.ROADMAP,
            streetViewControl : false,
            styles : [..]
        });

[some time later, after making sure map is initialized, is displayed and so on...]

var markerimage = {
    url : image,
    size : new google.maps.Size(60, 106),
    origin : new google.maps.Point(0, 0),
    anchor : new google.maps.Point(15, 53),
    scaledSize : new google.maps.Size(30, 53)
};
var marker = new google.maps.Marker({
    position : new google.maps.LatLng(spot.position.latitude, spot.position.longitude),
    icon : markerimage,
    optimized : true,
    clickable : true,
    draggable : false,
    map : map,
    zIndex: 2
});

有人知道这个问题或如何解决它吗?

谢谢!

编辑:

我只是尝试了一些东西。我禁用了应用程序中的所有 CSS 和所有不需要的 Javascript,我从标记和地图中删除了自定义样式。但是Bug还是出现了。地图大小现在设置为固定宽度和高度(按像素)。我真的被这个错误抓狂了!标记重复,被拉伸并被切割......! 我在下面附上了一个新的截图。

【问题讨论】:

  • 尝试删除 zIndex:2,地图实时渲染,可能加载顺序错误。 (即,正在放置标记,但地图图像尚未实际加载,直到它在视图中)
  • 嗯,但是蓝点并没有像它应该的那样在其他标记上。我已经通过在地图上添加一个监听器来工作了。每次缩放更改时,我都会调整地图的大小。然后所有标记都正确显示。但瓷砖之间的边界仍然存在。
  • 地图上没有样式时是否存在?
  • 是的。我在没有自定义样式和只有默认标记的情况下对其进行了测试。

标签: android cordova google-maps-api-3 google-maps-markers


【解决方案1】:

这很难调试,因为它很难重现 - 但我将尝试提供一些提示作为答案:

  • 带有图像的标记 (png, gif) 转为 optimized: false ,如果这无助于尝试删除 markerImages 并看看会发生什么。还有错误?

  • 从地图中删除自定义样式(尝试不使用自定义样式和标记图像,不使用自定义样式但使用标记图像等)

  • 尝试监听 tilesloaded、bounds_changed 等事件并使用调试打印来检查它们是否被触发。当他们这样做时:尝试在此之后初始化您的标记 - 首先是直接 - 然后是小超时

  • 尽量减少图像的缩放和特殊的锚设置等,尽量减少

  • 例如,通过将 markerImage(s) 附加到 DOM 来确保它们已加载。 (对于网络图像,这是正常且良好的做法 - 我不知道 phonegap 是否有不同之处)。

如果没有任何帮助 - 向 gooooogle 提问 :)

【讨论】:

  • Hej Mauno,感谢您的回答。我已经尝试过的第一个选项。但那里似乎存在内存泄漏。如果我们使用它,用户会报告应用程序在 android 和 ios 上的崩溃。不幸的是,第二种选择是不可能的,因为合作身份是我们的关键特征之一。但我会看看所有这些。感谢您的回答!
  • 是的,只是在黑暗中拍摄 - 总结一下:尝试通过尽可能简化来调试它(基本上从地图中暂时删除功能),然后(当它工作时) - 开始激活它看看并感受它的用途。 (一步一步)也许你可以找到出错的地方。 :)
  • 嘿 Mauno,感谢您的所有意见。实际上我可以将问题归结为:我删除了自定义标记,自定义地图样式没有成功,最后在事件瓦片加载后添加了所有标记。在桌面上一切正常。但是当我将它部署到 android 时,tileloaded 事件根本不会被触发!添加监听器后,地图甚至不再出现。所以那里似乎有问题。
  • 好吧,不,这不是问题所在。我没有初始化 gps 位置监听器。因此它没有显示地图。现在我只在tileloaded事件(被触发)之后显示标记,然后我将标记添加到地图中。但问题再次出现。我不明白你的最后一点,将图像附加到dom。你能举个例子吗?你有什么进一步的想法吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 2012-05-06
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多