经纬志
首页 / Leaflet / API 文档

ImageOverlay

先看结论

把一张普通图片按地理范围铺在地图上,随缩放一起变形。

最后验证 2026-11-03 · Leaflet 1.9.4 · 更新 2026-10-28 · 引用本文
L.imageOverlay(imageUrl, bounds, options) → ImageOverlay

参数

参数类型说明
imageUrlString图片地址,可为相对路径、data URL 或 HTMLImageElement
boundsLatLngBounds图片四边对应的地理范围,[[南, 西], [北, 东]]
optionsObject透明度、层级与跨域选项,见下表

选项

选项默认值说明
opacity1整体不透明度
alt''图片的替代文本
interactivefalse是否响应点击等鼠标事件
crossOriginfalse是否带 crossorigin 请求;要在 canvas 里合成时必须开
errorOverlayUrl''图片加载失败时替换的地址
zIndex1同一 pane 内的层级
className''附加 class,用于 CSS 滤镜等
pane'overlayPane'所在 pane,改用自定义 pane 可控制压盖关系

成员

成员返回值说明
setUrl(url)this替换图片地址,保留当前范围与样式
setBounds(bounds)this重新设定图片覆盖范围
getBounds()LatLngBounds当前范围
setOpacity(opacity)this改透明度,值域 0–1
setStyle({ opacity })thisFirefox 下等价于 setOpacity
setZIndex(zIndex)this调整叠放层级
bringToFront() / bringToBack()this置于同 pane 图层的前/后
getElement()HTMLImageElement取到底层 img,可读 naturalWidth
var bounds = [[39.880, 116.360], [39.940, 116.450]];

var overlay = L.imageOverlay(
  'https://example.com/radar/2026-10-28-08.png',
  bounds,
  { opacity: 0.55, crossOrigin: true, zIndex: 2 }
).addTo(map);

/* 逐帧切换,用 setUrl 而不是重建图层,避免闪烁 */
var frames = ['08.png', '09.png', '10.png'];
var i = 0;
setInterval(function () {
  i = (i + 1) % frames.length;
  overlay.setUrl('/radar/' + frames[i]);
}, 1200);

/* 放在 canvas 里合成导出时,范围要从图片自身尺寸推算 */
var b = overlay.getBounds();
console.log(b.getSouth(), b.getWest(), b.getNorth(), b.getEast());

图片必须是等距圆柱投影的矩形。bounds 的四边会分别贴到 图片的四边,Leaflet 不会做透视或裁剪。带投影参数的产品图(比如 NC 文件渲染出的 等经纬度栅格)才能直接用;墨卡托投影的 GeoTIFF 需要先重投影成 3857 或切片成瓦片。

跨域图片加 crossOrigin: true 时,服务器必须返回 Access-Control-Allow-Origin,否则图片不显示。若只是展示, 保持默认 false 更稳;要读像素或导出 canvas 才开启。

引用本文

经纬志(2026)。《ImageOverlay》。https://www.jingweizhi.com/leaflet/api/image-overlay.html(访问日期 2026-11-03)。