地面分析、组网、通道图、定量、ERA5 单列填色、风场和天气雷达平面 / 射线都能按多边形收场。从各产品的「能力」进入。clipField 收 rows / cols,界外写成 NaN,只改记录,不读文件。显示裁走实例 setClipPath。对照着图看:地面分析、组网、通道图、定量、ERA5、风场、雷达平面、雷达射线。测风、风暴不开放。
调用
import { clipField } from '@dingnl/ltvis-map/process'
import { createFieldLayer } from '@dingnl/ltvis-map/layer'
const clipped = clipField(parsed.values, {
// 要裁的列,与 parse 相同
product: 'tem',
boundary
})
const layer = createFieldLayer({
// 铺色用原场。不要把 clipField 的 NaN 场喂给图层
data: parsed.values,
// 画哪一列,与 parse 相同
product: 'tem'
})
layer.addTo(map)
// 贴边,不改记录
layer.setClipPath(boundary)clipField 改数值:界外格子写成 NaN,数组变短。格心在面内才留(PostGIS ST_Clip 默认、GDAL gdal_rasterize 默认)。这只给导出 / 统计。setClipPath 按省界矢量贴边,不改记录;铺色后 drawImage + destination-in 剪到画布像素。identify / 提示框:落点在 setClipPath 面外,或该格已是 NaN,都返回空。getBounds() 有贴边时是裁剪区域与场的相交框;取消裁剪或没贴边时仍是整场记录框。clipField 后用 setOption 换记录,四至也跟着变。铺色必须用未打孔的原场:格心 NaN 会在逐格、渐变外缘留下格距台阶;等值面按邻格双线性取样,才会看起来齐。取消裁剪时 setClipPath(null),记录不用换。
参数
| 字段 | 说明 |
|---|---|
product | 要裁的列名,与 parse 的 product 相同。例如 tem、pre、hail、rh |
boundary | GeoJSON Polygon / MultiPolygon / LineString / MultiLineString / Feature / FeatureCollection,或 [{ lon, lat }] 环数组。闭合线划按面收,只并、不挖 |
边界和格网不相交、或面内没有格心,会报错。换边界只需重跑 clipField,不必重新解析文件。
气温换算
parse 出口跟原件。要自己拿摄氏 / 开尔文记录(导出、统计)再用下面两个函数。铺色不要先转再喂工厂,工厂写 convert。
import { kelvinToCelsius, kelvinToCelsiusValue, celsiusToKelvin } from '@dingnl/ltvis-map/process'
const celsius = kelvinToCelsius(parsed.values[0], { product: 't2m' })
const kelvin = celsiusToKelvin(parsed.values[0], { product: 'tem' })
// 铺色用单值函数,不要把记录换算结果再喂给工厂
// convert: kelvinToCelsiusValue只改传入的那一列。缺测不动。公式是 °C = K - 273.15。
气压换算
parse 出口跟原件。要自己拿百帕 / 帕斯卡记录(导出、统计)再用下面两个函数。铺色不要先转再喂工厂,工厂写 convert。msl 原件是 Pa,默认按 hPa 画。
import { pascalToHectopascal, hectopascalToPascal } from '@dingnl/ltvis-map/process'
const hpa = pascalToHectopascal(parsed.values[0], { product: 'msl' })
const pa = hectopascalToPascal(parsed.values[0], { product: 'msl' })只改传入的那一列。缺测不动。公式是 hPa = Pa / 100。不要把 msl / sp 写成 prs / slp。sp 也不是 msl。