Openlayers 3 如何通过调用TMS使旧的openlayers代码适应openlayers6

Openlayers 3 如何通过调用TMS使旧的openlayers代码适应openlayers6,openlayers-3,openlayers-6,Openlayers 3,Openlayers 6,如何使这段旧代码适应openlayers 6 var layer_ais = new OpenLayers.Layer.TMS( "Traffic maritime", "https://tiles.marinetraffic.com/ais_helpers/shiptilesingle.aspx?output=png&sat=1&grouping=shiptype&tile_size=512&legends=1&zoom=${z}&

如何使这段旧代码适应openlayers 6

var layer_ais = new OpenLayers.Layer.TMS(
    "Traffic maritime",
    "https://tiles.marinetraffic.com/ais_helpers/shiptilesingle.aspx?output=png&sat=1&grouping=shiptype&tile_size=512&legends=1&zoom=${z}&X=${x}&Y=${y}",
    {
    "layerId":2,
    "displayOutsideMaxExtent":true,
    "isBaseLayer":false,
    "numZoomLevels":18,
    "type":"png",
    "url":"https:\/\/tiles.marinetraffic.com\/ais_helpers\/shiptilesingle.aspx?output=png&sat=1&grouping=shiptype&tile_size=512&legends=1&zoom=${z}&X=${x}&Y=${y}" ,
    'getURL': getTileURLMarine,
    'tileSize': new OpenLayers.Size(512,512)
    });  
我必须使用XYZ或WMS源吗?
我必须使用tileUrlFunction对z x y参数进行重新排序,如本例所示吗?

根据@Mike help,这里是ol 6.2的工作代码

      var defaultGrid = new ol.tilegrid.createXYZ({ tileSize: 256,  maxZoom: 18 });
      var layer_ais = new ol.layer.Tile({
         source: new ol.source.XYZ({
            tileGrid: new  ol.tilegrid.TileGrid({
               tileSize: 512,
               resolutions: defaultGrid.getResolutions(),
               extent: defaultGrid.getExtent()
            }),
         url: "https://tiles.marinetraffic.com/ais_helpers/shiptilesingle.aspx?output=png&sat=1&grouping=shiptype&tile_size=512&legends=1&zoom={z}&X={x}&Y={y}"
        })
      });


谢谢你的帮助

您有一个XYZ url,因此无法使用WMS。如果您有标准的平铺网格,则可以使用{-y}占位符($不再用于占位符):


非常感谢mike对它的帮助,但我仍然有一个投影问题?…使用的旧代码:projection:new OpenLayers.projection(“EPSG:900913”)“900913”是“GOOGLE”(与EPSG:3857相同,它是OpenLayers和OSM默认值)。我让你的沙盒工作,它是一个正常的XYZ层(不是TMS),除了第一层使用与256px相同的分辨率512px瓷砖。在最新的开发版本中,您可以使用maxResolution选项来定制磁贴网格,感谢Mike在最新开发版本的codesansbox上完美地工作。。。如何/在哪里可以获得此版本的js和css文件…我不熟悉npm。。。。要在我的网站上试用吗?您可以使用旧的较长方法创建分辨率为256px的tilegrid,但设置为使用512px
var layer_ais = new ol.layer.TileLayer({
  source: new ol.source.XYZ({
     maxZoom: 18,
     tileSize: 512,
     url: 'https://tiles.marinetraffic.com/ais_helpers/shiptilesingle.aspx?output=png&sat=1&grouping=shiptype&tile_size=512&legends=1&zoom={z}&X={x}&Y={-y}'
  })
});