В моем приложении у пользователя должна быть возможность добавить план этажа на карту. Пользователь загружает изображение в формате PNG, используя простую форму, а затем это изображение должно отображаться в качестве фона карты. Итак, что мы имеем здесь:
- Изображение PNG, которое может быть изменено пользователем в любое время. Я получаю URL-адрес этого изображения с сервера.
- Размеры изображения (ширина и высота).
В Mapbox есть sources
и layers
, которые мне нужно использовать, чтобы добавить это изображение в качестве фона карты, а реальная карта мира вообще не должна отображаться.
Я видел много подобных примеров (в этом используется mapbox-gl-js
):
...
"sources": {
"overlay": {
"type": "image",
"url": "https://www.mapbox.com/mapbox-gl-js/assets/radar.gif",
"coordinates": [
[-80.425, 46.437],
[-71.516, 46.437],
[-71.516, 37.936],
[-80.425, 37.936]
]
}
},
...
А это (это использует deck.gl
слоев):
import DeckGL from '@deck.gl/react';
import {BitmapLayer} from '@deck.gl/layers';
const App = ({data, viewport}) => {
const layer = new BitmapLayer({
id: 'bitmap-layer',
bounds: [-122.5190, 37.7045, -122.355, 37.829],
image: 'https://raw.githubusercontent.com/uber-common/deck.gl-data/master/website/sf-districts.png'
});
return (<DeckGL {...viewport} layers={[layer]} />);
}
Но у них всегда есть предопределенные координаты изображения. Поскольку мое изображение может быть обновлено пользователем в любое время, мне нужно каким-то образом вычислить эти координаты с учетом соотношения сторон изображения. Я не силен в математике, не могли бы вы мне помочь? deck.gl
имеет возможность указать систему координат слоя и даже матрицу проекции 4x4, но я не совсем понимаю, как я могу использовать это для своего случая.