将可拖动的地图标记定位在地图窗口的左上角



我有一个谷歌地图,我用它来让人们建议位置。目前,我使用创建

myPosition = frmMap.getCenter();

我想做的是最初将其放置在地图边缘的某个位置,也许直接在缩放控件下(与您在缩放控件上方看到的黄色街景人的方式不同)。

我已经寻找了一个解决方案,但没有想出任何东西。我唯一的想法是基于中心和北东做一些数学运算,但如果可能的话,我宁愿有一个基于像素的绝对位置?

正如我在评论中提到的,计算标记在缩放控件下的位置的latlng值不仅很麻烦,而且如果用户开始在地图上平移/缩放,则可能不可行(因为标记将移动到latlng带走它的地方)。

我的建议是使用地图API提供的绘图库。这基本上为您提供了一个绘图控件,用于向地图添加标记(也可以使用其他叠加层:cirlce,多边形,折线,矩形)。就像谷歌地图提供的任何控件一样,你可以严格地将它们放置在任何你想要的地方 - 通过在选项中设置它。下面的代码片段描述了如何初始化图形库:

var drawingManager = new google.maps.drawing.DrawingManager({
    drawingControlOptions: {
        position: google.maps.ControlPosition.LEFT_BOTTOM,
        drawingModes: [
            google.maps.drawing.OverlayType.MARKER
        ]
    }
});
drawingManager.setMap(map);

这为您提供了启用Marker模式的绘图控件,并将其绑定到地图对象。

然后,您可以通过在markercomplete事件的drawingManager变量上添加侦听器来侦听何时添加标记。然后在回调中你可以得到添加的标记的位置,下面的代码片段演示了这一点:

google.maps.event.addListener(drawingManager, 'markercomplete', function (marker) {
    var position = marker.getPosition();        
});

如果你想看到它的实际效果,我用这个例子整理了一个小的jsfiddle。另外,单击此处获取地图 API 的绘图库的完整参考。

编辑:(地图加载时标记添加的启动模式,添加标记后隐藏绘图控件,制造商标记可拖动)

要启动绘制模式以在地图加载时添加标记,只需在drawingManager变量声明中设置 drawingMode 选项:

`drawingMode : google.maps.drawing.OverlayType.MARKER`

可以在markercomplete事件侦听器中隐藏绘图控件:

// To hide:
drawingManager.setOptions({
    drawingControl: false //changes UI back to regular map interactions
});
drawingManager.setDrawingMode(null); //hides controls

或者,如果以后在客户端交互中不再需要绘制控件,可以通过以下方式将其从地图完整中删除:

drawingManager.setMap(null);

然后,要使marker可拖动,只需在侦听器中设置该选项(因为回调函数中的marker无论如何都是谷歌地图标记对象 - 它引用添加到地图中的标记)。

marker.setOptions({
    draggable: true
});

然后,可以在dragend事件的标记对象上添加侦听器,以跟踪对位置的更改。

这是更新的小提琴:http://jsfiddle.net/svigna/J5zMg/3/

最新更新