2010-09-23 3 views
3

Мне нужно рассчитать границы заданного центра и уровня масштабирования.Вычислить границы центра и масштабирования (API Карт Google v3)

Я предполагаю, что смогу временно установить центр карты и увеличить масштаб и вызвать map.getBounds(), но я бы предпочел не делать этого (мне нужно было бы отключить/снова включить несколько обработчиков событий).

Кто-нибудь знает, как это сделать в v3?

ответ

9

Это использует немного mootools, поэтому вам нужно будет отредактировать код, чтобы использовать его в других библиотеках (должно быть достаточно просто).

/** 
* Calculates the bounds this map would display at a given zoom level. 
* 
* @member google.maps.Map 
* @method boundsAt 
* @param {Number}     zoom   Zoom level to use for calculation. 
* @param {google.maps.LatLng}  [center]  May be set to specify a different center than the current map center. 
* @param {google.maps.Projection} [projection] May be set to use a different projection than that returned by this.getProjection(). 
* @param {Element}    [div]  May be set to specify a different map viewport than this.getDiv() (only used to get dimensions). 
* @return {google.maps.LatLngBounds} the calculated bounds. 
* 
* @example 
* var bounds = map.boundsAt(5); // same as map.boundsAt(5, map.getCenter(), map.getProjection(), map.getDiv()); 
*/ 
google.maps.Map.prototype.boundsAt = function (zoom, center, projection, div) { 
    var p = projection || this.getProjection(); 
    if (!p) return undefined; 
    var d = $(div || this.getDiv()); 
    var zf = Math.pow(2, zoom) * 2; 
    var dw = d.getStyle('width').toInt()/zf; 
    var dh = d.getStyle('height').toInt()/zf; 
    var cpx = p.fromLatLngToPoint(center || this.getCenter()); 
    return new google.maps.LatLngBounds(
     p.fromPointToLatLng(new google.maps.Point(cpx.x - dw, cpx.y + dh)), 
     p.fromPointToLatLng(new google.maps.Point(cpx.x + dw, cpx.y - dh))); 
} 
+0

Извините за задержку парней - я забыл о этот вопрос :) – giorgiga

+0

Спасибо большое! Оно работает!!! – Roki

+0

Просьба показать, как сделать полный рабочий пример, например, начиная с https://developers.google.com/maps/documentation/javascript/examples/groundoverlay-simple –

0

Каков ваш прецедент?

Вы можете вычислить это в v2 API:

map.getBoundsZoomLevel(bounds);

Однако нет никакого способа сделать это в v3 API.

+0

Спасибо, Broady - Я знаю, что v3 API не имеет встроенный метод для делать это :) Прецедент будет немного сложнее тоже объяснить, но в конце концов мне просто нужно преобразовать {центр, масштабирование } к объекту LatLngBounds ... в любом случае я сейчас нахожусь на полпути: я опубликую любой успех, который получаю (когда у меня будет время вернуться к этому проекту карты google) – giorgiga

Смежные вопросы