+/**
+ * gis_viewer_pan:
+ * @viewer: the viewer
+ * @forward: distance to move forward in meters
+ * @right: distance to move right in meters
+ * @up: distance to move up in meters
+ *
+ * Pan the location by a number of meters long the surface.
+ *
+ * Bugs: the distances are not in meters
+ * Bugs: panning does not move in strait lines
+ */
+void gis_viewer_pan(GisViewer *viewer, gdouble forward, gdouble sideways, gdouble up)
+{
+ g_assert(GIS_IS_VIEWER(viewer));
+ g_debug("GisViewer: pan - forward=%8.3f, sideways=%8.3f, up=%8.3f",
+ forward, sideways, up);
+ gdouble dist = sqrt(forward*forward + sideways*sideways);
+ gdouble angle1 = deg2rad(viewer->rotation[2]);
+ gdouble angle2 = atan2(sideways, forward);
+ gdouble angle = angle1 + angle2;
+ /* This isn't accurate, but it's usable */
+ viewer->location[0] += dist*cos(angle);
+ viewer->location[1] += dist*sin(angle);
+ viewer->location[2] += up;
+ _gis_viewer_fix_location(viewer);
+ _gis_viewer_emit_location_changed(viewer);
+}
+
+/**
+ * gis_viewer_zoom:
+ * @viewer: the viewer
+ * @scale: the scale to multiple the elevation by
+ *
+ * Multiple the elevation by a scale.
+ */
+void gis_viewer_zoom(GisViewer *viewer, gdouble scale)