在地图窗口的左上角放置一个可拖动的地图标记

时间:2013-10-18 12:45:44

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

我有一张谷歌地图,我用它来让人们建议地点。目前,我使用使用

创建的LatLng在地图中心放置一个可拖动标记

myPosition = frmMap.getCenter();

我想做的是把它放在地图边缘的某个地方,也许直接放在缩放控制下(与你在变焦控制上方看到黄色街景人的方式不同)。

我已经找到了解决方案,但我没想出任何东西。我唯一的想法是根据Center和NortEast做一些数学运算,但如果可能的话,我宁愿基于像素获得绝对位置?

1 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,计算标记位于缩放控件下的latlng值不仅麻烦,而且如果用户开始在地图中平移/缩放(如标记将移动到latlng占用它的任何地方。

我的建议是使用Maps API提供的Drawing Library。这基本上为您提供了一个绘图控件,可以将标记添加到地图中(其他叠加也是可能的:cirlce,polygon,polyline,rectangle)。和Google地图提供的任何控件一样,您可以通过在选项中进行设置将其严格定位到您喜欢的任何位置。下面的代码段描述了如何初始化绘图库:

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

drawingManager.setMap(map);

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

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

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

如果你想看到它的实际效果,我会在这个例子中放一个小jsfiddle。另外,单击here以获取地图api的绘图库的完整参考。

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

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

`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/