Existe-t-il un moyen de définir un niveau de zoom maximal pour fitBounds()
? Mon problème est que lorsque la carte n'est alimentée qu'à un seul emplacement, elle effectue un zoom avant aussi loin que possible, ce qui sort vraiment la carte de son contexte et la rend inutile. Peut-être que je prends la mauvaise approche?
Merci d'avance!
google-maps
fitbounds
Codey W
la source
la source
Réponses:
J'aime la solution de mrt (surtout quand vous ne savez pas combien de points vous allez cartographier ou ajuster), sauf qu'elle jette le marqueur pour qu'il ne soit plus au centre de la carte. Je l'ai simplement prolongé d'un point supplémentaire en soustrayant également 0,01 de la lat et de la longueur, de sorte qu'il garde le marqueur au centre. Fonctionne très bien, merci mrt!
la source
fitBounds()
méthode est que le zoom se produit de manière asynchrone: stackoverflow.com/questions/2989858/…Vous pouvez configurer votre carte avec
maxZoom
dans leMapOptions
(api-reference) comme ceci:Cela empêcherait la carte de zoomer plus profondément lors de l'utilisation
fitBounds()
et supprimerait même les niveaux de zoom de la commande de zoom.la source
maxZoom
avant d'ajuster les limites, puis le désactiver à nouveau à l'aidemap.setOptions({ maxZoom: undefined })
de l'idle
événement déclenché en modifiant les limites. Cela empêche l'effet de zoom avant ou arrière de réinitialiser le zoom dans l'idle
événement.Une autre solution consiste à étendre les limites si vous détectez qu'elles sont trop petites avant d'exécuter fitBounds ():
la source
L'utilisation de l'option MaxZoom fonctionne mieux pour ne pas zoomer pour se rapprocher des marques que vous avez.
la source
Une fois que vous avez ajouté toutes les limites réelles, ajoutez ces lignes
il obtient le centre des limites réelles puis ajoute deux points supplémentaires un au nord-est et un au sud-ouest de votre centre
Cela définit efficacement le zoom minimum, changez la valeur du décalage pour augmenter ou diminuer le zoom
la source
S'il s'agit d'un seul emplacement, vous pouvez utiliser setCenter () et setZoom () à la place.
la source
tu peux utiliser
de cette façon, vous définissez les propriétés de la carte après l'initialisation de la carte .... vous pouvez les définir autant de fois que vous le souhaitez ... mais dans votre cas ... vous pouvez les définir avant fitBounds ()
bonne chance, rarutu
la source
La façon dont j'empêche la carte de zoomer trop loin est d'ajouter cette ligne de code:
Juste après cette ligne:
N'hésitez pas à modifier le niveau de zoom au niveau auquel vous ne souhaitez pas que la carte fasse un zoom avant.
Si vous avez des problèmes ou des questions, laissez-moi simplement un commentaire sur le billet de blog que j'ai écrit à ce sujet sur http://icode4you.net/creating-your-own-store-locator-map-how-to-prevent-the- carte-à-partir-de-zoom-avant-trop-près-sur-un-marqueur-unique
la source
J'aime vraiment la solution de mrt et cela fonctionne parfaitement si vous n'avez toujours qu'un seul point à travailler. J'ai cependant constaté que si le cadre de délimitation n'était pas basé sur un point, mais que les points étaient très proches les uns des autres, cela pourrait toujours entraîner un zoom trop important sur la carte.
Voici un moyen de vérifier d'abord si les points sont à une distance définie les uns des autres, puis s'ils sont plus petits que cette distance minimale, étendez les limites de cette distance minimale:
J'espère que cela aide quelqu'un!
la source
Cela vous donne un contrôle direct sur le zoom maximum autorisé sur l'ajustement des limites.
la source
Quant à moi, je le résous en créant un événement inactif après fitBounds. Fonctionne parfaitement. Je suppose que c'est l'une des solutions les plus propres ici
la source
J'ai résolu avec ce morceau, puisque Google Maps V3 est piloté par les événements:
vous pouvez dire à l'API de réinitialiser le zoom à une valeur appropriée lorsque l' événement zoom_changed se déclenche:
J'ai utilisé intial pour que la carte ne zoome pas trop en chargeant lorsque les éventuels fitBounds sont permus, sans cela, tout événement de zoom supérieur à 11 serait impossible pour l'utilisateur.
la source
Après avoir appelé la
fitBounds()
méthode, essayez à nouveau de configurer le niveau de zoom. Cela forcera la carte à être à ce niveau de zoom tout en étant centrée au bon endroit.la source
J'ai une soulution basée sur la limitation du zoom maximum lors de l'ajustement des limites. Fonctionne pour moi (testé sur Win 7 - IE 9, FF 13, Chrome 19):
la source
Et .. en voici un autre.
Même idée que mrt et Ryan, mais
(*) Remarque: Si la boîte est déjà assez grande, ajouter ces deux points supplémentaires ne devrait avoir aucun effet. Nous n'avons donc pas besoin de vérification supplémentaire.
EDIT: Je ne sais pas exactement si mon calcul de ratio est correct, étant donné que nous avons une projection Mercator. Je pourrais rééditer ceci.
la source
Son déjà répondu ici Google Maps v3: Enforcing min. niveau de zoom lors de l'utilisation de fitBounds cela fonctionne comme prévu :) donc maintenant, si le zoom après les limites d'ajustement est inférieur, disons 13, vous pouvez définir un nouveau zoom que vous préférez
la source
Voici ma solution, qui fonctionne également lorsque deux marqueurs sont très proches. Le niveau de zoom maximal effectif est le même dans les deux situations. On ne finit donc pas par zoomer inutilement vers l'arrière, lorsqu'il y a plus d'un marqueur
L'effet, encore une fois, est d'assurer un zoom maximum, sans utiliser l'option maxZoom, ce qui a pour effet probablement indésirable de rendre impossible pour l'utilisateur de zoomer plus loin que le niveau maxZoom avec la commande de zoom
J'ai calculé au préalable maxLat, minLat, maxLng et minLng ...
la source