2017-04-02 23 views
1

私はポイントレイヤーでMapServer WMSサービスをセットアップしました。そして今、私はOpenLayersライブラリを使って簡単なWMSクライアントを書こうとしています。一般的に、私はいくつかの結果を得ましたが、いくつかの問題があります。いくつかの点は他の点よりも小さい。 QGISとリーフレットライブラリを使用して私のWMSサービスに接続しようとしました。結果は完璧です! OpenLayersのlibにはいくつかの問題があります。この例で何が問題なのですか?OpenLayersライブラリは、エラーのあるMapServer WMSレイヤーをレンダリングします

クライアント側:

  • OpenLayersをV4.0.1
  • のWindows 7のx64 SP1
  • クロム57.0.2987.133【のMozilla/5.0(のWindows NT 6.1; WOW64)のAppleWebKit/537.36(KHTML、等Gecko)クローム/ 57.0.2987.133サファリ/ 537.36]
  • IE 11.0.9600 [Mozillaの/ 5.0(Windows NTの6.1; WOW64;トライデント/ 7.0; RV:11.0)Geckoのような]
  • のFirefox 51.0.1 [Mozillaの/ 5.0(Windows NT 6.1; WOW64; rv:51.0)Geck O/20100101 Firefoxの/ 51.0]

サーバー側:

  • MS4W 3.1.4

ライブ例:形状ファイル、HTMLページと設定マップファイルとhttp://vector-sol.ru/apps/ol.html
ダウンロードZIP :http://map31.ru:8080/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:8080/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ファイル:デフォルトのビューの投影が'EPSG:3857'あるので

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:8080/cgi-bin/mapserv.exe?map=../htdocs/mydemo/wms_ol.map&" 
     wms_srs     "EPSG:4326" 
     wms_getfeatureinfo   "http://map31.ru:8080/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 

答えて

0

projection: 'EPSG:4326'設定は、クライアント側のラスタ再投影をトリガします。その計画で地図を使用したい場合は、ol.source.TileWMS設定からprojection: 'EPSG:4326'行を削除するだけです。

+0

ありがとうございます!しかし、WMSサーバの出力プロジェクションを「EPSG:3857」に変更しなければなりませんでした。そして、このステップ後に投影を取り除くと、 'EPSG:4326'行が影響を与えました。したがって、これはサーバー側のソリューションです。しかし、OpenLayers再投影で何が問題になっていますか? – bestjack

+0

何も問題はありません。しかし、目標解像度は、EPSG:4326とEPSG:3857の間で再投影したときの緯度によって変わります。それ以外の場合は、ぼやけた画像が表示されます。 – ahocevar

+0

または 'wms_srs" EPSG:4326 "'を 'wms_srs"に変更することができます。EPSG:4326 EPSG:3857 "'サーバー側再投影を取得するには – user27874

関連する問題