简体   繁体   English

地图不会达到最小缩放级别 openlayers6

[英]Map not going to minimum zoom level openlayers6

I'm showing an image that has different layers using openlayers.我正在使用 openlayers 显示具有不同图层的图像。 It has 9 zoom levels with 0 being the minimum and 8 being the highest.它有 9 个缩放级别,其中 0 为最小值,8 为最高。 But when the map loads, it starts with zoom level 2 and it is not going below 2. I tried setting the zoom level below 2 by using view.setZoom() method, but it's not working.但是当地图加载时,它从缩放级别 2 开始,并且不会低于 2。我尝试使用 view.setZoom() 方法将缩放级别设置为低于 2,但它不起作用。 view.getMinZoom() is returning value as 0 which is correct. view.getMinZoom() 返回值为 0,这是正确的。

The code is mentioned below:代码如下:

HTML DIV: HTML DIV:

<div id="map" class="map" width="100%" height="100%" style="position: absolute; top: 0; left: 0; bottom: 0; right: 0;"></div>

JS CODE: JS代码:


let tileSize = [500, 500];
let zoomLevels = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let resolutions = getResolutions(0.2496, zoomLevels);
let imageShape = getImageShape(0.2496, 500, 160, 500, 144);
let projection = getProjection(imageShapeIhc);
let view = getView(projection, resolutions, imageShape, 0);
let url = 'some_url';
let layer = getLayer(tileSize, projection, resolutions, url);
let slidemap = getMap(view, layer, 'map');
let maxZoom = zoomLevels.length - 1;

slidemap.addControl(
          new ol.control.ScaleLine({
              units: "metric",
              minWidth: 100, 
          })
      );

      slidemap.getView().fit(layer.getExtent());

function getResolutions(uperpixel, zoomLevels) {
          let resolutions = [];
          (zoomLevels).forEach((level, index) => {
              resolutions.push(uperpixel * Math.pow(2, parseInt(level)));
          });
          resolutions = resolutions.reverse();
          return resolutions;
      }

      function getImageShape(uperpixel, tile_width, x_max, tile_height, y_max) {
          let imageWidth, imageHeight;

          imageWidth = uperpixel * tile_width * x_max;
          imageHeight = uperpixel * tile_height * y_max;

          return [imageWidth, imageHeight];
      }

      function getProjection(imageShape) {
          let projection = new ol.proj.Projection({
              code: 'some_code',
              units: 'microns',
              extent: [0, 0, imageShape[0], imageShape[1]],
              metersPerUnit: 0.000001,
              global: true,
              getPointResolution: function getPointResolution(resolution, point) {
                                    return resolution;
                                  },
          });
          return projection;
      }

      function getView(projection, resolutions, imageShape, rotation) {

          let maxZoom = (resolutions.length - 1);
          let view = new ol.View({
              projection: projection,
              extent: projection.getExtent(),
              center: imageShape,
              zoom: 0,
              maxResolution: resolutions[0],
              maxZoom: maxZoom,
              rotation: ((rotation * Math.PI) / 180),
              constrainResolution: true,
          });

          return view;
      }

      function getLayer(tileSize, projection, resolutions, url) {

          let layer = new ol.layer.Tile({
              extent: projection.getExtent(),
              renderMode: "vector",
              source: new ol.source.TileImage({
                  tileGrid: new ol.tilegrid.TileGrid({
                      extent: projection.getExtent(),
                      origin: [0, projection.getExtent()[3]],
                      resolutions: resolutions,
                      tileSize: tileSize,
                  }),
                  projection: projection,
                  url: url,
                  wrapX: false,
                  crossOrigin: null
              }),
          });

          return layer;
      }

      function getMap(view, layer, target) {

          let slidemap = new ol.Map({
              controls: [],
              target: target,
              layers: [
                  layer,
              ],
              view: view,
              keyboardEventTarget: document,
              loadTilesWhileAnimating: true,
              loadTilesWhileInteracting: true
          });

          return slidemap;
      }

constrainOnlyCenter: true worked for me. constrainOnlyCenter: true对我有用。 Thanks @Mike for your help.感谢@Mike 的帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM