2010-01-05 5 views
1

Vous vous demandez si quelqu'un pourrait fournir un exemple de configuration des extensions maximale et minimale à l'aide de GMaps2? Dans OpenLayers, voici comment cela est fait:Définition des limites maximales et minimales à l'aide de l'API Google Maps

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); 

Quel serait l'équivalent de GMaps2?

+0

Qu'entendez-vous exactement par étendue? Voulez-vous conserver la vue dans une certaine région? Ou restreindre les niveaux de zoom possibles? –

Répondre

2

Ce qui suit est l'équivalent 2.x API Google Maps pour limiter le balayage panoramique de la carte de limites prédéfinies:

// 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

Merci pour revenir à moi Chris et Daniel. Ce que je voulais dire par «extensions» est que lorsque le zoom est maximisé, la carte du monde ne correspond pas. Je ne veux pas voir 2, 3 ou même 4 continents d'Amérique du Nord et d'autres continents. Le monde est assez grand avec un seul. Lorsque je zoome, je veux définir une limite à laquelle on peut zoomer pour prendre en compte la résolution de nos données. Zoom trop loin renvoie des résultats en dehors de notre résolution de données. J'ai réussi à trouver une solution acceptable en limitant les niveaux de zoom. Quoi qu'il en soit, FWIW, voici ce que je suis venu. Il est un peu moins bavard mais ne fait pas exactement ce que Daniel fait dans son code:

//===== 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;} 
    } 

Je veux encore essayer le code de Daniel pour voir ce qu'il fait. Un merci spécial à vous d'avoir pris le temps d'écrire ceci Dan.

- = Al

+0

Alfonse, je suis content que vous ayez trouvé votre solution. Le code que j'ai posté ne limite pas le zoom, mais le panoramique gauche/droite, haut/bas. Fondamentalement, avec les coordonnées que j'ai utilisées, cela ne vous permet pas de quitter l'Amérique du Nord. Vous ne pourrez pas faire glisser la carte sur l'Europe, par exemple. Évidemment, vous pouvez utiliser toutes les coordonnées. Les contraintes que vous utilisez pour le zoom sont réellement recommandées pour être utilisées avec mon implémentation. –

+0

Merci Daniel .. Je vois ce que vous dites ... essayé de le mettre en œuvre comme vous le suggérez mais n'a pas réussi. Il y a d'autres choses qui se passent dans mon code et je n'ai pas encore eu le temps de le résoudre. Je vais vous laisser savoir comment ça se passe. – Alfonse

Questions connexes