The issue you're running into is the same underlying issue discussed here: the 3.x API can have problems with tiled layers when the first layer added to the map is not tiled. The solution is to define the map's tiling info up front.
Try this instead, which would replace your current call to "require":
require([
"esri/map","esri/SpatialReference", "esri/geometry/Extent", "esri/layers/WMSLayer", "esri/layers/WMSLayerInfo", "esri/layers/WMTSLayer", "esri/layers/WMTSLayerInfo",
"esri/config", "esri/layers/TileInfo", "esri/geometry/Point",
"dojo/domReady!"
], function(
Map, SpatialReference, Extent, WMSLayer,WMSLayerInfo, WMTSLayer, WMTSLayerInfo,
esriConfig, TileInfo, Point
) {
var extent3857 = new Extent({
xmin: 612056.7798435382,
ymin: 5682778.707431033,
xmax: 822811.5409472634,
ymax: 5780363.363667572,
spatialReference: { wkid: 102100, latestWkid: 3857 }
});
var extent4326 = new Extent({
xmin: 5.7238,
ymin: 45.6390,
xmax: 5.984802,
ymax: 45.828799,
spatialReference: { wkid: 4326 }
});
esriConfig.defaults.io.proxyUrl = "/AP_voirie/web/kernel/proxy/proxy.ashx";
map = new Map("map", {
extent:extent3857,//pseudo mercator,
zoom: 13
});
var tileInfo = new TileInfo({
dpi: 96,
height: 256,
lods: [
{
level: 0,
resolution: 156543.033928,
scale: 591657527.591555
},
{
level: 1,
resolution: 78271.5169639999,
scale: 295828763.795777
},
{
level: 2,
resolution: 39135.7584820001,
scale: 147914381.897889
},
{
level: 3,
resolution: 19567.8792409999,
scale: 73957190.948944
},
{
level: 4,
resolution: 9783.93962049996,
scale: 36978595.474472
},
{
level: 5,
resolution: 4891.96981024998,
scale: 18489297.737236
},
{
level: 6,
resolution: 2445.98490512499,
scale: 9244648.868618
},
{
level: 7,
resolution: 1222.99245256249,
scale: 4622324.434309
},
{
level: 8,
resolution: 611.49622628138,
scale: 2311162.217155
},
{
level: 9,
resolution: 305.748113140558,
scale: 1155581.108577
},
{
level: 10,
resolution: 152.874056570411,
scale: 577790.554289
},
{
level: 11,
resolution: 76.4370282850732,
scale: 288895.277144
},
{
level: 12,
resolution: 38.2185141425366,
scale: 144447.638572
},
{
level: 13,
resolution: 19.1092570712683,
scale: 72223.819286
},
{
level: 14,
resolution: 9.55462853563415,
scale: 36111.909643
},
{
level: 15,
resolution: 4.77731426794937,
scale: 18055.954822
},
{
level: 16,
resolution: 2.38865713397468,
scale: 9027.977411
},
{
level: 17,
resolution: 1.19432856685505,
scale: 4513.988705
},
{
level: 18,
resolution: 0.59716428355981721,
scale: 2256.994353
},
{
level: 19,
resolution: 0.29858214164761665,
scale: 1128.4971760000001
},
{
level: 20,
resolution: 0.1492910708899543,
scale: 564.248588
},
{
level: 21,
resolution: 0.0746455354449772,
scale: 282.124294
},
{
level: 22,
resolution: 0.0373227677224886,
scale: 141.062147
},
{
level: 23,
resolution: 0.0186613838612443,
scale: 70.5310735
},
{
level: 24,
resolution: 0.0093306919306222,
scale: 35.26553675
}
],
origin: new Point(-20037508.342787, 20037508.342787, new SpatialReference(3857)),
spatialReference: new SpatialReference(3857),
width: 256
});
map._params.tileInfo = tileInfo;
map.__tileInfo = tileInfo;
dojo.connect(map, "onLoad", function ()
{
console.log("maponload");
//ignWmsLayer.spatialReference = { wkid: 102100, latestWkid: 3857 } ;
//ignWmtsLayer.spatialReference = { wkid: 102100, latestWkid: 3857 } ;
//ignWmsLayer.spatialReferences[0] = 3857;
console.log(ignWmsLayer.spatialReferences);
console.log("spatialReference esriLayer : " , esriLayer.spatialReference);
console.log("spatialReference ignwms : " , ignWmsLayer.spatialReference);
console.log("spatialReference ignWmtsLayer : " , ignWmtsLayer.spatialReference);
});
var aLayers = [];
// ESRI basemaps
var strEsriUrl = "https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer";
esriLayer = new esri.layers.ArcGISTiledMapServiceLayer(strEsriUrl);
// IGN basemaps
// WMS
// https://wxs.ign.fr/cartes/geoportail/r/wms?request=GetCapabilities&service=WMS
// Premier systeme de coordonnées de référence : CRS:84 comment le changer au chargement
var strIgnWmsUrl = "https://wxs.ign.fr/cartes/geoportail/r/wms";
/*
Test avec Layer info
var WMSLayerInfo1 = new esri.layers.WMSLayerInfo({
name: 'SCANREG_PYR-JPEG_WLD_WM',
title: 'SCANREG_PYR-JPEG_WLD_WM',
spatialReferences : [3857]
});
var resourcesInfo = {
layerInfos: [WMSLayerInfo1],
spatialReferences : [3857],
extent: extent3857
};
ignWmsLayer = new esri.layers.WMSLayer(strIgnWmsUrl, {
format: "jpeg",
minScale: 100000000,
maxScale: 200,
resourceInfo : resourcesInfo,
visibleLayers: ["SCANREG_PYR-JPEG_WLD_WM"],
transparent: true,
id: "WMS ScanRegion"
});
*/
ignWmsLayer = new esri.layers.WMSLayer(strIgnWmsUrl, {
format: "jpeg",
minScale: 100000000,
maxScale: 200,
visibleLayers: ["SCANREG_PYR-JPEG_WLD_WM"],
transparent: true,
id: "WMS ScanRegion"
});
// WMTS
// https://wxs.ign.fr/ortho/geoportail/wmts?request=GetCapabilities&service=WMTS&version=1.0.0
var strIgnWmtsUrl = "https://wxs.ign.fr/ortho/geoportail/wmts";
var layerInfo = new esri.layers.WMTSLayerInfo({
identifier: "ORTHOIMAGERY.ORTHOPHOTOS",
tileMatrixSet: "PM",
format: "jpeg"
});
var ignOptions = {
serviceMode: "KVP",
minScale: 100000000,
maxScale: 200,
layerInfo: layerInfo
};
ignWmtsLayer = new esri.layers.WMTSLayer(strIgnWmtsUrl, ignOptions);
// Add layers to array
// esri first one => OK it works
/*aLayers.push(esriLayer);
aLayers.push(ignWmtsLayer);
aLayers.push(ignWmsLayer);*/
// wmts first one => OK it works
/*aLayers.push(ignWmtsLayer);
aLayers.push(ignWmsLayer);
aLayers.push(esriLayer);*/
// wms first one => NO it doesn't work => how change CRS WMS in spatialreferences ?
aLayers.push(ignWmsLayer);
aLayers.push(ignWmtsLayer);
aLayers.push(esriLayer);
// setVisibility first layer
for (let index = 0; index < aLayers.length; index++) {
let layer = aLayers[index];
if (index == 0) layer.setVisibility(true);
else layer.setVisibility(false);
}
// Add basemaps layers
map.addLayers(aLayers);
});