0

我正在编写一些 Google Maps API v3 代码,它似乎与多个标记一起工作得很好,但是当只有 1 个时,它总是将标记绘制在地图的左上角,就在可见区域之外:

地图外观的屏幕截图

这是我的咖啡脚本代码:

class SimpleMap
    constructor: (div_id, lat = 40.783627, lng = -73.942583) ->
        # L.Icon.Default.imagePath = "/assets"
        @div_id = div_id
        @map_options = {center: new google.maps.LatLng(lat, lng), zoom: 10, mapTypeId: google.maps.MapTypeId.ROADMAP}
        @markers = []
        @map = new google.maps.Map document.getElementById(div_id), @map_options
        @loadMarkers() # gets them and plots on the map
        @autoFit()
    loadMarkers: ->
        items = $(".grid-item[data-lat], .apartment[data-lat]")
        for item in items
        console.log "Adding #{item}"
        @addMarker(item)
    @autoFit()

    addMarker: (item) ->
        console.log "Adding marker"
        lat = $(item).attr("data-lat")
        lng = $(item).attr("data-lng")

        console.log "#{lat}, #{lng}"

        marker = new google.maps.Marker(
            position: new google.maps.LatLng lat, lng
            map: @map
            title: "This is my marker"
        )

        @markers.push marker

    autoFit: ->
        bounds = new google.maps.LatLngBounds()
        for marker in @markers
            bounds.extend marker.getPosition()
        @map.fitBounds bounds
        # if you leave out the below, the marker appears int he same position as in the screenshot (slightly off screen) but at the max zoom level. 
        listener = google.maps.event.addListener(@map, "idle", =>
            @map.setZoom 9 if @map.getZoom() > 8
            @map.setCenter @markers[0].getPosition()
            google.maps.event.removeListener listener
        )

地图似乎忽略了我设置的尝试setCenter(@markers[0].getPosition())。有任何想法吗?

4

2 回答 2

0

在评论之后,仅当有 1 个标记时才会出现此问题。

基于这一事实,我将问题归结为这一行:

@map.fitBounds bounds

当只有 1 个标记时,边界的 NE 角等于 SW 角。

在这种情况下,当您使用边界作为 fitBounds() 参数时,我注意到了意外的交互。

建议:

仅当至少有 2 个标记时才使用 fitBounds()。

于 2012-11-28T13:29:56.813 回答
0

我相信问题出在:

    bounds = new google.maps.LatLngBounds()
    for marker in @markers
        bounds.extend marker.getPosition()
    @map.fitBounds bounds

如果您正在扩展当前地图边界以包含所有标记,但您只有一个标记,则边界将以标记位于地图限制边界中的方式扩展。

问候

于 2012-11-28T14:44:14.063 回答