OpenLayers 5.3 Как я могу установить квадратный BBOX в ol.layer.Image? - PullRequest
0 голосов
/ 14 ноября 2018

Это код: он работает, но возвращается с BBOX, определенным как прямоугольник

 function createLayer () {

        var e = 20037508.34;
        var tileGrid = new ol.tilegrid.TileGrid({
            origin: [-e, -e],
            extent: [-e, -e, e, e],
            resolutions: [168e3, 84e3, 42e3, 21e3, 14e3, 5600, 2800, 1400, 560, 280, 140, 70, 28, 14, 7, 5.6, 4.2, 2.8, 1.4, .56, .42, .28],
        });

        var layers = [
            new ol.layer.Tile({
              source: new ol.source.OSM()
            }),
            new ol.layer.Image({
                source: new ol.source.ImageWMS({
                    url: 'hidelink',
                    params: {
                        'LAYERS':  'pianificazione:v_ps_timewms_vinc_archeologico_vigente',
                        'SRS':'EPSG:900913',
                        'FORMAT': 'image/png; mode=8bit',
                        'VERSION': '1.1.0',
                        'WIDTH': '256',
                        'HEIGHT': '256'
                    },
                tileGrid: tileGrid
              })
            })
          ];
        return layers;
    }

Мне нужно, чтобы этот вызов rest вернулся с изображением в квадратном BBOX.Как я могу сделать?

1 Ответ

0 голосов
/ 14 ноября 2018

ImageWMS установит BBOX для заполнения области просмотра, TileWMS настроит BBOX для заполнения плитки, в обоих случаях любая ширина WIDTH и HEIGHT, указанная вами, будет переопределена.Поскольку вы настроили сетку плиток, я подозреваю, что вам нужны плитки

        new ol.layer.Tile({
            source: new ol.source.TileWMS({
                url: 'hidelink',
                params: {
                    'LAYERS':  'pianificazione:v_ps_timewms_vinc_archeologico_vigente',
                    'SRS':'EPSG:900913',
                    'FORMAT': 'image/png; mode=8bit',
                    'VERSION': '1.1.0'
                },
            tileGrid: tileGrid
          })

Что не работает?С этим параметром слоя я предполагаю, что вы используете одну из муниципальных служб Италии.Я нашел этот для Firenze, и этот код возвращает мне 256 x 256 плиток

<!DOCTYPE html>
<html>
  <head>
    <title>WMS Test</title>
    <link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css" type="text/css">
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>

 function createLayer () {

        var e = 20037508.34;
        var tileGrid = new ol.tilegrid.TileGrid({
            origin: [-e, -e],
            extent: [-e, -e, e, e],
            resolutions: [168e3, 84e3, 42e3, 21e3, 14e3, 5600, 2800, 1400, 560, 280, 140, 70, 28, 14, 7, 5.6, 4.2, 2.8, 1.4, .56, .42, .28],
        });

        var layers = [
            new ol.layer.Tile({
              source: new ol.source.OSM()
            }),
            new ol.layer.Tile({
                source: new ol.source.TileWMS({
                    url: 'http://tms.comune.fi.it/geowebcache/service/wms',
                    params: {
                        'LAYERS':  'pianificazione:v_ps_timewms_vinc_archeologico_vigente',
                        'SRS':'EPSG:900913',
                        'FORMAT': 'image/png; mode=8bit',
                        'VERSION': '1.1.0'
                    },
                tileGrid: tileGrid
              })
            })
          ];
        return layers;
    }

    var map = new ol.Map({
        layers: createLayer (),
        target: "map",
        view: new ol.View({
            center: ol.proj.fromLonLat([11.23, 43.77]),
            zoom: 12
        })
    });

    </script>
  </body>
</html>
...