Установка максимальных и минимальных границ с помощью Google Maps API - PullRequest
1 голос
/ 05 января 2010

Интересно, кто-нибудь может привести пример того, как установить максимальный и минимальный экстенты с помощью GMaps2? В OpenLayers вот как это делается:

var point1 = new OpenLayers.Geometry.Point(7, 48);
point1.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); 

var point2 = new OpenLayers.Geometry.Point(11, 54);
point2.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")); 

var bounds = new OpenLayers.Bounds();
bounds.extend(point1);
bounds.extend(point2);
bounds.toBBOX(); 

map = new OpenLayers.Map("map", {
   maxExtent: bounds, 
   maxResolution:"auto", 
   maxZoomLevel: 8, 
   projection:"EPSG:900913",
   controls: []  
});
map.addLayer(new OpenLayers.Layer.OSM.Osmarender("Osmarender"));

map.zoomToMaxExtent();
//map.zoomToExtent(bounds);

Каким будет эквивалент GMaps2?

Ответы [ 2 ]

2 голосов
/ 06 января 2010

Ниже приведен эквивалент Google Maps API 2.x для ограничения панорамирования карты до заданных границ:

// Bounds for North America
var allowedBounds = new GLatLngBounds(new GLatLng(48.197218, -127.529297), 
                                      new GLatLng(28.72913, -68.818359));

function checkBounds() { 
    if (allowedBounds.contains(map.getCenter())) {
        return;
    }

    var c = map.getCenter();
    var x = c.lng();
    var y = c.lat();
    var maxX = allowedBounds.getNorthEast().lng();
    var maxY = allowedBounds.getNorthEast().lat();
    var minX = allowedBounds.getSouthWest().lng();
    var minY = allowedBounds.getSouthWest().lat();

    if (x < minX) {x = minX;}
    if (x > maxX) {x = maxX;}
    if (y < minY) {y = minY;}
    if (y > maxY) {y = maxY;}

    map.setCenter(new GLatLng(y, x));
}

GEvent.addListener(map, "move", function() { checkBounds(); });
0 голосов
/ 07 января 2010

Спасибо, что вернулись ко мне Крис и Даниэль. Под экстентами я имел в виду, что при увеличении масштаба карта мира не отображается. Я не хочу видеть 2, 3 или даже 4 Северной Америки и другие континенты. Мир достаточно велик только с одним. Когда я увеличиваю масштаб, я хочу установить предел того, насколько далеко можно увеличить масштаб, чтобы учесть наше разрешение данных. Слишком большое увеличение возвращает результаты за пределами нашего разрешения данных. Мне удалось найти приемлемое решение, ограничив уровни масштабирования. Во всяком случае, FWIW, вот что я придумал. Это немного менее многословно, но не совсем так, как Даниил в своем коде:

  //===== Restrict Zoom Levels =====     
  var mapTypes = map.getMapTypes();
  // Overwrite the getMinimumResolution() and getMaximumResolution() methods
  for (var i=0; i<mapTypes.length; i++) {
    mapTypes[i].getMinimumResolution = function() {return 2;}
    mapTypes[i].getMaximumResolution = function() {return 9;}
  }

Я все еще хочу попробовать код Дэниела, чтобы посмотреть, что он делает. Особая благодарность за то, что вы нашли время написать это, Дэн.

- = Al

...