Я пытаюсь создать приложение, в котором пользователь может привязывать отсканированные карты.Вы можете посмотреть пример здесь: https://codesandbox.io/s/2o99jvrnyy Есть два изображения:
Первое изображение правильно загружено на карту, а с поворотом - нет.
Я могу 'Найти информацию о том, может ли 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