我创建了一个自定义的 OverlayView,它使用类似于在此处找到的方法来容纳一个画布元素。一切都在相应地工作,但我正在寻找一些关于如何处理可以在较低缩放级别看到多个版本的情况的建议。目前我像这样翻译我的画布元素:
this.topLeft = new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getSouthWest().lng());
var divTopLeft = projection.fromLatLngToDivPixel(this.topLeft);
this.canvas.style[this.cssTransformPrefix] = 'translate(' + Math.floor(divTopLeft.x) + 'px,' + Math.floor(divTopLeft.y) + 'px)';
要定位和绘制我的自定义标记之一,我使用以下方法:
var scale = Math.pow(2, map.zoom);
var offset = mapProjection.fromLatLngToPoint(this.centerPoint);
this.pxTopLeft.x = Math.floor(offset.x*scale);
this.pxTopLeft.y = Math.floor(offset.y*scale);
var worldPoint = mapProjection.fromLatLngToPoint(marker.position());
marker.draw(Math.floor(-this.pxTopLeft.x + worldPoint.x*scale), Math.floor(-this.pxTopLeft.y + worldPoint.y*scale));
使用这种行为,当用户平移地图时,我的画布渲染标记将从一个世界实例捕捉到下一个世界实例。相反,我想要实现的是类似于原生谷歌标记行为的东西,其中标记为世界的每个表示绘制一次。不幸的是,无法使用原生 Google 标记。我怎样才能做到这一点?