Запрос слишком большой или недействительный BBOX - PullRequest
0 голосов
/ 11 мая 2018

Я работаю над геопорталом и хочу использовать общедоступный сервис WMS. Я использую Openlayers 4.6.4. Когда я настраиваю свой слой следующим образом:

new ol.layer.Tile({
  source: new ol.source.TileWMS({
    url: 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wms',
    params: {
      'LAYERS': 'Actueel_ortho25',
      'TILED': true,
      'FORMAT': 'image/jpeg',
      'SRS': 'EPSG:3857'
    },
    serverType: 'geoserver'
  })
})

Openlayers создает этот URL для получения плитки:

https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fjpeg&TRANSPARENT=true&LAYERS=Actueel_ortho25&TILED=true&SRS=EPSG%3A3857&WIDTH=256&HEIGHT=256&CRS=EPSG%3A3857&STYLES=&BBOX=665613.642307315%2C6602019.007047243%2C665919.3904204557%2C6602324.755160384

Но затем я получил следующее сообщение от сервера:

<?xml version="1.0"?>
<ServiceExceptionReport version="1.3.0"
  xmlns="http://www.opengis.net/ogc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/ogc
http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd">
    <ServiceException>Request too large or invalid BBOX.</ServiceException>
</ServiceExceptionReport>

У меня двоякий вопрос:

  1. Какой правильный формат BBOX?
  2. Как заставить openlayers использовать этот правильный формат?

1 Ответ

0 голосов
/ 12 мая 2018

3 вопроса:

  • должен быть установлен экстент, чтобы избежать нежелательных вызовов в WMS, когда он выходит за пределы экстента (плохая практика, но не причина сбоя)
  • вызов к WMS с 'TILED': true предполагает, что GeoWebCache настроен в GeoServer (и сбой подтверждает, что он не был настроен, поскольку вы не являетесь его владельцем, вам следует избегать этой опции; в противном случае, это хорошая практика)
  • есть микс версии WMS (1.3.0 и 1.1.1). Это нелегко вывести, см. Свойства params в https://openlayers.org/en/latest/apidoc/ol.source.TileWMS.html TLDR: вызовы WMS по умолчанию в библиотеке OpenLayers - 1.3.0. Итак, 'SRS': 'EPSG:3857' должно быть 'CRS': 'EPSG:3857'

Ниже приведена демонстрация кода (проверено и прокомментировано, прежде чем ответить)

<!DOCTYPE html>
<html>
  <head>
    <title>WMS debug bad extent and geowebcache unwanted</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>
      var map = new ol.Map({
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          })
        ],
        target: 'map',
        view: new ol.View({
          center: ol.proj.fromLonLat([5.38722, 52.25865]),
          zoom: 6
        })
      });
      var wms = new ol.layer.Tile({
        source: new ol.source.TileWMS({
          url: 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wms',
          params: {
            'LAYERS': 'Actueel_ortho25',
            // Commented because it's supposed to speed up thing as long as it provides call to GeoWebcache to cache WMS as tiles behind the scene but it's what cause the error you got
            //'TILED': true,
            'FORMAT': 'image/jpeg',
            // As default WMS calls in OpenLayers library are 1.3.0, you should use CRS and not CRS
            'CRS': 'EPSG:3857'
          },
          serverType: 'geoserver'
        }),
        // To avoid blank background from your WMS to spread on the world and avoid making WMS call where there is no photos
        // Extent deduced from https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
        extent: [-184488.85727, 6113595.5499, 1383893.54886, 7580462.49937]
      });
      map.addLayer(wms);
    </script>
  </body>
</html>
...