Restrict camera view and bounds
Stay organized with collections
Save and categorize content based on your preferences.
It may be desirable for you to control the camera's pan, maximum altitude, or to create latitude and longitude boundaries restricting a user's movement in a given map. You can do this using camera restrictions.
The following example shows a map with location boundaries set to limit the camera's movement:
Restrict map bounds
You can restrict the geographical boundaries of the camera by setting the
bounds option.
The following code sample demonstrates restricting the map bounds:
TypeScript
asyncfunctioninit():Promise<void>{ awaitgoogle.maps.importLibrary('maps3d'); constmap3DElement=document.querySelector('gmp-map-3d')!; // Restrict the position of the camera to the specified bounds. map3DElement.bounds={ south:-48.3, west:163.56, north:-32.86, east:-180, }; } voidinit();
JavaScript
asyncfunctioninit(){ awaitgoogle.maps.importLibrary('maps3d'); constmap3DElement=document.querySelector('gmp-map-3d'); // Restrict the position of the camera to the specified bounds. map3DElement.bounds={ south:-48.3, west:163.56, north:-32.86, east:-180, }; } voidinit();
CSS
html, body{ height:100%; margin:0; padding:0; }
HTML
<html>
<head>
<title>Map</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map-3d
id="gmp-map-3d"
center="-47.1375,169.5235,150000"
tilt="67.5"
mode="hybrid"
gesture-handling="cooperative">
</gmp-map-3d>
</body>
</html>Restrict the camera
You can restrict the movement of the camera by setting any of the following options:
maxAltitudeminAltitudemaxHeadingminHeadingmaxTiltminTilt
The following code sample demonstrates restricting the camera:
// Restrict the movement of the camera.
map3DElement.maxAltitude=1000;
map3DElement.minAltitude=500;
map3DElement.maxTilt=55;
map3DElement.minTilt=35;
Restrict map and camera bounds
You can simultaneously restrict both map and camera bounds. The following code sample demonstrates restricting both map and camera boundaries:
// Restrict the movement of the camera.
map3DElement.maxAltitude=1000;
map3DElement.minAltitude=500;
map3DElement.maxTilt=55;
map3DElement.minTilt=35;
// Restrict the position of the camera to the specified bounds.
map3DElement.bounds={
north:20.93,
west:-156.38,
south:20.90,
east:-156.31,
};
Control gesture handling
When a user scrolls a page containing a map, the scrolling action can
inadvertently cause the map to zoom. You can control this behavior by setting
the gestureHandling map option.
gestureHandling: cooperative
"Cooperative" gesture handling allows the user to scroll the page without
impacting the map's zoom or pan. To zoom, users can use the controls, two-finger
gestures (for touchscreen devices), or by holding CMD/CTRL while scrolling.
The following code demonstrates setting gesture handling to "cooperative":
<gmp-map-3d
id="gmp-map-3d"
center="20.92,-156.36,500"
tilt="67.5"
mode="hybrid"
gesture-handling="cooperative">
</gmp-map-3d>
gestureHandling: greedy
"Greedy" gesture handling reacts to all scroll events and touch gestures.
gestureHandling: auto
"Auto" gesture handling changes the behavior of the map depending on whether or
not the map is contained in an <iframe>, and whether the page is scrollable.
- If the map is within an
<iframe>, gesture handling will be "cooperative". - If the map isn't within an
<iframe>, gesture handling will be "greedy".