Merge pull request #9137 from jahow/add-view-constrain-extent-2
Refactor the way view constraints are handled & add a view extent constraint
This commit is contained in:
@@ -21,8 +21,6 @@ tags: "center, rotation, openstreetmap"
|
||||
<div class="padding-bottom"></div>
|
||||
<div class="center"></div>
|
||||
</div>
|
||||
<button id="zoomtoswitzerlandbest">Zoom to Switzerland</button> (best fit),<br/>
|
||||
<button id="zoomtoswitzerlandconstrained">Zoom to Switzerland</button> (respect resolution constraint).<br/>
|
||||
<button id="zoomtoswitzerlandnearest">Zoom to Switzerland</button> (nearest),<br/>
|
||||
<button id="zoomtoswitzerland">Zoom to Switzerland</button> (best fit).<br/>
|
||||
<button id="zoomtolausanne">Zoom to Lausanne</button> (with min resolution),<br/>
|
||||
<button id="centerlausanne">Center on Lausanne</button>
|
||||
|
||||
@@ -47,29 +47,14 @@ const map = new Map({
|
||||
view: view
|
||||
});
|
||||
|
||||
const zoomtoswitzerlandbest = document.getElementById('zoomtoswitzerlandbest');
|
||||
zoomtoswitzerlandbest.addEventListener('click', function() {
|
||||
const feature = source.getFeatures()[0];
|
||||
const polygon = /** @type {import("../src/ol/geom/SimpleGeometry.js").default} */ (feature.getGeometry());
|
||||
view.fit(polygon, {padding: [170, 50, 30, 150], constrainResolution: false});
|
||||
}, false);
|
||||
|
||||
const zoomtoswitzerlandconstrained =
|
||||
document.getElementById('zoomtoswitzerlandconstrained');
|
||||
zoomtoswitzerlandconstrained.addEventListener('click', function() {
|
||||
const zoomtoswitzerland =
|
||||
document.getElementById('zoomtoswitzerland');
|
||||
zoomtoswitzerland.addEventListener('click', function() {
|
||||
const feature = source.getFeatures()[0];
|
||||
const polygon = /** @type {import("../src/ol/geom/SimpleGeometry.js").default} */ (feature.getGeometry());
|
||||
view.fit(polygon, {padding: [170, 50, 30, 150]});
|
||||
}, false);
|
||||
|
||||
const zoomtoswitzerlandnearest =
|
||||
document.getElementById('zoomtoswitzerlandnearest');
|
||||
zoomtoswitzerlandnearest.addEventListener('click', function() {
|
||||
const feature = source.getFeatures()[0];
|
||||
const polygon = /** @type {import("../src/ol/geom/SimpleGeometry.js").default} */ (feature.getGeometry());
|
||||
view.fit(polygon, {padding: [170, 50, 30, 150], nearest: true});
|
||||
}, false);
|
||||
|
||||
const zoomtolausanne = document.getElementById('zoomtolausanne');
|
||||
zoomtolausanne.addEventListener('click', function() {
|
||||
const feature = source.getFeatures()[1];
|
||||
|
||||
9
examples/extent-constrained.html
Normal file
9
examples/extent-constrained.html
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
layout: example.html
|
||||
title: Constrained Extent
|
||||
shortdesc: Example of a view with a constrained extent.
|
||||
docs: >
|
||||
This map has a view that is constrained in an extent. This is done using the `extent` view option. Please note that specifying `constrainOnlyCenter: true` would only apply the extent restriction to the view center.
|
||||
tags: "view, extent, constrain, restrict"
|
||||
---
|
||||
<div id="map" class="map"></div>
|
||||
25
examples/extent-constrained.js
Normal file
25
examples/extent-constrained.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import Map from '../src/ol/Map.js';
|
||||
import View from '../src/ol/View.js';
|
||||
import TileLayer from '../src/ol/layer/Tile.js';
|
||||
import OSM from '../src/ol/source/OSM.js';
|
||||
import {defaults as defaultControls} from '../src/ol/control/util';
|
||||
import ZoomSlider from '../src/ol/control/ZoomSlider';
|
||||
|
||||
const view = new View({
|
||||
center: [328627.563458, 5921296.662223],
|
||||
zoom: 8,
|
||||
extent: [-572513.341856, 5211017.966314,
|
||||
916327.095083, 6636950.728974]
|
||||
});
|
||||
|
||||
new Map({
|
||||
layers: [
|
||||
new TileLayer({
|
||||
source: new OSM()
|
||||
})
|
||||
],
|
||||
keyboardEventTarget: document,
|
||||
target: 'map',
|
||||
view: view,
|
||||
controls: defaultControls().extend([new ZoomSlider()])
|
||||
});
|
||||
@@ -4,16 +4,11 @@ title: Interaction Options
|
||||
shortdesc: Shows interaction options for custom scroll and zoom behavior.
|
||||
docs: >
|
||||
This example uses a custom `ol/interaction/defaults` configuration:
|
||||
|
||||
* By default, wheel/trackpad zoom and drag panning is always active, which
|
||||
can be unexpected on pages with a lot of scrollable content and an embedded
|
||||
map. To perform wheel/trackpad zoom and drag-pan actions only when the map
|
||||
has the focus, set `onFocusOnly: true` as option. This requires a map div
|
||||
with a `tabindex` attribute set.
|
||||
* By default, pinch-zoom and wheel/trackpad zoom interactions can leave the
|
||||
map at fractional zoom levels. If instead you want to constrain
|
||||
wheel/trackpad zooming to integer zoom levels, set
|
||||
`constrainResolution: true`.
|
||||
by default, wheel/trackpad zoom and drag panning is always active, which
|
||||
can be unexpected on pages with a lot of scrollable content and an embedded
|
||||
map. To perform wheel/trackpad zoom and drag-pan actions only when the map
|
||||
has the focus, set `onFocusOnly: true` as option. This requires a map div
|
||||
with a `tabindex` attribute set.
|
||||
tags: "trackpad, mousewheel, zoom, scroll, interaction, fractional"
|
||||
---
|
||||
<div tabindex="1" id="map" class="map"></div>
|
||||
|
||||
@@ -7,7 +7,7 @@ import OSM from '../src/ol/source/OSM.js';
|
||||
|
||||
const map = new Map({
|
||||
interactions: defaultInteractions({
|
||||
constrainResolution: true, onFocusOnly: true
|
||||
onFocusOnly: true
|
||||
}),
|
||||
layers: [
|
||||
new TileLayer({
|
||||
|
||||
@@ -203,7 +203,11 @@ const map = new Map({
|
||||
target: 'map',
|
||||
view: new View({
|
||||
center: [-10997148, 4569099],
|
||||
zoom: 4
|
||||
zoom: 4,
|
||||
minZoom: 1,
|
||||
extent: [-Infinity, -20048966.10, Infinity, 20048966.10],
|
||||
smoothExtentConstraint: false,
|
||||
smoothResolutionConstraint: false
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ shortdesc: Restrict pinch zooming to integer zoom levels.
|
||||
docs: >
|
||||
By default, the `ol/interaction/PinchZoom` can leave the map at fractional zoom levels.
|
||||
If instead you want to constrain pinch zooming to integer zoom levels, set
|
||||
<code>constrainResolution: true</code> when constructing the interaction.
|
||||
<code>constrainResolution: true</code> when constructing the view.
|
||||
tags: "pinch, zoom, interaction"
|
||||
---
|
||||
<div id="map" class="map"></div>
|
||||
|
||||
@@ -6,10 +6,8 @@ import OSM from '../src/ol/source/OSM.js';
|
||||
|
||||
|
||||
const map = new Map({
|
||||
interactions: defaultInteractions({pinchZoom: false}).extend([
|
||||
new PinchZoom({
|
||||
constrainResolution: true // force zooming to a integer zoom
|
||||
})
|
||||
interactions: defaultInteractions().extend([
|
||||
new PinchZoom()
|
||||
]),
|
||||
layers: [
|
||||
new TileLayer({
|
||||
@@ -19,6 +17,7 @@ const map = new Map({
|
||||
target: 'map',
|
||||
view: new View({
|
||||
center: [0, 0],
|
||||
zoom: 2
|
||||
zoom: 2,
|
||||
constrainResolution: true
|
||||
})
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user