0

私はいくつかのGoogleMapsAPI 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

現在のマップ境界を拡張してすべてのマーカーを含めるが、マーカーが1つしかない場合、境界はマーカーがマップ境界の境界にあるように拡張されます。

よろしく

于 2012-11-28T14:44:14.063 に答える