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

zh-mapbox

v0.1.84

Published

mapbox的常用方法

Readme

zh-mapbox

介绍

封装了一些mapbox的常用方法

使用

import { RegisterMapBoxMethod } from 'zh-mapbox'

let mapboxgl = require('mapbox-gl')
require('mapbox-gl/dist/mapbox-gl.css')
//注册常用方法
RegisterMapBoxMethod(mapboxgl)
import { RegisterMapBoxModel } from 'zh-mapbox'

import * as THREE from 'three'
import GLTFLoader from 'three/examples/js/loaders/GLTFLoader'
//注册模型相关方法(前提先注册常用方法)
RegisterMapBoxModel(THREE,GLTFLoader)

方法概览

注册常用方法后 map.on('layerdata') 可监听图层的添加与删除

Map

| 方法名 | 参数 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------- | | RegisterMapBoxMethod(mapboxgl,defaultSource?:string[]) | mapboxgldefaultSource:默认不进行删除或查找的源 | 注册方法 | | removeAllLayerAndSource(defaultSource?:string[]) | defaultSource:默认不进行删除的源 | 删除所有图层和源 | | getAllLayerAndSource(defaultSource?:string[])-(0.0.24) | defaultSource:默认不获取的源 | 获取所有图层和源 | | findCustomLayer(type?:string[]|string,defaultSource?:string[]) | type:查找类型defaultSource:默认不查找的源 | 查找自定义的图层 | | MapTooltip(layerName:string|string[],options:Popup.options) | layerName:图层名称options:继承mapbox Popup的参数 | (实例)地图提示框 | | MapPopup(layerName:string|string[],options:Popup.options) | layerName:图层名称options:继承mapbox Popup的参数 | (实例)地图弹出框 | | MapLine | - | (实例)地图绘制线 | | MapCustom | - | (实例)地图其他绘制(默认symbol) | | MapCircle | - | (实例)地图绘制圆 | | MapEvent-(0.0.24) | layerName?:图层名称 | (实例) 自定义事件 | | MapMarker(options)-(0.0.24) | options:marker参数 | (实例)绘制marker | | MapMoreCustom-(0.0.24) | - | (实例)多图层方法 | | fitBoundsGeoJson(geojson:any,options:Camera.options) | geojsonoptions:相机相关参数 | 聚焦到geojson | | fitBoundsPosition(position:array<array>,options:Camera.options) | position:四至位置options:相机相关参数 | 聚焦到四至位置 | | getInvertMask(geojson:any,options:{id:string,layerConfig:any}):layer | options.id:遮罩idoptions.layerConfig:图层layer样式配置 | 获取geojson反向区域 | | loadImages(urls:{key:string|{url:string,...args}}):Promise<{key:value}> | urls:图片对象集合key:图片名称 ->图片地址 | 加载多张图片 | | loadAddImages(url:{key:string|{url:string,...args}}) | urls:图片对象集合key:图片名称 ->图片地址 | 加载多张图片同时加载到地图上 | | removeLayerSource(options:{name:string|array,layers?:array,sources?:array}) -(0.0.24) | name: 图层和源id(图层和源相同)layers?图层idsources?源id | 移除图层和源 | | removeLayerEvent(event:object,clear)-(0.0.24) | event: 移除的事件对象clear:清除对象 true -(0.0.73) | 移除图层定义的事件 | | findCustomIcon-(0.0.24) | - | 查找自定义的图标 | | setStyle(style,option,callback?)-(0.0.24) | styleoptions{save是否保存图片、源、图层source?:['composite']不保存的源和图层}callback?保存操作后回调 | 设置地图样式(同地图原来设置) | | removeEvents(events?:string[])-(0.0.24) | events:['click', 'mousemove', 'mouseout'] | 删除事件 | | removePopup(type:popup|tooltip)-(0.0.24) | type:弹窗类型 | 移除弹窗 | | getCustomLayer()-(0.0.54) | - | 获取type:custom的图层 | | getLayerIndex(id) -(0.0.66) | 图层id | 根据图层id获取层级 | | getLayerId(index,after)-(0.0.66) | index:图层层级after:之后的层级数 | 根据层级获取图层id | | getMinLayerId()-(0.0.66) | - | 获取最小层级id | | getMaxLayerId()-(0.0.66) | - | 获取最大层级id | | getAllLayerId()-(0.0.71) | - | 获取所有图层id | | getAllLayer()-(0.0.71) | - | 获取所有图层 | | getLineLayer()-(0.0.71) | - | 获取线图层 | | AnimateLine(name,options)-(0.0.73) | name:图层idoptions?:{dash?:变化的数组step?:段数} | 线动画 | | setPaint(id,options)-(0.0.108) | id:图层idoptions:{key:属性名value:属性值} | 修改paint | | setLayout(id,options)-(0.0.108) | id:图层idoptions:{key:属性名value:属性值} | 修改layout | | customStyle(options)-(0.0.108) | options:{key:string,value:[color,opacity]} | 修改地图style | | clearData()-(0.0.108) | - | 清除数据(初始化时调用 0.0.122版本之前) | | initData()-(0.1.0) | - | 初始化数据(必须初始化) | | getTileByPosition(position,zoom?)-(0.0.108) | position:[lng,lat]zoom?:number | 根据经纬度获取瓦片 | | getPositionByTile(range)-(0.0.108) | range:[x,y,z] | 根据瓦片获取经纬度四至 | | getTilesByBounds(zoom,options)-(0.0.114) | zoom:层级options:{expand:number 扩散瓦片数量reversal:boolean 反转排列方式} | 根据层级获取当前视口瓦片 | | loadSpriteGraph(sprite)-(0.0.114) | sprite:{image:string 图片地址json:string|object json数据} | 加载精灵图 | | MapClusterMarker(options)-(0.0.114) | options: marker参数 | 聚合marker | | MapSourceEvent(name,options)-(0.0.114) | name:sourceoptions:{once:true 执行一次sourceLayer: 图层源 vector时必传filter:过滤} | 获取source源信息 | | TileByGeoJson(options)-(0.1.0) | options:{maxZoom:18 最大层级minZoom:0 最小层级expand:0 扩展瓦片数isGCJ:false 是否GCJ坐标replaceUrl:Function 替换urlisJudgement:false 是否判断瓦片judgementBox:Function 四至判断方法judgementPoint:Function 坐标判断方法filter:Function 设置滤镜coordTransform:Function 坐标转换judgeBound:true 是否先判断边界isPrecision:true 是否提升精度minShow:true 小于最小层级是否显示maxShow:true 大于最大层级是否显示textureType:'NEAREST'|'LINEAR'图像混合模式gradualLoad:false 渐进加载图片isThrottle:true 使用节流fetchOptions:fetch配置参数cacheExpire:0 缓存失效分钟(0不失效)useWorker:true 使用webwork} | 裁剪区域 | | MapMenu(options)-(0.1.0) | options:{move:false 菜单是否跟随移动className:string } | 右键菜单 | | MapMeasure(options)-(0.1.1) | options:{...} | 地图测量 | | MapTileClusterCustom(options)-(0.1.6) | options:{} | 切片聚合 | | MapLabelByGeoJson()-(0.0.39) | | 过滤地图标签 | | MapImageByGeoJson(options)-(0.0.39) | options:{sourceConfig:{}} | 图像图层 | | getMapLayer()-(0.1.47) | | 获取所有添加的图层 | | clearMapLayer(names?,clear?)-(0.1.47) | names:string|string[]适用于MapLayer的名称clear:boolean 清除或者保留 | 清除所有添加的图层 | | setLayerOrder(order)-(0.1.49) | order:true (排最后) | zIndex图层排序方式 | | setDefaultLayerIndex(index)-(0.1.49) | index:number | 图层添加默认zIndex | | lazyLoadAddImages(urls)-(0.1.51) | urls:{key:any} | 懒加载图片 | | MapSelectBox(options)-(0.1.60) | options:{} | 地图框选 | | isPointOnEarth(lnglat,strict)-(0.1.60) | lnglat:{lng:number,lat:number}strict:boolean 更严格的判断[false] | 点是否在地图上 | | AnimateMarker()-(0.1.66) | | 图标动画 | | MapMoreLayer()-(0.1.74) | | 绘制图层 | | MapInteraction(options)-(0.1.76-v3) | options:{reset?:Function 重置交互方法} | 地图交互 | | getInteractions()-(0.1.76-v3) | | 获取所有地图交互 | | loadModels(models)-(0.1.76-v3) | models:{key:string} | 添加模型 | | isPaintProperty(id,property)-(0.1.79) | | 是否属于paint | | loadIconset(url,options,callback)-(v3) | | 加载pbf图标 |

Map.Style

| 方法名 | 参数 | 描述 | | ------------------------------ | -------------- | ---------------------------------------------- | | loadSprite(url)-(0.0.24) | url:精灵图地址 | 加载精灵图( findCustomIcon 可以查询到) |

| 方法名 | 参数 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -------- | | RegisterMapBoxModel(THREE,GLTFLoader) | THREE:threejsGLTFLoader:模型加载器 | 注册模型 | | initGLTF(id:string,options:{},callback:function) | id:模型名称options:{lngLat:经纬度height:高度scale:缩放url:地址(绝对地址/网络地址)rotate:旋转 [x,y,z]AmbientLight:环境光 {show:boolean,...args:three.ambient}DirectionalLight :平行光 [ three.directional]PointLight:点光源 [three.PointLight]click:是否开启点击事件properties:属性}callback:点击回调 返回{lngLat,properties} | 加载模型 |

方法

MapTooltip

| 方法名 | 参数 | 描述 | | -------------------------------------------------- | ------------------------------------------------------------ | ------------ | | show(callback:function,type?:string) | callback:返回tooltip显示的信息,或者{data:...,show:boolean}(properties)=>{}type:显示类型 默认跟随点位 ‘move’:跟随鼠标 | 显示提示框 | | destroy() | - | 销毁 | | setClassName(className:string,isFull:boolean) | className:类名isFull:false 是否全类名 | 设置类名 | | mouseInOut(callback:function)-(0.1.21) | | 鼠标进入离开 | | showPosition(lnglat,properties)-(0.1.21) | | 指定位置显示 |

MapPopup
options:{
	...,
	destroyComponent=false,//关闭时是否销毁组件
	customClick=false,//是否自定义点击事件
	popupClose=false,//关闭时是否调用组件内popupClose()方法,vue组件
	closeOther=true,//弹窗打开时关闭其他弹窗
	noCloseLayerName:string[],//不关闭的弹窗名称
	closeClick//点击关闭按钮执行的方法
}

| 方法名 | 参数 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -------------- | | show(callbackComp:function,callback?:function) | callbackComp:弹出框内显示的组件callback:弹出框打开后回调 | 显示弹出框 | | close() | - | 关闭弹出框 | | closeBack(callback:function) | callback:弹出框关闭的回调 | 弹出框关闭回调 | | destroy() | - | 销毁 | | showPosition(lnglat:LngLatLike,component:vueComponent,options,callback) | lnglat:经纬度位置component:vue组件options:{offset:[]}偏移callback 回调 | 直接显示弹出框 | | setClassName(className:string,isFull:boolean) | className:类名isFull:false 是否全类名 | 设置类名 |

MapLine

| 方法名 | 参数 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -------- | | draw(geojson:GeoJson,name:string,options):array(图层名称数组) | geojsonname:图层idoptions:{beforeId:在那个图层之下layerConfig:图层配置lineConfig?:额外高亮线配置sourceConfig?:源配置(0.0.23)} | 绘制线 | | destroy() | - | 销毁 | | visible(show)-(0.0.71) | show:boolean | 显示隐藏 |

MapCustom

| 方法名 | 参数 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | -------- | | draw (geojson:GeoJson,name:string,options):array(图层名称数组) | geojson name:图层id options:{ beforeId:在那个图层之下 layerConfig:图层配置 type:图层类型 ’symbol‘sliceNum?:数据分割加载数sourceConfig?:源配置(0.0.23) } | 绘制图层 | | destroy() | - | 销毁 | | visible(show)-(0.0.71) | show:boolean | 显示隐藏 |

MapCircle

| 方法名 | 参数 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ----------- | | draw (geojson:GeoJson, name:string,options): array(图层名称数组) | geojson name:图层id options:{ beforeId:在那个图层之下 layerConfig:图层配置 radius:范围(km)steps:圆边数(64)endRadius?:结束范围(km)lingConfig?:边框线配置sourceConfig?:源配置(0.0.23) } | 绘制圆/圆环 | | destroy() | - | 销毁 | | visible(show)-(0.0.71) | show:boolean | 显示隐藏 |

MapEvent

| 方法名 | 参数 | 描述 | | ---------------------------------------- | ---------------------------------------------------------- | -------- | | add(event:{[key]:function}) | event:{'key':事件名称function:事件函数} | 添加事件 | | destroy(array?) | array?:移除的事件名称不传移除全部 | 移除事件 |

MapMoreCustom
layerConfig:{
	id,
	type,
	beforeId,
	...
}

| 方法名 | 参数 | 描述 | | ------------------------------------------------------ | ------------------------------------------------------------ | ---------- | | drawgeojson:GeoJson,options:):array | geojsonoptions:{sourceConfig:{id,type?,...}layerConfig:[]|{}} | 添加多图层 | | destroy() | - | 销毁 | | visible(show)-(0.0.71) | show:boolean | 显示隐藏 |

MapMarker

| 方法名 | 参数 | 描述 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------- | | draw(geojson:GeoJson,htmlCallback:function) | geojsonhtmlCallback({lngLat,properties}) | 绘制marker | | addEvent(events:{[key]:function}) | events:{dragstart?:function,drag?:function,dragend?function} | 添加事件 | | destroy() | - | 销毁 | | visible(show)-(0.0.71) | show:boolean | 显示隐藏 |

AnimateLine

| 方法名 | 参数 | 描述 | | ------------- | ---- | -------- | | animate() | - | 开始动画 | | destroy() | - | 销毁动画 |

MapClusterMarker

| 方法名 | 参数 | 描述 | | ----------------------------------------- | --------------------------------------------------------- | ---------- | | draw( sourceName,htmlCallback ) | sourceName:源名称htmlCallback ({lngLat,properties}) | 绘制marker | | destroy() | - | 销毁 | | visible(show) | show:boolean | 显示隐藏 |

MapSourceEvent

| 方法名 | 参数 | 描述 | | -------------------- | --------------------- | -------- | | open(callback) | callback 结果返回方法 | 开启事件 | | destroy() | - | 销毁事件 |

TileByGeoJson

| 方法名 | 参数 | 描述 | | ------------------------------ | ------------------------------------------------ | -------- | | draw(json,url,id,beforeId) | json:边界jsonurl:地址idbeforeId | 绘制 | | destroy() | | 销毁 | | visible(show) | show:boolean | 显示隐藏 |

MapMenu

| 方法名 | 参数 | 描述 | | ----------------------------- | -------------------------- | ------------ | | init(element,callback) | element:dom元素或者字符串 | 初始化 | | visible(show) | show :boolean | 显示隐藏菜单 | | updateXY(xy) | xy:{x:number,y:number} | 更新坐标 | | destroy() | | 销毁 |

MapMeasure

options:

{ 
  type: 'line' | 'circle' | 'polygon' | 'rect' | 'sector', //测量类型 line
  fixed: number|[number,number], //保留小数位 2
  dash: boolean,//是否启用虚线 true
  units: { //单位 
	line: [string, string],//[km,m]
    circle: [string, string], //[km²,m²]
    polygon: [string, string],//[km²,m²]
    rect: [string, string], //[km²,m²]
    sector: [string, string]//[km²,m²]
   },
   className: string,//元素类名
   point: { //点属性
       color: string, //颜色
       radius: number,//大小
       strokeWidth: number, //描边宽度
       strokeColor: string//描边颜色
   }, 
   line: { //线属性
       color: string, //颜色
       width: number, //宽度
       dasharray: [number, number] //虚线大小
    }, 
    fill: { //填充属性
        color: string //颜色
    } ,
    calcAll:boolean, //鼠标移动计算总距离/与上一点距离
    showLabel:boolean,//是否显示标签
    showArea:boolean,//是否显示面积标签
}

| 方法名 | 参数 | 描述 | | ------------------- | --------------------- | ------------ | | draw(callback?) | callback 绘制完成回调 | 开启绘制 | | off() | | 停止监听 | | remove() | | 清除绘制 | | visible(show) | show:boolean | 显示隐藏 | | destroy() | | 销毁 | | getJson() | | 获取测量结果 |

MapTileClusterCustom

| 方法名 | 参数 | 描述 | | -------------------------------------------------- | ------------------------------------------------------------ | -------- | | draw(json,options,callback?) | json:vector源options:{sourceConfig:{},layerConfig:{}|[]}callback:custom为true 自定义 | 绘制 | | visible(show) | show:boolean | 显示隐藏 | | destroy() | | 销毁 |

MapLabelByGeoJson

| 方法名 | 参数 | 描述 | | --------------------------------------- | --------------------------------------------------- | ---------------- | | draw( json, sourceName,options) | json:遮罩json sourceName:源 options:{sourceLayer?} | 绘制 | | visible(show) | show:boolean | 显示隐藏 | | visibleOrigin(show) | | 原始图层显示隐藏 | | update(json) | | 更新 | | destroy() | | 销毁 |

MapImageByGeoJson

| 方法名 | 参数 | 描述 | | ------------------------------ | ----------------------------------- | -------- | | draw( json, key, callback) | json key:图像字段 callback 绘制参数 | 绘制 | | visible(show) | show:boolean | 显示隐藏 | | destroy() | | 销毁 |

const layer = map.MapImageByGeoJson()
      // url 优先取callback值 没有则取properties.url
      layer.draw(polygonJson, 'url', (e) => {
        return {
          beforeId:null,
          url: e.properties.url,
          distance: 0,//平移距离
          direction: 0,//平移方向 正北
          rotation: 30,//旋转角度
          pivot: null,//旋转中心 [number,number]
          factor: 1.0,//缩放比例
          origin: null,//缩放锚点 [number,number]
          //raster style
          paint: {
            'raster-hue-rotate': 45
          }
        }
      })
MapSelectBox
options:{
 cursor:string,//鼠标样式
 line:{
   color:string,//线颜色
   width:number,//线宽度
   opacity:number,//线透明度
   dash:number[]//虚线样式
 },
 fill:{
   color:string,//填充颜色
   opacity:number,//填充透明度
 }
}

| 方法名 | 参数 | 描述 | | ------------------- | ----------------------- | -------- | | draw( callback) | callback 框选完成的回调 | 开启绘制 | | off() | | 停止监听 | | remove() | | 清除绘制 | | visible(show) | show:boolean | 显示隐藏 | | destroy() | | 销毁 |

AnimateMarker
options:{
	from,//起点
	to,//终点
	duration,//时长
	ease,//缓动函数
	callback//json回调
}

| 方法名 | 参数 | 描述 | | ------------------- | ---- | -------- | | start( options) | | 开启动画 | | update(options) | | 更新动画 | | stop() | | 停止动画 | | destroy() | | 销毁 |

MapMoreLayer
sourceConfig:{
  id,
  ...
}
layerConfig:{
	id,
	beforeId,
	...
}
layerConfig:[
    {},
    {}
]

| 方法名 | 参数 | 描述 | | ----------------------------------- | ------------------------------------------ | -------- | | draw( sourceConfig,layerConfig) | sourceConfig源配置layerConfig 图层配置 | 开启绘制 | | visible(show) | show:boolean | 显示隐藏 | | destroy() | | 销毁 |

MapInteraction

| 方法名 | 参数 | 描述 | | ---------------------- | -------------------------- | -------- | | open(interactions) | interactions:object|array | 开启 | | reset() | | 重置交互 | | destroy() | | 销毁 |

公共方法

| 方法名 | 参数 | 描述 | | -------------------------------- | ---------------------------------------------------- | ------------------------------- | | isValidNumber(number) | number | 判断数字是否为有效数字 | | deepClone(data) | data | 深度克隆 | | hexToRgba(color,pure) | color:十六进制颜色pure:false 是否返回数组格式 | hex颜色转rgba颜色 | | isGeoJSON(data) | data | 浅判断是否为geojson格式 | | isNumber(number) | number | 判断是否为数字 字符串类型也为真 | | judgeSizeLngLat(point,isLng) | point:经纬度数字isLng:true 是否经度在前 | 反转经纬度 | | object2Geojson | | 对象转geojson | | resversalGeojson | | 反转geojson | | reversalGeojson | | 反转geojson | | reversalLngLat | | 反转多维经纬度 | | mergeGeoJson | | 合并geojson | | getPositionType | | 判断多维数组类型 | | getArrayDepth | | 获取多维数组深度 | | latFromMercatorY | | 墨卡托转纬度 | | lngFromMercatorX | | 墨卡托转经度 | | outOfChina | | 判断点是否在国内 | | gcj02ToWgs84 | | gcj02转wgs84 | | wgs84ToGcj02 | | wgs84转gcj02 | | gcj02ToBd09 | | gcj02转bd09 | | wgs84ToBd09 | | wgs84转bd09 | | bd09ToWgs84 | | bd09转wgs84 | | bd09ToGcj02 | | bd09转gcj02 | | getSymbolRipple | | 动态canvas点 | | transformGeojson | | 自定义转换geojson | | transformLngLat | | 自定义转换position | | performChunk | | 分片执行长任务 | | getGifSymbol | | gif图标 | | getAPNGSymbol | | apng图标 | | convertPolygonToLinePolygon | | 面转成线面 | | pointNearOnLine | | 距离目标点最近的线上的点 | | polygonCenter | | 面中心点 | | invertMask | | 反转区域 | | judgePointInPolygon | | 点是否在多边形内 | | isValidLngLat | | 是否是有效经纬度 | | isValidCoordinates | | 是否为有效经纬度数组 | | metersToPixels | | 计算像素宽度 |

使用

import TestPopup from '@/views/TestPopup'
 map.addSource('point', {
      'type': 'geojson',
      'data': {
        'type': 'FeatureCollection',
        'features': [
          {
            'type': 'Feature',
            'properties': {
              name: '123'
            },
            'geometry': {
              'type': 'Point',
              'coordinates': [115, 30]
            }
          }
        ]
      }
    })
    map.addLayer({
      'id': 'point',
      'type': 'circle',
      'source': 'point',
      'paint': {
        'circle-radius': 10,
        'circle-color': '#007cbf'
      }
    })
    const tooltip = map.MapTooltip('point')
    tooltip.show((properties) => {
      return properties.name
    })
	const popup=map.MapPopup('point')
    popup.show(({properties,lngLat})=>{
        //转换vue组件 得到$el以及vue实例
        ...
        return {component:$el,instance:instance}
    },({lnglat,properties})=>{})
beforeDestroy(){
    //销毁
	tooltip.destroy()
	popup.destroy()
}