首页 / Leaflet / API 文档
Control.Scale
先看结论
显示当前缩放下比例关系的控件,默认位于左下角。
L.control.scale(options) → Control.Scale
参数
| 选项 | 默认值 | 说明 |
|---|---|---|
position | 'bottomleft' | 控件所在角 |
maxWidth | 100 | 比例尺最大像素宽度,实际宽度取整到整齐的数值 |
metric | true | 是否显示公制(米、千米) |
imperial | true | 是否显示英制(英尺、英里) |
updateWhenIdle | false | 为 true 时只在移动结束后更新,省掉拖动中的换算 |
成员
| 成员 | 返回值 | 说明 |
|---|---|---|
addTo(map) | this | 挂载控件 |
remove() | this | 移除控件 |
getPosition() | String | 读取所在角 |
setPosition(position) | this | 更换位置 |
getContainer() | HTMLElement | 控件 DOM,用于改字号与配色 |
var scale = L.control.scale({
position: 'bottomleft',
maxWidth: 120,
metric: true,
imperial: false,
updateWhenIdle: false
}).addTo(map);
/* 同时显示公制与英制会撑成两行 */
L.control.scale({ maxWidth: 90, imperial: true }).addTo(map);
/* 比例尺文字随地图缩放自动重算,监听 zoomend 只用于读取 */
map.on('zoomend', function () {
console.log(map.getZoom(), scale.getContainer().textContent.trim());
});
比例尺是按地图中心的实际地面距离算的。控件用
containerPointToLatLng 取中心水平线上两点,再由
map.distance 求球面距离,所以读数本身没有纬度误差。
但它只代表中心一行像素的换算,同一屏内南北方向的像素对应的距离并不相同,
高纬度或大范围截图时不能拿这个值统一换算。
比例尺只反映「屏幕像素与地面距离」的关系,与容器实际 DPI 无关。打印或截图缩放后, 控件上的数值不再成立,需要在出图时另行标注。
经纬志(2026)。《Control.Scale》。https://www.jingweizhi.com/leaflet/api/control-scale.html(访问日期 2026-11-03)。