Очень долго искал решение этой проблемы.
Для того чтобы переориентировать ось Y. Необходимо в extent
изменить точку отсчёта высоты, и сделать её отрицательной.
Далее в addCoordinateTransforms
нужно описать преобразование координаты по Y на отрицательную(минус на минус дают плюс)
В итоге мы получим смещение нулевой координаты в левый-верхний угол.
Вырезка ключевых элементов кода:
import { Projection, addCoordinateTransforms } from 'ol/proj'
import ImageLayer from 'ol/layer/Image'
import Static from 'ol/source/ImageStatic'
...
const extent = [0, -img.height, img.width, 0]
const projection = new Projection({
units: 'pixels',
extent: extent,
worldExtent: extent
})
addCoordinateTransforms(
projection,
projection,
function (coordinate) {
return coordinate
},
function (coordinate) {
return [coordinate[0], -coordinate[1]]
})
const targetImageLayer = new ImageLayer({
source: new Static({
attributions: '© TODO',
url: imageUrl,
projection: projection,
imageExtent: extent
})
})
...
UPD. Openlayers v.8.2.0