Метод $.ajax поддерживает HTTP PATCH.
Проблема, которую вы видите, заключается в том, что метод ajax ищет PATCH в заголовке ответа Access-Control-Allow-Methods параметров предполетной проверки. Либо этот заголовок отсутствует в вашем ответе, либо метод PATCH не был включен в значение этого заголовка. В любом случае проблема возникает на сервере, а не на вашем клиентском коде.
1. Всю работу с элементами производите в координатах самого листа (они не меняются в зависимости от масштабирования и смещения)
2. Преобразование координат канваса в координаты листа в данном случае можно проводить по формуле
Хлиста = (Хканваса - Xсмещение)*масштаб.
Хканваса = смещение + Хлиста/масштаб
где:
Хлиста - координаты относительно точки листа с нулевыми координатами
Хканваса - координаты в пикселях относительно нижнего левого угла канваса (координату y необходимо инвертировать y = Hканваса - y)
Hканваса - высота канваса в пикселях
Wканваса - ширина канваса в пикселях
Xсмещение - смещение по оси Х точки листа с координатами [0:0] в пикселях относительно нижнего левого угла канваса
масштаб - масштаб ))) (считается по формуле Hвидимой_области/Hканваса или Wвидимой_области/Wканваса
видимая область - та область листа что видна в канвасе
Hвидимой_области - высота видимой области листа в условных единицах измерения самого листа
Wвидимой_области - ширина видимой области листа в условных единицах измерения самого листа
Для Y пересчет производится по аналогии с X
3. для удобства все функции рисования должны принимать в качестве координат - координаты листа (не канваса). Это автоматом реализует пункт 1. При этом при отображении видимой области на канвас, данные координаты пересчитываются в координаты канваса по второй формуле из п.2