Hi Pascal,
Thank you very much for the link to your interesting work on the integration of Mapbox Vector Tiles into web-mapviewer. As you say, it is "work-in-progress": panning and zooming is not yet as smooth as in the swisstopo Android app. WMTS and MVT layers do not always match perfectly (see "Wanderwege" in BaseMap_web-mapviewer.jpg).

I am currently trying a different approach: I am using two separate ol.map objects named mapMVT and map respectively. Two separate <div>s are the targets of the two map objects. One of the <div>s is completely covering the other. The two map objects have different views named viewMercator and viewLV95 respectively. As the names suggest the views use "EPSG:3857" and "EPSG:2056" respectively. I am applying the olms.js bridge to the mapMVT with web-mercator projection:
olms.apply(mapMVT, '
https://vectortiles.geo.admin.ch/styles/ch.swisstopo.basemap.vt/style.json');
In order to match the two maps I am synchronizing the view centers and resolutions of the maps. To synchronize the centers I convert the LV95 coordinates to WGS84 lon/lat coordinates and from there to web-mercator coordinates. To adjust the resolution I am using the following code:
var MVTperLV95resolution = 1/Math.cos(Math.PI * lat / 180);
viewMercator.setResolution(viewLV95.getResolution()*MVTperLV95resolution);
This works but speeds of panning and zooming are comparable to speeds with your approach. MVT and WMTS layers again do not match perfectly (see BasMap_GPS_Schweiz.jpg).

In contrast "ch.swisstopo.swisstlm3d-wanderwege" is matching perfectly with "ch.swisstopo.pixelkarte-farbe" (see Pixelkarte_GPS_Schweiz.jpg).
Also the match is perfect in the swisstopo Android app (see BaseMap_swisstopo_app.jpg).

Presumably this app is not based on Openlayers, do you know what framework they use?
I have two additional questions about the swisstopo implementations of the "basemap" and the "basemap-winter":
- The API documentation about Mapbox Vector Tiles (api3.geo.admin.ch) does not list an example of an URL to get one pbf tile for the "basemap-winter". My guess "https://vectortiles.geo.admin.ch/tiles/ch.swisstopo.base-winter.vt/v1.0.0/7/67/44.pbf" is not working. Is there a correct URL for "basemap-winter"?
- The Edge developer console reports the following error:
olms.js:1
Expected value to be of type number, but found string instead.
evaluate @ olms.js:1
on execution of the following line:
olms.apply(mapMVT, 'https://vectortiles.geo.admin.ch/styles/ch.swisstopo.basemap.vt/style.json');
Is there an error in the style.json file?
Cheers, Heiri