Я пытаюсь создать приложение, в котором пользователь может привязать отсканированные карты к местности. Вы можете посмотреть пример здесь: https://codesandbox.io/s/2o99jvrnyy Есть два картинки:
- assets / test.png - без вращения
- assets / test_rotation.png - с вращением
Первое изображение правильно загружено на карту, а изображение с поворотом - нет.
Я не могу найти информацию о том, может ли OpenLayers 5 обрабатывать изображения с параметрами преобразования, хранящимися в файле мира. Наверное, я чего-то упускаю, но не могу понять, что именно.
Вот как работает моя логика:
Параметры преобразования рассчитываются методом аффинного преобразования по 4 точкам. Вы можете увидеть логику в файле Affine.js. По крайней мере, 4 точки взяты из исходного изображения и карты. Затем по этим 4 точкам рассчитываются параметры трансформации. После этого я рассчитываю размер изображения:
width = image.width in pixels
height = image.height in pixels
width *= Math.sqrt(Math.pow(parameters.A, 2) + Math.pow(parameters.D, 2));
height *= Math.sqrt(Math.pow(parameters.B, 2) + Math.pow(parameters.E, 2));
// then the extent in projection units is
extent = [parameters.C, parameters.F - height, parameters.C + width, parameters.F];
Параметры файла мира рассчитываются, как указано здесь.
Вероятно, проблема в том, что изображение с поворотом не поворачивается при загрузке как статическое изображение в OpenLayers 5, но не может найти способ сделать это.
Я попытался загрузить оба изображения в QGIS и ArcMap с рассчитанными параметрами, и оба они загружаются правильно. Вы можете увидеть результат для второй картинки:
Здесь вы можете увидеть параметры для каждого изображения:
Image: test.png
Calculated extent: [436296.79726721847, 4666723.973240128, 439864.3389057907, 4669253.416495154]
Calculated parameters (for world file):
3.8359372067274027
-0.03146800786355865
-0.03350636818089405
-3.820764346376064
436296.79726721847
4669253.416495154
Image: test_rotation.png
Calculated extent: [437178.8291026594, 4667129.767589236, 440486.91675884253, 4669768.939256327]
Calculated parameters (for world file):
3.506332904308879
-1.2831186688536016
-1.3644002712982917
-3.7014921022625864
437178.8291026594
4669768.939256327