2

我有一个谷歌地图,我用它来让人们推荐位置。目前,我使用创建的 LatLng 在地图中心放置一个可拖动标记

myPosition = frmMap.getCenter();

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

我一直在寻找解决方案,但没有提出任何建议。我唯一的想法是根据 Center 和 NortEast 做一些数学运算,但如果可能的话,我宁愿基于像素的绝对位置?

4

1 回答 1

4

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

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

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 。此外,单击此处以获取地图 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/

于 2013-10-18T18:02:51.147 回答