2 votos

La función WMTS de OpenLayers ya no funciona - No hay mensajes de error

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.

4voto

hood Puntos 16

El problema está en las coordenadas del cuadro delimitador de su vista. Has desplazado el mapa hacia la izquierda una vez alrededor del mundo. El centro de Tasmania se encuentra aproximadamente en [16324503, -5166231] , su X las coordenadas son unos 40.000.000 más altas. Si se desplaza el mapa hacia la derecha una vez alrededor del mundo, aparecerá su capa WMTS.

La solución es utilizar el cuadro delimitador de ajuste correcto o establecer la opción de origen de la capa wrapX a true :

options['wrapX'] = true;

0 votos

Verificado ahora... options['wrapx'] = true; en el código de mi aplicación lo resuelve, al igual que en el JSFiddle. Al desplazarse por el mundo (hacia el oeste) también se encuentra la capa "perdida". Gracias.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X