GLatLngBounds - неверный центр и уровень масштабирования - PullRequest
3 голосов
/ 02 июня 2009

Я пытаюсь использовать 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();

Проблема в том, что уровень масштабирования совершенно неправильный (слишком большой масштаб), а маркеры почему-то появляются в левом верхнем углу карты (но все они видны).

Что я делаю не так?

РЕДАКТИРОВАТЬ: игнорировать этот вопрос. Я сделал глупую ошибку - я упустил из виду тот факт, что GClientGeocoder делает асинхронные запросы, поэтому метод finalize () вызывается слишком рано.

1 Ответ

1 голос
/ 02 июня 2009

Последний аргумент вызова функции ниже указывает уровень масштабирования:

map.setCenter(new GLatLng(54.729378425601766, 25.279541015625), 15);

Эта статья немного говорит о масштабировании. Так что уровень масштабирования слишком высокий.

Далее В этом руководстве рассказывается, как настроить масштабирование карты для правильного отображения набора маркеров.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...