Las capas WMTS se han estado renderizando en OpenLayers 6.5.1 sin problemas desde mi código durante algún tiempo, pero recientemente ha dejado de funcionar.
No se me ocurre nada que haya cambiado recientemente en la parte de OpenLayers de la aplicación, así que la he reducido a un simple HMTL+JavaScript de OpenLayers y sigue sin renderizar una capa WMTS. Así que seguramente he cambiado algo y me he olvidado de ello.
Pero no puedo entender por qué esto no funciona. No se producen errores, y el mensaje de registro de la consola se ve bien. Además, (para responder a la pregunta en los comentarios), no hay peticiones al servicio WMTS en el depurador del navegador (sólo a OSM). Además, si edito la tileURLFunction para incluir un mensaje console.log(), no se registra nada desde allí. Así que parece que ni siquiera intenta cargar ningún azulejo.
¿Por qué no funciona esta capa WMTS?
JSFiddle: https://jsfiddle.net/nsands/m78qygjn/4/
El código completo está abajo.
test.js:
function newLayerWMTS(url, layerName, matrixSetID, projCode, projString) {
var capabilitiesURL = url + '?request=GetCapabilities';
var options;
var request = new XMLHttpRequest();
request.open("GET", capabilitiesURL, false);
request.onload = function (e) {
if ( request.readyState === 4 ) {
if ( request.status === 200 ) {
parsedCapabilities = new ol.format.WMTSCapabilities().read(request.responseText)
options = ol.source.WMTS.optionsFromCapabilities(parsedCapabilities, {
layer: layerName,
matrixSet: matrixSetID,
});
} else {
console.log("REQUEST STATUS: " + request.status);
console.error(request.statusText);
}
} else {
console.log("ONLOAD READY STATE IS NOT 4");
}
};
request.onerror = function (e) {
console.error("REQUEST ERROR " + request.status);
console.error(request.statusText);
};
request.send();
proj4.defs(projCode, projString);
ol.proj.proj4.register(proj4);
options['projection'] = projCode;
console.log(options)
return new ol.layer.Tile({ source: new ol.source.WMTS(options) });
}
var map = new ol.Map({
layers: [],
target: 'map',
controls: [
new ol.control.Attribution({collapsible: false}),
new ol.control.ScaleLine(),
],
view: new ol.View(),
});
map.getView().fit([56322178.5436955, -5207263.87320154, 56358296.78939585, -5129055.83184506], map.getSize(), {constrainResolution: false});
layer = new ol.layer.Tile({ source: new ol.source.OSM() });
map.addLayer(layer);
layer = newLayerWMTS('https://services.thelist.tas.gov.au/arcgis/rest/services/Basemaps/Orthophoto/MapServer/WMTS', 'Basemaps_Orthophoto', 'default028mm', 'EPSG:3857', '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs');
map.addLayer(layer);
test.html
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="ol/ol.css" type="text/css" />
<script src="ol/ol.js" type="text/javascript"></script>
<script src="proj4/proj4.js" type="text/javascript"></script>
</head>
<body>
<div id="map" style="position: absolute;top: 0px;left: 0px;height: 100%;width: 100%;margin: 0px;padding: 0px;"></div>
<script src="test.js" type="text/javascript"></script>
</body>
</html>
2 votos
¿Has mirado en la sección de red del depurador del navegador? ¿Cuáles son las peticiones WMST y cuál es la respuesta?
0 votos
Perdón, debería haber mencionado que parece que no hace ninguna petición (aparte de OSM). Además, si modifico la función tileURLFunction para registrar cosas no se registra nada desde allí. He actualizado la pregunta para incluir esta información ahora.