split map viewer into separate module
make viewport projection co-ordinates be transformed correctly

The viewport is still hard-coded but at least the aspect ratio works now