谷歌地图 setCenter()

32
我正在使用谷歌地图。在我的代码中,我使用了setCenter()函数。我的问题是,标记始终位于地图区域的左上角(而非中心)。请告诉我如何解决这个问题?
我的代码片段是:
lat = 46.437857;
lon = -113.466797;

marker = new GMarker(new GLatLng(lat, lon));


var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(20, 40));
map.addControl(new GLargeMapControl3D(), topRight);
map.setCenter(new GLatLng(lat, lon), 5);

map.addOverlay(marker);

如果您发布了一些代码,很可能会有所帮助。 - Sam Holder
@hotcoder:你能否也展示一下地图画布的<div>,如果可能的话,还有初始化所有内容的完整JavaScript部分。看起来问题出在其他地方。 - Daniel Vassallo
在上面的图像中,您可以看到左上角有一个标记在伦敦。 - hotcoder
5个回答

29

@phoenix24的回答确实帮了我(顺便说一下,我的问题没有被他自己的答案解决)。 setCenter的正确参数是

map.setCenter({lat:LAT_VALUE, lng:LONG_VALUE});

谷歌文档

顺便提一下,如果你的变量是lat和lng,以下代码将起作用。

map.setCenter({lat:lat, lng:lng});

这实际上解决了我非常复杂的问题,所以我想在这里发布它。


15
 function resize() {
        var map_obj = document.getElementById("map_canvas");

      /*  map_obj.style.width = "500px";
        map_obj.style.height = "225px";*/
        if (map) {
            map.checkResize();
            map.panTo(new GLatLng(lat,lon));
        }
    }

<body onload="initialize()" onunload="GUnload()" onresize="resize()">
<div id="map_canvas" style="width: 100%; height: 100%">
</div>


3
谢谢您的帮助。 google.maps.event.trigger(map, 'resize'); map.panTo(new google.maps.LatLng(x, y)); 意思是:调整地图大小并将地图视野移动到经纬度为(x,y)的位置。 - P6345uk

6
对我来说,上述解决方案都不起作用,然后我尝试了以下方法。
map.setCenter(new google.maps.LatLng(lat, lng));

它按预期工作。


2
所有上述方法对我都无效,但这个可以。谢谢。 - Mathew Markose

5

我搜索了很久,最终发现ie需要知道地图的大小。将地图大小设置为与div大小相匹配。

map = new GMap2(document.getElementById("map_canvas2"), { size: new GSize(850, 600) });

<div id="map_canvas2" style="width: 850px; height: 600px">
</div>

1
在你的代码中,第几行。
map.setCenter(new GLatLng(lat, lon), 5);

setCenter方法只需要一个参数,用于指定纬度和经度的位置。你为什么要传递两个参数呢?

我建议你将其改为:

map.setCenter(new GLatLng(lat, lon));

1
@phoenix24:setCenter() 函数带有可选的缩放参数,所以这样做没有任何问题:http://code.google.com/apis/maps/documentation/reference.html#GMap2.setCenter - Daniel Vassallo
@Daniel,我认为GoogleMapsV3 API中的可选参数已被弃用。http://code.google.com/apis/maps/documentation/v3/reference.html - phoenix24
是的,实际上整个 API 在 V3 中发生了变化。然而 OP 正在使用 v2。这可以从以 G 前缀开头的“classes”推断出来。而 V3 则使用 google.maps 命名空间。 - Daniel Vassallo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接