One thought on “TopoTijdReis kaartlagen in QGIS

  1. Dank voor deze scripts ! heel handig.
    de franse kaart is de kaart met postroutes uit 1815, het jaar waarin de oranjes de staatsgreep pleegden waarbij Willem van Oranje Koning Willem 1 werd.
    Jammer dat het kadaster hier niet de Kraijenhoffkaart gebruikt, uit dezelfde tijd, maar met het eerste driehoekstelsel erop, dat zou uitgroeien tot het huidige RD-stelsel. Inderdaad wordt deze kaart direct na de inrichting van het Koninkrijk in het Nederlands vertaald. Er was ook nog een voorganger, “kaart van Holland als onderdeel van het Fransche Rijk”.
    de topkaart met de bruine randjes erin is gescand van een op bruin linnen geplakte topografische kaart. Die kun je handig vouwen op die randjes, zodat de kaart zelf niet beschadigt. Destijds een standaard-uitgave voor mensen in het veld.

  2. Richard, mooie uitleg!
    Ik heb een vraag: is het mogelijk om nadat je alle kaartlagen hebt geladen hier ook ‘automatisch’, als een filmpje, doorheen te gaan? Dus dat je met een klik op een knop de lagen afloopt waarbij je elke laag x seconden laat zien en je de ontwikkeling van de kaarten ziet?

    1. Niet met standaard functionaliteit van QGIS denk ik?
      Maar natuurlijk wel met een paar regels python code, die zoiets doet als:
      – verberg alle histo lagen
      – toon laag 1
      – wacht een seconde
      – verberg laag en en dan weer naar toon laag x etc etc
      Dat zou je evt weer onder een knopje kunnen brengen
      Lukt dat?

      1. Richard,
        mooi om te horen dat het zou kunnen. Ik ben zelf nog niet thuis in Python-code, dus dit zal betekenen dat ik me daar in moet gaan verdiepen…:). Dank voor je reactie!

      2. Ik krijg de volgende foutmelding.
        hoe kan ik dit verhelpen?
        Jeroen
        execfile(u’C:/Users/andrea/Desktop/Geen naam-0.py’.encode(‘mbcs’))
        Traceback (most recent call last):
        File “”, line 1, in
        File “C:/Users/andrea/Desktop/Geen naam-0.py”, line 4, in
        layer_group.setIsMutuallyExclusive(True)
        AttributeError: ‘QgsLayerTreeGroup’ object has no attribute ‘setIsMutuallyExclusive’

  3. Je kunt ook alles in 1 keer binnen halen met onderstaande code.
    Alsje de beide jaartallen verandert kun je kiezen welk tijdvak.
    # create a layer group
    layer_group = QgsProject.instance().layerTreeRoot().insertGroup(0, ‘TopoTijdReis’)
    # make the group mutually exlusive (one layer visible at a time)
    layer_group.setIsMutuallyExclusive(True)
    year = 1819
    while year < 2017:
    layer = QgsRasterLayer("tileMatrixSet=default028mm&crs=EPSG:28992&layers=Historische_tijdreis_{0}&styles=default&format=image/jpgpng&url=http://tiles.arcgis.com/tiles/nSZVuSZjHpEZZbRo/arcgis/rest/services/Historische_tijdreis_{1}/MapServer/WMTS/".format(year, year), "TopoTijdReis {0}".format(year), "wms")
    QgsMapLayerRegistry.instance().addMapLayer(layer, False) # False, meaning not ready to add to legend
    layer_group.insertLayer(0, layer)
    year = year + 1
    next

  4. Hallo Richard, bedankt voor het bruikbare verhaal. Het werkte meteen onder QGIS, maar ik krijg het onder OpenLayers niet aan de praat. Het zit hem in de afwijkende resoluties. PDOK-WMTS-kaarten definieer ik als volgt:
    var projectionExtent = [-285401.92, 22598.08, 595401.9199999999, 903401.9199999999];
    var resolutions = [3440.640, 1720.320, 860.160, 430.080, 215.040, 107.520, 53.760, 26.880, 13.440, 6.720, 3.360, 1.680, 0.840, 0.420, 0.210,0.105];
    var matrixIds = new Array(15);
    for (var z = 0; z < 15; ++z) {
    matrixIds[z] = 'EPSG:28992:' + z;
    }
    kadaster = new ol.layer.Tile({ // {{{2
    visible:false,
    source:new ol.source.WMTS({
    attributions: 'Kaartgegevens: © Kadaster‘,
    url: ‘https://geodata.nationaalgeoregister.nl/tiles/service/wmts?’,
    layer: “kadastralekaartv3”,
    matrixSet: ‘EPSG:28992’,
    format: ‘image/png’,
    projection: projection,
    tileGrid: new ol.tilegrid.WMTS({
    origin: ol.extent.getTopLeft(projectionExtent),
    resolutions: resolutions,
    matrixIds: matrixIds
    }),
    style: ‘default’,
    wrapX: false
    })
    })
    Als ik dit voor Topotijdreis doe, worden de tiles correct opgevraagd, maar geven allemaal de foutmelding “incorrect Tile Matrix Set defined”
    Enig idee hoe ik dit kan aanpassen?

  5. Nee, het is echt een EPSG:28992 schema. De kaarten zijn duidelijk RD, en de coordinaten in de capabilities zijn dat ook.
    In die capabilities staat een tileMatrixSet met de naam “default028mm”, maar die geeft dezelfde foutmelding als ik hem in OL gebruik. En zonder een tile matrix definitie werkt het ook niet.
    Jammer, want in QGIS werkt het prachtig, en in Leaflet ook:
    http://compuron.nl/leaflet/ (onderin)
    Daar gebruiken ze een speciale definitie voor ArcGIS-layer. Maar als ik iets dergelijks in OL gebruik (ol.source.TileArcGISRest) krijg ik altijd de capabilities voor iedere tile terug, niet een plaatje. Ongeacht wat ik daar aan parameters meegeef. Als je weet waar ik verder moet zoeken houd ik me aanbevolen

  6. Als ik de macro in Qgis 3.12.3 laat lopen, dan krijg ik de foutmelding
    “Processing: Traceback (most recent call last): File “C:/OSGEO4~1/apps/qgis/./python/plugins\processing\script\ScriptEditorDialog.py”, line 230, in runAlgorithm exec(self.editor.text(), d) File “”, line 2, in NameError: name ‘QgsProject’ is not defined”
    Heb je een tip hoe dit op te lossen is?

  7. Rene: Vreemd ik probeer dat net zelf onder windows, maar t werkt bij mij… De foutmelding lijkt te zeggen dat je niet de default imports hebt… beetje raar.
    Je zou er boven kunnen zetten:
    from qgis.core import *
    maar dat zou er gewoon moeten zijn. Een ander ideetje: heb je wel een project geladen? Zou het kunnen dat QGIS nog niks heeft? Kun je eens een willekeurig nl projectje draaien?

    1. Dag Richard,
      Dank voor je snelle reactie.
      Ik heb inderdaad gewoon een NL-project geladen en ik sta op een NL-positie in het RD stelsel met als basiskaart de opentopo kaart.
      Als ik jouw aanvulling “from qgis.core import *” als eerste regel bij de macro plaats, dan komt hij wel één stap verder: de macro maakt nu de groep ‘TopoTijdReis’ in lagen aan.
      Direct na het aanmaken van die groep volgt nu deze foutmelding:
      Processing: Traceback (most recent call last): File “C:/PROGRA~1/QGIS3~1.12/apps/qgis/./python/plugins\processing\script\ScriptEditorDialog.py”, line 224, in runAlgorithm exec(self.editor.text(), _locals) File “”, line 15, in NameError: name ‘qgis’ is not defined
      PS: Ik draai Qgis 3.12.3 met als menu-taal Engels. Maakt dat nog iets uit?

      1. Nee, sorry, zoals gezegd, je zou die modules allemaal al geladen moeten hebben. Misschien moet je eens met een ‘schoon’ QGIS profile beginnen. Kijken of het dan wel werkt.
        En anders lijkt er toch iets met het python deel van je installatie te zijn…
        Ik zal anders even kijken of ik aan dit artikeltje ook een QGIS-projectje kan hangen waarin gewoon alle lagen al zijn geladen.

  8. vanaf vandaag werkt de verbinding met de server niet meer. heb geprobeerd met https ipv http omdat dit per 1-9-2020 zou gaan veranderen. Maar ook dat lukt niet.
    Hebben jullie suggesties?

  9. Sinds 1 september werkt dit niet meer, de lagen worden niet gekoppeld en als ik in een verse QGIS start (3.12 Bucuresti) dan krijg ik ook de foutmelding en crasht QGIS. Enig idee wat ik kan doen?

  10. Per 1 september is de WMTS service alleen nog per httpS te krijgen. Wanneer je dus http in de service url hebt, moet je die service url aanpassen (zie bovenstaande stuk code, die is nu aangepast). Enige tijd hielp dat nog niet omdat de GetCapabilities-response dan toch nog http-url’s bevatte, die dan weer mis gingen.
    Nu werkt dus alles weer als het goed is!

Leave a Reply

Your email address will not be published. Required fields are marked *