DOM уже загружен, когда вызывается функция draw
, это правильно.
Но строка var canvas = document.getElementById('control');
оценивается до этого, потому что она не входит в функцию draw
. Он выполняется немедленно в <head>
документа ДО того, как элементы будут отображены.
Я бы предложил вам изменить функцию инициализации на что-то подобное
var canvas,context;
function initializeMap() {
canvas = document.getElementById('control');
context = canvas.getContext('2d');
}