3
GLatLngBoundsを使用して、マップ上のすべてのマーカーを表示しようとしています。以下は私がやっていることの小さな例です。GLatLngBounds - センターとズームのレベルが正しくない
INV.createMap = function(containerId) {
var map = null;
var geocoder = null;
var bounds = new GLatLngBounds();
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById(containerId), {
size: new GSize(600, 300)
});
map.setCenter(new GLatLng(54.729378425601766, 25.279541015625), 15);
map.addControl(new GSmallZoomControl());
geocoder = new GClientGeocoder();
}
return {
markAdress: function(address, infoContentHtml) {
if (map !== null && geocoder !== null) {
geocoder.getLatLng(address, function(point) {
if (point) {
var marker = new GMarker(point);
GEvent.addListener(marker, 'mouseover', function() {
if (!map.getInfoWindow().getPoint().equals(this.getLatLng())) {
this.openInfoWindowHtml(infoContentHtml);
}
});
map.addOverlay(marker);
bounds.extend(point);
}
});
}
},
finalize: function() {
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
}
};
};
使用法:
var m = INV.createMap('whatever');
var addresses = ...
for (var i = 0, l = addresses.length; i < l; i++) {
m.markAdress('address...', 'htmlInfo...');
}
m.finalize();
問題はズームレベルが完全に間違っていることである(waaayあまりにズームアウト)とマーカーが何らかの理由で、地図の左上隅に表示されます(ただし、すべてのそれらが見える)。
私は間違っていますか?
EDIT:この質問は無視してください。私は愚かな間違いを犯しました.GClientGeocoderが非同期要求を行って、finalize()メソッドが早すぎて呼び出されるという事実を見落としました。
あなたが引用した行は、初期化段階にあります。コードを読み終えたら、最終的なズームレベルを実際に設定する行が見つかります。 あなたがリンクしているチュートリアルは、setCenterコールでcenterとzoomの両方を設定するのではなく、setZoomを呼び出すという細部を除いて、Reeがやっていることと変わりがないようです。 FTR、私は難なくsetCenter(中央、ズーム)フォームを使用します。たぶん完全な自己完結型のテストケースが問題の診断に役立つでしょう。 – Stewart