如何在 Mapbox GL JS 中加载任意投影的图片?

在 Mapbox GL JS API 中,我们可以使用 image sourceraster layer 将图片叠加到地图上,例如:Add a raster image to a map layer
但是,因为‎ Mapbox 使用 ‎‎网络墨卡托投影‎‎,并将 ‎‎EPSG: 3857‎‎ 投影坐标系作为地图和地图切片的默认投影,所以图片也必须是网络墨卡托投影,否则图片将无法正确叠加到地图。我们可以通过修改图片的投影使其正确叠加到地图。但是,当我们没办法修改图片投影的时候,怎加正确叠加图片呢?
在 Openlayers 中,可以很轻松的实现,因为它原生就支持图片/瓦片重投影,例如:Image Reprojection。而在 Mapbox GL JS 中,我们就需要借助第三方扩展(ImageLayer)来实现,该扩展使用了 ArrugatorProj4js 工具对图片重投影,使图片正确叠加。
使用步骤如下:

1. 安装

# yarn
yarn add @naivemap/mapbox-gl-image-layer proj4
# 或 npm
npm i @naivemap/mapbox-gl-image-layer proj4

2. 添加图片

import ImageLayer from '@naivemap/mapbox-gl-image-layer'

const layer = new ImageLayer('image-layer', {
  url: '/images/4326.png', // 指定图片地址
  projection: 'EPSG:4326', // 指定图片投影
  coordinates: [
    [105.289838, 32.204171], // top-left
    [110.195632, 32.204171], // top-right
    [110.195632, 28.164713], // bottom-right
    [105.289838, 28.164713], // bottom-left
  ],
})

map.addLayer(layer)

3. 叠加效果

叠加效果如下图(右),左图使用 Mapbox GL JS 的图片数据源 叠加,可以看到在纬度方向,图片错位很明显,而经过重投影的图片(右)和边界是完全重合的。
叠加效果
通过下面的动图,可以更清楚地看到图片的变化。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在项目包中使用 Mapbox GL JS 中的 MiniMap 控件,您需要首先在项目中安装 Mapbox GL JS。您可以在项目的根目录中运行以下命令来安装 Mapbox GL JS: ``` npm install mapbox-gl ``` 然后,您可以通过以下方式导入 MiniMap 控件: ```js import 'mapbox-gl/dist/mapbox-gl.css'; import MapboxGl from 'mapbox-gl'; import 'mapbox-gl/dist/mapbox-gl.css'; import 'mapbox-gl/dist/mapbox-gl.js'; import 'mapbox-gl/dist/mapbox-gl.css'; import 'mapbox-gl/dist/mapbox-gl.js'; import 'mapbox-gl/dist/mapbox-gl.css'; import 'mapbox-gl/dist/mapbox-gl.js'; import 'mapbox-gl/dist/mapbox-gl.css'; import 'mapbox-gl/dist/mapbox-gl.js'; import 'mapbox-gl/dist/mapbox-gl.css'; import 'mapbox-gl/dist/mapbox-gl.js'; import MapboxGl from 'mapbox-gl'; import 'mapbox-gl/dist/mapbox-gl.css'; import 'mapbox-gl/dist/mapbox-gl.js'; import 'mapbox-gl-minimap/mapbox-gl-minimap.css'; import MapboxGlMinimap from 'mapbox-gl-minimap'; // 创建地图 const map = new MapboxGl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [0, 0], zoom: 2, }); // 添加 MiniMap 控件 const minimap = new MapboxGlMinimap({ center: [0, 0], zoom: 0, mapboxgl: MapboxGl, }); map.addControl(minimap); ``` 在上面的代码中,我们首先导入了 Mapbox GL JS 库和 MiniMap 控件。然后,我们创建了一个地图对象,并使用 `addControl()` 方法将 MiniMap 控件添加到地图中。 请注意,我们还需要引入 MiniMap 控件的 CSS 文件。您可以在 `mapbox-gl-minimap` 包中找到它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值