1

这是我用来显示标记和 infoWindows 的代码。它运行良好。

mapOptions = {
  zoom: zoom,
  center: getMyCompanyCoordinates,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map($(this)[0], mapOptions)

  infowindow = new google.maps.InfoWindow()
  createMarker = (company)->
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(company.latitude, company.longitude),
        map: map
      })

      google.maps.event.addListener(marker, 'click', ()->
        infowindow.setContent('content')
        infowindow.open(map,this)
      )
      return marker


  firstCompanyMarker = createMarker(companiesData[0])
  createMarker(companiesData[i]) for i in [1..companiesData.length-1] by 1
  google.maps.event.trigger(firstCompanyMarker, 'click')

但是,有一个问题。默认 (firstCompanyMarker) 标记的 infoWindow 未按我的需要显示。它正在穿过地图的顶部边缘。

我试图移动中心,但没有结果。

 lat += 100 #or lat -=100. Anyway it does NOT work
 long += 100 # it does work but it's moving the center 
             #of the map to the left or the right and it's not what I need
 mapOptions = {
      zoom: zoom,
      center: new google.maps.LatLng(lat, long),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }

你的想法?如何使 infoWindow 显示在地图的中心并且不越过它的顶部边缘?

在此处输入图像描述

4

3 回答 3

1

在“infowindow.setContent('content')”之后添加以下行

map.setCenter(marker.lat-100, marker.lng-100);

然而,这不是一个真正的解决方案。根据经验,我可以告诉您,您的地图对于标准信息窗口来说非常少。你真的有两个选择来解决这个问题:

1) 增加地图的大小,以便默认信息窗口将显示地图中心的标记或

2)使用自定义信息窗口并使其比默认窗口小很多

希望有帮助!

于 2012-08-26T02:17:37.963 回答
0
map.setCenter(marker.lat, marker.lng- (popup.getheight/2));

这应该有效。

于 2014-05-26T03:26:34.207 回答
0

为了任何绊倒这个的人,迟到的答案。我遇到了同样的问题,并注意到如果我关闭 infoWindow 并单击标记,infoWindow 将打开并平移到正确的位置。tilesloaded关键不是触发点击,而是在打开初始 infoWindow 之前等待事件。

// Trigger click after tiles are loaded so auto-pan positions infoWindow correctly
google.maps.event.addListenerOnce( map, 'tilesloaded', function () {
    infoWindow.open( map, marker );
} );
于 2015-11-18T20:16:09.947 回答