OpenLayers 4.0将世界海洋基地地图ArcGIS重新投影到EPSG 3408

OpenLayers 4.0将世界海洋基地地图ArcGIS重新投影到EPSG 3408,openlayers,map-projections,Openlayers,Map Projections,我需要将geojson文件中投影为NSIDC ease Grid North/South或WGS84-NSIDC海冰极地立体图North/South的图层添加到我的地图中。该地图是Esri的海洋底图 实际地图对此链接可见,供您参考。现在,地图使用EPSG:3857投影进行投影,但我应该将其更改为上面的投影之一,以便正确显示我必须添加的图层 根据OpenLayers 4中的文档,我尝试在执行重投影命令之前创建一个简单的html文档。在处理极轴图层时,我实际上应该添加在一个地图投影到另一个地图投影之

我需要将geojson文件中投影为NSIDC ease Grid North/South或WGS84-NSIDC海冰极地立体图North/South的图层添加到我的地图中。该地图是Esri的海洋底图

实际地图对此链接可见,供您参考。现在,地图使用EPSG:3857投影进行投影,但我应该将其更改为上面的投影之一,以便正确显示我必须添加的图层

根据OpenLayers 4中的文档,我尝试在执行重投影命令之前创建一个简单的html文档。在处理极轴图层时,我实际上应该添加在一个地图投影到另一个地图投影之间进行更改的可能性,以便检查哪一个投影是要使用的最佳投影,如下所示:

<html>
  <head>
    <link rel="stylesheet" href="includes/ol.css" type="text/css">
    <script src="includes/ol.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js"></script>
  </head>
  <body>

   <div id="map" class="map"></div>
   <script>
     var NSIDCEaseGridNorth = new ol.proj.Projection({code: 'EPSG:3413',
     extent: [-15725.89, 9010263.32, 970.09, 555817.28], //taken from http://epsg.io
     units: 'm'
     });
     ol.proj.addProjection(NSIDCEaseGridNorth);

     var attribution = new ol.Attribution({
     html: 'Tiles © <a href="https://services.arcgisonline.com/arcgis/' +
        'rest/services/Ocean/World_Ocean_Base/MapServer">ArcGIS</a>'
     });

     var ocean_map =
      new ol.layer.Tile({
        source: new ol.source.XYZ({
         attributions:[attribution],
         url: 'https://services.arcgisonline.com/arcgis/rest/services/' +
        'Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}'
         }),
         visible: true,
         });

     var map = new ol.Map({
      layers: [],
      target: 'map',
      view: new ol.View({
      projection: 'EPSG:3413', //porjection di base (Spherical Mercator)
      center: [0.00, -5131981.97 ],
      zoom: 0
      })
     });

     map.addLayer(ocean_map);

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

但是,地图不可见,容器为白色。如果我上传带有要投影层的geojson文件,它将显示在正确的投影中。您对如何修复它有什么建议吗?

您需要包含投影的proj4定义,并使用proj4js的最新版本,因为2.4.4导致了一些错误。您使用的范围不正确,它应该是[左、下、右、上],并且您的底部值大于顶部值,因此我根据纬度60处的边计算了它。重投影在缩放0时不起作用,因此我已将最小缩放设置为1

项目定义:3413,+proj=stere+lat_0=90+lat_ts=70+lon_0=-45+k=1+x_0=0+y_0=0+datum=WGS84+units=m+no_defs; 变量范围=ol.extent.boundingExtent[ Lonlat[-135,60],“EPSG:3413”, Lonlat[-45,60],“EPSG:3413”, Lonlat[45,60]的ol.proj.,“EPSG:3413”, Lonlat[135,60]的其他项目,“EPSG:3413” ]; ol.proj.get'EPSG:3413'。设置扩展文本; var属性=新的ol属性{ html:“瓷砖©” }; 海洋地图= 新ol.layer.Tile{ 来源:new ol.source.XYZ{ 归因:[归因], 网址:'https://services.arcgisonline.com/arcgis/rest/services/' + 'Ocean/World_Ocean_Base/MapServer/tile/{z}/{y}/{x}' }, 可见:对, }; var map=新ol.map{ 图层:[], 目标:“地图”, 视图:新ol.view{ 投影:“EPSG:3413”,//投影双基球面墨卡托 中心:Lonlat[0,90]的ol.proj.,“EPSG:3413”, 缩放:1, 最小缩放:1 } }; map.addLayerocean\u map;
谢谢你,迈克,这很有魅力!实际上,我也尝试了proj4.defs,但实际上我并没有以您向我展示的方式来表达程度。现在它工作了!