The goal of this project is to create a viewer for maps that are either generated on a computer or are scanned in from paper sources. I want a viewer that allows fast panning and zooming, and that allows markers to be placed by the user or other systems, showing points of interest. Additionally, I want the viewer to support multiple maps for the same region, in such a way that the user can put together a patchwork view of an area from multiple smaller maps, and even choose which map would have precedence if two maps overlap. I want to be able to skew maps that are drawn in different projections, so they can work together.
Why do I want this? It started with another area of interest, genealogy. While researching ancestors, you find information telling where they are at certain times in their lives. Movement is quite typical in the 19th and 20th centuries, mostly from immigrants in Canada and the United States, but even in old world countries. Since I research multiple families, all of which are moving about (many of them heading west in Canada for homesteading), I often wonder how close two different families are at any given time. This made me want a timeline for these families, showing where they were and when. But how best to see where they are? On a map, of course.
This made me think of a map of Canada and a slider that I could use to move backwards and forwards through time, changing pins on a map as the families moved. But what map? A modern day one, where the places these families lived may no longer exist? No way! Not when I have historical maps of those very locations! This led me to thinking about how to get a patchwork version of Canada in such-and-such year, which wasn't feasible since the maps vary in date. And so from this I came up with the idea of overlaying and patching, allowing the user to not only move the pins through time, but the maps as well. Newer maps would be drawn on top of older ones as they advance through the years, but older maps might still be used where newer ones aren't available.
Some points I'll have to address: