Библиотека OpenLayers отображает слой MapServer WMS с ошибками

Я установил сервис MapServer WMS с точечным слоем. А теперь пытаюсь написать простой клиент WMS с использованием библиотеки OpenLayers. В общем, результаты есть, но есть проблемы. Некоторые точки меньше других. Я попытался подключиться к своему WMS-сервису с помощью QGIS и библиотеки Leaflet. Результаты отличные! Есть проблемы с OpenLayers lib. Что не так в этом примере?

На стороне клиента:

  • Openlayers v4.0.1
  • Windows 7 x64 с пакетом обновления 1 (SP1)
  • Chrome 57.0.2987.133 [Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, например Gecko) Chrome / 57.0.2987.133 Safari / 537.36]
  • IE 11.0.9600 [Mozilla / 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; rv: 11.0) как Gecko]
  • Firefox 51.0.1 [Mozilla / 5.0 (Windows NT 6.1; WOW64; rv: 51.0) Gecko / 20100101 Firefox / 51.0]

Сторона сервера:

  • ms4w 3.1.4

Живой пример: http://vector-sol.ru/apps/ol.html
Загрузите zip-архив с файлом формы, html-страницей и файлом конфигурации карты: http://map31.ru:8888/example.zip

html-страница:

<!doctype html>
<html lang="ru">
  <head>
    <link rel="stylesheet" href="https://openlayers.org/en/v4.0.1/css/ol.css" type="text/css">
    <style>
    html, body { 
        margin: 0; 
        padding: 0; 
        height:100%; 
    }
    #info { 
        position:absolute; 
        z-index:10; 
        background-color:yellow; 
        right: 0;
    }
    #map { 
        height:100%; 
    }
    </style>
    <script src="https://openlayers.org/en/v4.0.1/build/ol.js" type="text/javascript"></script>
    <title>OpenLayers example</title>
  </head>
  <body>
    <div id="map" class="map">
        <div id="info">OpenLayers example</div>
    </div>
    <script type="text/javascript"> 
      var map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          }),
          new ol.layer.Tile({
              source: new ol.source.TileWMS(({
                  projection: 'EPSG:4326',
                  url: 'http://map31.ru:8888/cgi-bin/mapserv.exe?map=../htdocs/mydemo/wms_ol.map',
                  params: { 'LAYERS': 'pop_places', 'TILED': true },
                  serverType: 'mapserver'
              }))
          })          
        ],
        view: new ol.View({
          center: ol.proj.fromLonLat([37.41, 8.82]),
          zoom: 4
        })
      });
    </script>
  </body>
</html>

MAP файл:

MAP

  NAME "WMS"
  IMAGETYPE      PNG
  EXTENT -180 -90 180 90 # Geographic
  SIZE 800 400
  IMAGECOLOR 220 221 239  

  SYMBOL
    NAME 'circle'
    TYPE ELLIPSE
    POINTS 1 1 END
    FILLED TRUE
  END 

  WEB
    METADATA
        wms_title                  "WMS Demo"
        wms_abstract               "Demo WMS Server"
        wms_onlineresource         "http://map31.ru:8888/cgi-bin/mapserv.exe?map=../htdocs/mydemo/wms_ol.map&"
        wms_srs                    "EPSG:4326"
        wms_getfeatureinfo         "http://map31.ru:8888/cgi-bin/mapserv.exe?map=../htdocs/mydemo/wms_ol.map&"
        wms_featureinfoformat      "text/plain"
        wms_enable_request          "*"
    END
  END  

  PROJECTION
    "init=epsg:4326"
  END

    LAYER
      NAME "pop_places"
      TYPE POINT
      STATUS ON
      DATA 'shape/ne_10m_populated_places.shp'
      PROJECTION
        "init=epsg:4326"
      END
      CLASS
        NAME "Pop Places"
        STYLE
          COLOR 10 100 50
          SYMBOL 'circle'
          SIZE 6        
        END
      END

      METADATA
        wms_title "Populated Places"
        wms_abstract "Populated places of the world"
        wms_srs "EPSG:4326"
        wms_include_items "all"
        wms_enable_request "*"
        #wms_extent "-180 -90 180 90"
      END     

    END # layer  

END 

person bestjack    schedule 02.04.2017    source источник


Ответы (1)


Параметр projection: 'EPSG:4326' запускает повторное проецирование растра на стороне клиента, поскольку проекция вида по умолчанию - 'EPSG:3857'. Возможно, вы захотите, чтобы ваша карта работала в этой проекции, и просто удалите строку projection: 'EPSG:4326' из конфигурации ol.source.TileWMS.

person ahocevar    schedule 03.04.2017
comment
Большое спасибо! Но мне пришлось изменить проекцию вывода моего WMS-сервера на «EPSG: 3857». И после этого шага удаление проекции: строка 'EPSG: 4326' оказала влияние. Итак, это решение на стороне сервера. Но что не так с перепроектированием OpenLayers? - person bestjack; 04.04.2017
comment
В этом нет ничего плохого. Но целевое разрешение меняется с широтой при перепроецировании между EPSG: 4326 и EPSG: 3857. В противном случае вы получите размытые изображения. - person ahocevar; 05.04.2017
comment
или вы можете изменить wms_srs "EPSG:4326" на wms_srs "EPSG:4326 EPSG:3857", чтобы получить перепроецирование на стороне сервера - person user27874; 06.10.2017