npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

wlxmblayer

v1.0.3

Published

<!-- * @FilePath: README.md * @Author: wanglx * @Date: 2025-02-27 09:21:52 * @LastEditors: wanglx * @LastEditTime: 2025-02-27 09:21:54 * @Description: --> # 气象数据渲染

Readme

气象数据渲染

地图引擎为MapLibre GL

注意事项

  1. 请通过 npm install wlxmblayer进行安装;
  2. 请在页面中添加dom结构:<div id="g-map"></div>;可以自定义id名称,默认为'g-map';
  3. 请先初始化地图:new SMap(),然后使用其它图层;

导出的图层

export default SMap

export { mapboxgl, BaseLayer, GridDataLayer, GridValueLayer, MarkerLayer, DrawLayer, WindArrowLayer, FormatVelocityData, VelocityLayer, TyphoonLayer, EchartsLayer, RoamLayer, GridFluctuationLayer, utils, earcut };

| 类名 | 名称 | 说明 | | :------------: | :--------: | ---------------------------------------------- | | SMap | 地图 | 用于初始化地图 | | BaseLayer | 基础图层 | 抽象类,所有图层的基类,提供地图相关的共用方法 | | GridDataLayer | 格点填色图层 | 有剖面等功能 | | GridValueLayer | 格点填值图层 | | | MarkerLayer | 离散点打点 | 有聚合功能 | | DrawLayer | 绘制图层 | 绘制点、线、面、圆、多边形、态势图等 | | WindArrowLayer | 风矢量图层 | 绘制风羽、箭头 | | VelocityLayer | 流场图层 | 绘制流场 | | FormatVelocityData | 处理流场数据 | | | TyphoonLayer | 台风图层 | 绘制台风路径、风圈 | | EchartsLayer | echars图层 | 集成Echarts | | RoamLayer | 漫游图层 | 显示行驶轨迹 | | GridFluctuationLayer | 挤压 | 需要优化 | | utils | 工具包 | 计算图例、请求灰度图等 | | earcut | 第三方库 | 用于扁平数组、计算三角面 |

SMap

说明

  • 用于初始化地图,new SMap(options)

  • 继承自BaseLayer

  • 示例

  new SMap({
    mapType: ['TianDiTu.Normal.Map'],
    load: (map: mapboxgl.Map) => {
      console.log('地图加载完成');
    }
  })

参数

划重点,继承自MapboxOptions

| 参数名 | 类型 | 默认值 | 说明 | | ---- | :--- | ---- | ---- | |container | string | g-map | 地图dom元素的id | |mapType | mapType[] | ["TianDiTu.Normal.Map", "windy", "TianDiTu.Normal.Annotion"] | 1、加载的地图服务;2、数组为空时,不加载地图; 3、数组要素的顺序,即地图服务的加载顺序| | tdtTk | string | 非必填 | 天地图的key | | isDem | boolean | false | 是否显示地形 | | isShowClickResult | boolean | false | 添加地图点击事件,console.log 点击位置的经纬度 | | load | (map: mapboxgl.Map)=>void; | 非必填 | 地图加载完成后的回调 |

type mapType =
  //天地图电子地图
  | "TianDiTu.Normal.Map"
  //天地图电子地图标注
  | "TianDiTu.Normal.Annotion"
  //天地图等经纬度电子地图
  | "TianDiTu.Normal_Lonlat.Map"
  //天地图等经纬度电子地图
  | "TianDiTu.Normal_Lonlat.Annotion"
  //天地图卫星地图
  | "TianDiTu.Satellite.Map"
  //天地图卫星地图标注
  | "TianDiTu.Satellite.Annotion"
  //天地图地形图
  | "TianDiTu.Terrain.Map"
  //天地图地形图标注
  | "TianDiTu.Terrain.Annotion"
  //海图
  | "SeaMap";
  //区域边界
  | "windy";

方法

| 方法名 | 参数 | 说明 | | ---- | ---- | ---- | | changeMap | type: mapType[] | 切换地图 | | addMouseMoveShowLonlat | divId: string | 鼠标滑动时,显示经纬度 | | loadDem | exaggeration: number | 添加地形,参数为夸张系数,默认为 1 | | delDem | | 删除地形 | | getCenter | | 获取当前视图的中心点及视角信息 |

BaseLayer

说明

  • 抽象类,所有图层的基类,提供地图相关的共用方法

属性

| 属性名 | 类型 | 说明 | | ---- | ---- | ---- | | map | mapboxgl.Map | 实例化的地图 | | customLayerId | string | 自定义图层的id,色斑图、剖面等用的该图层 | | mapOptions | IOptions | 实例化组件时的参数 |

方法

| 方法名 | 参数 | 说明 | | ---- | ---- | ---- | | bindMap | mapId?: string | 绑定指定的mapId到地图实例,扩展图层时必须调用 | | createId | type: string | 生成id | | getLayer | | 获取当前图层 | | removeLayer | id?: string | 默认为当前图层的id | | loadImageArr | urlArr: string[] | 请求图片,返回 imgBitmap[] | | getDataByImages | urlArr: string[], replace?: Map<number, number>,xOffset = 1,yOffset = 1,scale = 1,isReverse = false | 获取灰度图的数据 |

 urlArr: string[] //灰度图的地址
 replace?: Map<number, number> //替换无效值
 xOffset = 1, //经度方向数据抽稀间隔
 yOffset = 1, //纬度方向数据抽稀间隔
 scale = 1, //数据缩放比例
 isReverse = false //是否上下反转

GridDataLayer

说明

  • 用于绘制色斑图,实现多高度层、雷达组合反射率、剖面等效果

  • new GridDataLayer(data, initOptions, cb)

  • 继承自BaseLayer

参数

| 参数名 | 类型 | 默认值 | 说明 | | ----------- | :------------------------------------ | ------ | ------------------------------------------------------------ | | data | ISourceData[] | 必填 | 二维数组的每一项,就是一个高度层的数据 | | initOptions | IGridOptions | 必填 | 见参数详情 | | cb | ICallback | 可选 | 渲染后的回调 |

参数详情:
type ISourceData = number[][]

interface IOptions {
  renderType: renderType[]; //渲染类型
  gridOptions: IGridOptions; //数据经纬度范围
  legend: ILegend[]; //图例
  invalidVal?: number[]; // 无效值
  range?: [number, number]; // 小于range[0],大于range[1]的数据,渲染为透明
  levelsLabel?: string[]; //多层数据时,显示的文本,默认取 gridOptions.levels 的值
  pane?: number; // 图层的层级,pane值大的,后渲染
  fontColor?: string; //文本的颜色
  fontSize?: string; //文本的大小
  shadowColor?: string; // 文本的阴影颜色 
  shadowBlur?: number; // 文本的阴影范围
  clipLonlat?: number[][]; // 根据给定的经纬度,对色斑图进行裁剪
}

type renderType = "bitmap" | "pixel" | "contour" //格点填色、颜色渐变、等值面

interface IGridOptions {
  startLon: number; //左下角的经度
  startLat: number;//左下角的纬度
  lonCount: number; //经度的栅格数量
  lonStep: number;//经度的步长
  endLon: number; //右上角的经度
  endLat: number;//右上角的纬度
  latCount: number;//纬度的栅格数量
  latStep: number;//纬度的步长
  levels?: number[]; //三维数据的高度
  altitude?: number; //高度
  altScale?: number; //高度的缩放比例
}

//按小于等于该值进行填色
interface ILegend {
  value: number
  color: [number, number, number, number?]
}

interface ICallback {
  render?: (status: string) => void;
  animation?: (status: string) => void;
}

属性

| 属性名 | 类型 | 说明 | | --------- | -------- | ---------------------------------------------- | | gridIndex | number | 多层数据,通过设置索引切换色斑图 | | setPane | number | 设置层级,层级大的,后渲染 |

方法

| 方法名 | 参数 | 说明 | | ---- | ---- | ---- | | addTo | mapId?: string | 绑定指定的mapId到地图实例 | | getDataByLonlat | lon: number, lat: number, heightIndex = 0 | 根据经纬度和高度层获取数据 | | addSection | type: sectionType = "cross" | 剖面渲染,有任意点、十字剖、旋转剖三种 | | removeSection | | 删除剖面 | | addMultipleHeight | | 多高度层渲染 | | removeMultipleHeight | | 删除多高度层渲染 | | addAreaMultipleHeight | | 任意区域渲染 | | removeAreaMultipleHeight | | 删除任意区域渲染 | | updateRenderType | val: renderType[] | 更新渲染方式 | | updateRange | range: [number, number] | 更新渲染的数据范围 | | updateData | data: ISourceData | 更新数据 | | updateAnimationData | data: number[], interval = 100, step = 0.1 | 以播放的形式更新数据 | | animation | interval = 100, step = 0.1, isStop = true, cb?: () => void | 动画播放 | | stopAnimation | type: animationType = "pause" | 停止/退出播放 | | removeLayer | | 删除图层 |

type sectionType = "morePoint" | "rotate" | "cross";
type refreshType = "all" | "vertex" | "color" | "index"
type renderType = "bitmap" | "bitmapNoLinear" | "pixel" | "contour"; // bitmapNoLinear,不渐变的格点填色
type animationType = "pause" | "quit"

GridValueLayer

说明

  • 格点填值

  • new GridValueLayer(data: number[][], initOptions: IGridValueOptions)

  • 继承自BaseLayer

参数

| 参数名 | 类型 | 默认值 | 说明 | | ----------- | :------------------------------------ | ------ | ------------------------------------------------------------ | | data | number[][] | 必填 | 二维数组的每一项,就是一个高度层的数据 | | initOptions | IGridOptions | 必填 | 见参数详情 |

参数详情:
type ISourceData = number[][]

interface IGridValueOptions {
  gridOptions: IGridOptions; // 经纬度范围
  invalidVal?: number[]; //无效值
  legend?: ILegend[]; // 图例
  offset?: number; //间距,默认50px
  fontColor?: string; //未给图例时的字体颜色,默认白色
  fontSize?: string; //字体大小,默认 14px
  shadowColor?: string; //字体阴影,默认 '#ccc'
  shadowBlur?: number; //阴影,默认 2px
}

//按小于等于该值进行填色
interface ILegend {
  value: number
  color: [number, number, number, number?]
}

方法

| 方法名 | 参数 | 默认值 | 说明 | | ------------ | ------------------- | --------- | ------------------------------------------------------------ | | addTo | mapId?: string | | 绑定指定的mapId到地图实例 | updateData | data: number[][] | | 更新数据 | | updateOffset | offset: number | | 更新数据间隔 | | setStyle | style: IGridValueStyle | | 修改文本样式 | | removeLayer | | | 删除图层 |

参数详情:
interface IGridValueStyle {
  fontColor?: string;
  fontSize?: string;
  shadowColor?: string;
  shadowBlur?: number;
}

WindArrowLayer

说明

  • 渲染风羽或者箭头

  • new WindArrowLayer(data: number[][], initOptions: IOptions)

  • 继承自BaseLayer

参数

| 参数名 | 类型 | 默认值 | 说明 | | ----------- | :------------------------------------ | ------ | ------------------------------------------------------------ | | data | number[][] | 必填 | 二维数组的每一项,就是一个高度层的数据 | | initOptions | IOptions | 必填 | 见参数详情 |

参数详情:
interface IOptions extends IGridValueOptions {
  dataType: "uv" | "sd"; //数据类型,uv风或者风速/风向
  isShowText?: boolean; //是否显示数值
  isArrow?: boolean; // 是否按箭头渲染
  windIconBitmap?: ImageBitmap; // 自定义图标
  windPlumePath?: string; //自定义风羽图标的地址
}

方法

| 方法名 | 参数 | 默认值 | 说明 | | ------------ | ------------------- | --------- | ------------------------------------------------------------ | | addTo | mapId?: string | | 绑定指定的mapId到地图实例 | updateData | data: number[][], dataType = "uv" | | 更新数据 | | updateOffset | offset: number | | 更新数据间隔 | | setStyle | style: IStyle | | 修改样式 | | removeLayer | | | 删除图层 |

参数详情:
interface IStyle { legend?: ILegend[]; fontSize?: string }

interface IGridValueStyle {
  fontColor?: string;
  fontSize?: string;
  shadowColor?: string;
  shadowBlur?: number;
}

MarkerLayer

说明

  • 渲染离散数据

  • new MarkerLayer(data: { [name: string]: any }[], initOptions: IOptions)

  • 继承自BaseLayer

参数

| 参数名 | 类型 | 默认值 | 说明 | | ----------- | :------------------------------------ | ------ | ---------------- | | data | { [name: string]: any }[] | 必填 | | | initOptions | MarkerIOptions[] | 必填 | 见参数详情 | | commonOptions | Partial<MarkerIOptions> | 非必填 | 见参数详情 |

参数详情:
interface MarkerIOptions {
  type: 'image' | 'text' | 'windPlume'
  field: string //数据字段的名称
  value?: number | string // 数据值等于该值时,进行渲染
  isCluster?: boolean //是否聚合
  clusterOptions?: {
    clusterRadius?: number // 聚合半径
    clusterMaxZoom?: number // 最大聚合缩放级别
    clusterMinPoints?: number // 最小聚合点数
    clusterProperties?: object  // 自定义聚合属性
  }
  lonLatAlias?: string[] //经纬度别名
  legend?: ILegend[] // 图例,控制显示文本的颜色
  wd?: string //风速的别名
  ws?: string // 风向的别名
  url?: string // 渲染类型为 image 时的 图片路径
  acUrl?: string // 渲染类型为 image,选中时的图片路径
  iconSize?: [number, number] // 渲染类型为 image 或者 text 时的大小
  iconAnchor?: [number, number] // 渲染类型为 image 或者 text 时的偏移
  className?: string // 类名,项目需要支持 tailwind.css
  invalidVal?: (string | number)[] // 文本的无效值
  suffix?: string //文本的前缀
  suffixClassName?: string //文本的前缀的类名
  prefix?: string //文本的后缀
  prefixClassName?: string // 文本的后缀的类名
  windPlumePath?: string // 渲染类型为 windPlume, 风羽的地址
  clickCallback?: (marker: Marker, props: { [name: string]: any }[]) => void 
  enterCallback?: (marker: Marker, props: { [name: string]: any }[]) => void 
  leaveCallback?: (marker: Marker, props: { [name: string]: any }[]) => void 
  moveCallback?: (marker: Marker, props: { [name: string]: any }[]) => void 
}

方法

| 方法名 | 参数 | 默认值 | 说明 | | ------------ | ------------------- | --------- | ------------------------------------------------------------ | | addTo | mapId?: string | | 绑定指定的mapId到地图实例 | updateMarkerActive | activeList: Marker[], unActiveList?: Marker[] | | 更新marker的选中状态 | | refresh | data: { [name: string]: any }[] | | 更新数据 | | removeLayer | | | 删除图层 |

参数详情:
activeList: 选中状态的marker
unActiveList: 清除选中状态的marker

interface IStyle { legend?: ILegend[]; fontSize?: string }

interface IGridValueStyle {
  fontColor?: string;
  fontSize?: string;
  shadowColor?: string;
  shadowBlur?: number;
}

DrawLayer

说明

  • 绘制矩形、多边形等

  • new DrawLayer(cb?: ICallback, drawStyleOptions?: Partial<DrawStyleOptionsType>)

  • 继承自BaseLayer

参数

| 参数名 | 类型 | 默认值 | 说明 | | ----------- | :------------------------------------ | ------ | ---------------- | | cb | ICallback | 非必填 | 见参数详情 | | drawStyleOptions | Partial<DrawStyleOptionsType> | 非必填 | 见参数详情 |

参数详情:

interface ICallback {
  drawOver?: (feature: GeoJSON.Feature) => void; //绘制完成后的回调
  analysisOver?: (feature: GeoJSON.Feature | null) => void; //空间分析完成后的回调
  actionable?: (e: any) => void; // 切换绘制方式时的回调
}

interface DrawStyleOptionsType {
  isMeasure?: boolean // 是否开启测量
  textColor?: string //字体颜色
  fontSize?: number //字体大小
  iconImage?: HTMLImageElement | string //可以为imagedom或者地址字符串
  iconSize?: number //icon大小
  lineWidth?: number //线条粗细
  lineColor?: string //线条颜色
  fillColor?: string //填充面颜色
  fillOpacity?: number //填充面透明度
}

方法

| 方法名 | 参数 | 默认值 | 说明 | | ------------ | ------------------- | --------- | ------------------------------------------------------------ | | addTo | mapId?: string | | 绑定指定的mapId到地图实例 | draw | mode: IDrawType, isMore = true | | 绘制,isMore为ture会连续绘制 | | colseDraw | | | 结束绘制 | | clear | ids?: string[] | | 清除绘制,不传参时,清除所有 | | removeLayer | | | 删除图层 |

参数详情:
type IDrawType =
  | "draw_line_string"
  | "draw_polygon"
  | "draw_rectangle"

GridFluctuationLayer

说明

  • 用于绘制挤压色斑图,new GridFluctuationLayer(data, initOptions, cb)

  • 继承自BaseLayer

参数

| 参数名 | 类型 | 默认值 | 说明 | | ----------- | :------------------------------------ | ------ | ------------------------------------------------------------ | | data | ISourceData[] | 必填 | 二维数组的每一项,就是一个栅格面的数据 | | initOptions | Exclude<IGridOptions, "levelList">; | 必填 | 见参数详情 | | cb | ()=>void | 可选 | 渲染后的回调 |

参数详情:
type ISourceData = number[][]

interface IOptions {
  gridOptions: Exclude<IGridOptions, "levelList">; //栅格数据的参数
  legend: ILegend[]; //图例
  invalidVal?: number[]; //无效数据
  range?: [number, number];//渲染该范围内的数据
}

interface IGridOptions {
  startLon: number; //左下角的经度
  startLat: number;//左下角的纬度
  lonCount: number; //经度的栅格数量
  lonStep: number;//经度的步长
  endLon: number; //右上角的经度
  endLat: number;//右上角的纬度
  latCount: number;//纬度的栅格数量
  latStep: number;//纬度的步长
  levelList?: number[]; //gridLayer不需要这个参数
  altitude?: number; //高度位置
  altScale?: number; //高度位置的缩放比例
}

//按小于等于该值进行填色
interface ILegend {
  value: number
  color: [number, number, number, number?]
}

属性

| 属性名 | 类型 | 说明 | | --------- | -------- | ---------------------------------------------- | | gridIndex | number | 如果传入了多个面的数据,通过设置索引切换色斑图 |

方法

| 方法名 | 参数 | 默认值 | 说明 | | ------------ | ------------------- | --------- | ------------------------------------------------------------ | | animation | interval | 200 | 按interval毫秒刷新一帧 | | | step | 0.1 | 按step的系数,进行插值 | | endAnimation | "pause" | "quit" | "pause" | 等于pause时,停止动画;等于quit时,退出动画,展示第一张色斑图 |

EchartsLayer

说明

  • 集成了ECharts,new EchartsLayer(option)

  • 继承自BaseLayer

参数

| 参数名 | 类型 | 默认值 | 说明 | | ------ | :--------- | ------ | ------------------------- | | option | ECOption | 必填 | 和Echarts的opions一致 |