private static Point ComputeStartPositionAndOffset(MapPoint tapPos, out Vector offset)
{
var offsetX = 0;
var offsetY = 0;
var startPosition = AppState.ViewDef.MapControl.MapToScreen(tapPos, true);
startPosition += new Vector(-300, -200);
if (startPosition.X < 300) offsetX = (int)(-startPosition.X + Application.Current.MainWindow.Width - 700);
else if (startPosition.X > Application.Current.MainWindow.Width - 500)
offsetX = (int)(-startPosition.X + 300);
if (startPosition.Y < 250) offsetY = (int)(-startPosition.Y + Application.Current.MainWindow.Height - 500);
else if (startPosition.Y > Application.Current.MainWindow.Height - 400)
offsetY = (int)(-startPosition.Y + 250);
offset = new Vector(offsetX, offsetY);
return startPosition;
}