Sie können das dragend
Ereignis anhören. Wenn die Karte außerhalb der zulässigen Grenzen gezogen wird, verschieben Sie sie wieder hinein. Sie können Ihre zulässigen Grenzen in einem LatLngBounds
Objekt definieren und dann mithilfe der contains()
Methode überprüfen, ob sich das neue Lat / Lng-Zentrum innerhalb der Grenzen befindet.
Sie können die Zoomstufe auch sehr einfach einschränken.
Betrachten Sie das folgende Beispiel: Fiddle Demo
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps JavaScript API v3 Example: Limit Panning and Zoom</title>
<script type="text/javascript"
src="http://maps.google.com/maps/api/js?sensor=false"></script>
</head>
<body>
<div id="map" style="width: 400px; height: 300px;"></div>
<script type="text/javascript">
// This is the minimum zoom level that we'll allow
var minZoomLevel = 5;
var map = new google.maps.Map(document.getElementById('map'), {
zoom: minZoomLevel,
center: new google.maps.LatLng(38.50, -90.50),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
// Bounds for North America
var strictBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(28.70, -127.50),
new google.maps.LatLng(48.85, -55.90)
);
// Listen for the dragend event
google.maps.event.addListener(map, 'dragend', function() {
if (strictBounds.contains(map.getCenter())) return;
// We're out of bounds - Move the map back within the bounds
var c = map.getCenter(),
x = c.lng(),
y = c.lat(),
maxX = strictBounds.getNorthEast().lng(),
maxY = strictBounds.getNorthEast().lat(),
minX = strictBounds.getSouthWest().lng(),
minY = strictBounds.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 google.maps.LatLng(y, x));
});
// Limit the zoom level
google.maps.event.addListener(map, 'zoom_changed', function() {
if (map.getZoom() < minZoomLevel) map.setZoom(minZoomLevel);
});
</script>
</body>
</html>
Screenshot aus dem obigen Beispiel. In diesem Fall kann der Benutzer nicht weiter nach Süden oder Fernost ziehen:
if (x < minX) x = minX;
undif (x > maxX) x = maxX;
nicht ausschließen? Warum zentrieren Sie die Leinwand auf minX / maxX- und maxX / maxY-Koordinaten, obwohl sie keine Koordinaten der Mitte sind?dragend
Ereignisses, das Siedraggable: false
auf einer Karteninstanz verwenden könnten ( Arbeitsbeispiel )center_changed
Event wechseltedragend
.Eine bessere Möglichkeit, die Zoomstufe einzuschränken, besteht darin, die Optionen
minZoom
/maxZoom
zu verwenden, anstatt auf Ereignisse zu reagieren.Oder die Optionen können während der Karteninitialisierung angegeben werden, z.
Siehe: Google Maps JavaScript API V3-Referenz
quelle
Gute Nachrichten. Ab der Version 3.35 der Maps JavaScript API, die am 14. Februar 2019 gestartet wurde, können Sie eine neue
restriction
Option verwenden, um das Ansichtsfenster der Karte einzuschränken.Laut Dokumentation
Quelle: https://developers.google.com/maps/documentation/javascript/reference/map#MapRestriction
Jetzt fügen Sie einfach eine Einschränkungsoption während einer Karteninitialisierung hinzu und das ist es. Schauen Sie sich das folgende Beispiel an, das das Ansichtsfenster auf die Schweiz beschränkt
Ich hoffe das hilft!
quelle
So begrenzen Sie den Zoom auf Version 3 +. Fügen Sie in Ihrer Karteneinstellung die Standardzoomstufe hinzu, und die Zoomstufen minZoom oder maxZoom (oder beide, falls erforderlich) liegen zwischen 0 und 19. Sie müssen die Deaktivierungszoomstufe angeben, wenn eine Einschränkung erforderlich ist. Alle unterscheiden zwischen Groß- und Kleinschreibung!
quelle
Viel besserer Weg, um den Bereich zu begrenzen ... verwendet die enthält Logik von oben Poster.
quelle
this.googleMap
stattmap
für den zweiten Hörer hinzu? Sollte auch nichtdragStart
seindragStartCenter
? Was ist zuletztmapBounds
?Dies kann verwendet werden, um die Karte an einem bestimmten Ort neu zu zentrieren. Welches ist, was ich brauchte.
quelle
quelle
Hier ist meine Variante, um das Problem der Einschränkung des sichtbaren Bereichs zu lösen.
strictBounds
ist ein Objekt vomnew google.maps.LatLngBounds()
Typ.self.gmap
speichert ein Google Map-Objekt (new google.maps.Map()
).Es funktioniert wirklich, aber vergessen Sie nicht nur, die Hämorrhoiden beim Überschreiten der 0. Meridiane und Parallelen zu berücksichtigen, wenn Ihre Grenzen sie abdecken.
quelle
Aus irgendeinem Grund
hat bei mir nicht funktioniert (vielleicht ein Problem der südlichen Hemisphäre). Ich musste es ändern zu:
Hoffe es wird jemandem helfen.
quelle
Eine Lösung ist wie, wenn Sie die spezifische lat / lng kennen.
Wenn Sie kein bestimmtes Lat / Lng haben
oder
quelle
Ab Mitte 2016 gibt es keine offizielle Möglichkeit, den sichtbaren Bereich einzuschränken. Die meisten Ad-hoc-Lösungen zum Einschränken der Grenzen weisen jedoch einen Fehler auf, da sie die Grenzen nicht genau auf die Kartenansicht beschränken, sondern nur einschränken, wenn die Mitte der Karte außerhalb der angegebenen Grenzen liegt. Wenn Sie die Grenzen auf das Überlagern von Bildern wie mich beschränken möchten, kann dies zu einem Verhalten wie unten dargestellt führen, bei dem die Unterlagekarte unter unserer Bildüberlagerung sichtbar ist:
Um dieses Problem zu beheben, habe ich eine Bibliothek erstellt , die die Grenzen erfolgreich einschränkt, damit Sie nicht aus dem Overlay herausschwenken können.
Wie bei anderen vorhandenen Lösungen tritt jedoch ein "vibrierendes" Problem auf. Wenn der Benutzer die Karte aggressiv genug schwenkt, schwenkt die Karte nach dem Loslassen der linken Maustaste von selbst weiter und verlangsamt sich allmählich. Ich bringe die Karte immer wieder an die Grenzen zurück, aber das führt zu Vibrationen. Dieser Panning-Effekt kann derzeit nicht mit den von der Js-API bereitgestellten Mitteln gestoppt werden. Es scheint, dass wir erst dann ein reibungsloses Erlebnis schaffen können, wenn Google Unterstützung für etwas wie map.stopPanningAnimation () hinzufügt.
Beispiel unter Verwendung der erwähnten Bibliothek, die glatteste Erfahrung mit strengen Grenzen, die ich bekommen konnte:
Die Bibliothek kann auch die minimale Zoombeschränkung automatisch berechnen. Anschließend wird die Zoomstufe mit eingeschränkt
minZoom
des Kartenattributs eingeschränkt.Hoffentlich hilft dies jemandem, der eine Lösung sucht, die die vorgegebenen Grenzen vollständig einhält und nicht zulässt, dass sie aus ihnen herausschwenken.
quelle
Dies kann hilfreich sein.
Die Zoomstufe kann je nach Anforderung angepasst werden.
quelle
e.g. only between levels 6 and 9
, sondern legt die Standardzoomstufe fest und entfernt die Standardbenutzeroberfläche (dh+
/-
), die ein wenig übertrieben ist.