Home Personal Stuff Computer Stuff Topography Genealogy Lego
 

Het tonen van een historische kaart met Google maps

Het idee voor het project 'Nederland 1858/1870' begon rond 1998, toen ik de scans van Jacob Kuypers gemeenteatlas op Rob Kuijstens website zag staan. Ik had zelf een exemplaar van Zeeland 1866 in de boekenkast staan en wilde de afgebeelde kaarten 'aan elkaar geplakt' zien. Eerste pogingen om Robs scans van de Zeeuwse gemeentekaarten aan elkaar te plakken met behulp van PaintShop Pro mislukten omdat er geen goede referentiepunten waren om de grenzen op elkaar te leggen: de kaart van Kuyper zijn niet 100% topografisch en zijn daarnaast in verschillende schalen afgebeeld.

Begin 2005 lanceerde Google zijn Google Maps, een uitbreidbare applicatie voor kaarten die heel anders was dan voorgangers op internet, die meestal met gegenereerde kaartplaatjes op de server werkten. In Google Maps zijn kaarten verdeeld in vierkante plaatjes van 256x256 pixels met een uniforme benaming. Er is een berekening om in een bepaald zoomniveau een geografische coordinaat om te zetten naar de naam van het plaatje van die plek.

Google leverde (in eerste instantie) een tweetal 'tile sets' (tegelverzamelingen) aan: wegenkaarten en satellietbeelden. Maar in de onderliggende code (de API) bestaat de mogelijkheid om je eigen tegelverzameling toe te voegen. Je moet dan dus zelf 256x256 pixel plaatjes maken en een omrekening aanbieden van een geografische coordinaat naar de naam van het plaatje van die plek.

Op Mike Williams' Google Maps API Tutorial staat een uitgewerkt voorbeeld hiervan. Dit voorbeeld heb ik als basis genomen om een aantal van de Zeeuwse gemeentekaarten in stukjes te knippen. Ik gebruik de Google wegenkaart van het betreffende gebied als 'laag' in PaintShop Pro en leg de gemeentekaart met transparantie erbovenop. Met wat trial en error heb ik een bepaald zoomlevel van Google als basisschaal gekozen. Dit zoomniveau is vrijwel gelijk aan de schaal van gescande gemeentekaarten van schaal 1:50.000. Dit betekent dat die kaarten op vrijwel normale scangrootte in de uiteindelijke applicatie staan. Kaarten van 1:100.000 zijn ruwweg met een factor 2 vergroot, die van 1:25.000 met een factor 2 verkleind etc.

Toen ik de eerste kaarten af had, en het resultaat bevredigend was, besloot ik te proberen om heel Nederland op die manier op de kaart te krijgen. Van Rob kreeg ik toestemming om de scans te gebruiken, en ik ben sindsdien regelmatig bezig de kaart uit te breiden. Inmiddels heb ik een aantal hulpmiddelen geschreven om het proces te vergemakkelijken. Allereerst laad ik een aantal Google Maps tegels in een enkele png image, met daarbovenop de naam van het plaatje (dat is een x en een y nummer).

Google Maps kaartvierkanten met coordinatenVervolgens kopieer ik de gemeentekaart scan als nieuwe, doorzichtige laag, en probeer matchende referentiepunten tussen de kaarten te vinden. Vooral spoorlijnen, kerken en kanalen zijn hiervoor te gebruiken omdat die het minst gewijzigd zijn in 150 jaar. Meestal moet ik de gemeentekaart iets vergroten (bij 1:50.000 ongeveer naar 108%) en mogelijk wat roteren (1 of 2 graden) om zoveel mogelijk punten op elkaar te laten vallen.

Transparante kaartlaag

Bij een zo goed mogelijke match zet ik de transparantie uit, en begin de randen van de gemeente weg te vlakken. Eventuele buurgemeenten die eerder zijn omgezet komen dan tevoorschijn. Met een beetje geluk sluiten de kaarten goed aan en lopen de wegen etc. netjes door. Soms klopt het niet, vanwege afwijkingen in de kaart, of doordat de siuatie is veranderd in de tijd tussen het maken van de twee kaarten door Kuyper (Nederland ging ook toen al flink op de schop), in dat geval 'corrigeer' ik de kaarten wat. Het eindresultaat is uiteindelijk meer bedoeld als topografische indruk dan als topografische bron. Wat dat betreft zijn militaire topografische kaarten waarschijnlijk een stuk correcter.

Het eindproduct is een afbeelding van aan elkaar geplakte gemeentekaarten:

Kaartlaag gereed voor uitknippen

Vervolgens pak ik een deel van de kaart, een veelvoud van 256 in zowel breedte als hoogte, en gebruik daarop een van de exportmethodes van PaintShop Pro, de Image Slicer, oorspronkelijk bedoeld om 'clickable maps' voor HTML pagina's te maken. Ik zet de tegelgrootte op 256x256, waardoor bij het saven de afbeelding netjes in stukjes wordt geknipt met een voorspelbare benaming. Daarna gebruik ik een perl script om de bestanden te hernoemen, waarbij de naam van de linksboven tegel wordt opgegeven, waaruit de naam van de rest van de tegels volgt. De plaatjes staan dan op de mapserver, en een tweede perl scriptje past het javascript aan dat doorgeeft aan de browser voor welke geografische coordinaten de Kuyper kaart af is.

Kaartlaag omgezet naar kaartvierkanten