更新记录

0.9.0(2026-07-19)

  • 首发:33 个 API——坐标系互转 12(WGS84/GCJ02/BD09,单点 + 百万级批量)、地理围栏 4 + FenceLib 对象(R-tree 加速批量查询)、轨迹处理 7(抽稀/限速滤波/平滑/统计/停留点)、几何 4(面积/缓冲区/凸包)。
  • Android / iOS 双端出包。
  • 核心算法 72 项自动化测试全量通过;真机端到端回归持续推进中。

平台兼容性

uni-app x(5.14)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 12 × ×

nex-geo

自研高性能原生地理计算核心,提供 uni-app 可调的同步 JS API。面向外卖 / 物流 / 打车 / 运动轨迹类应用:国内坐标系互转、地理围栏判定、轨迹处理,纯本地计算、无网络、无权限。

仅 App 端(Android / iOS):依赖原生库,H5 / 小程序加载不了。 架构:同步调用(函数 ≤ 几百 ms 纯计算,主线程直调);围栏库是有状态对象 FenceLib。 坐标约定:全文 (lon, lat) 经度在前(业内标准);批量数据用扁平 number[][lon,lat,lon,lat,...])。

API(33 个)

坐标系互转(12)

单点 (lon, lat) → { lon, lat }

  • wgs84ToGcj02 / gcj02ToWgs84 —— WGS84(GPS 原始)↔ GCJ02(火星坐标,高德/腾讯)
  • gcj02ToBd09 / bd09ToGcj02 —— GCJ02 ↔ BD09(百度)
  • wgs84ToBd09 / bd09ToWgs84 —— WGS84 ↔ BD09(复合转换)

批量 扁平 number[] → number[](同名 + Batch 后缀,百万级):

  • wgs84ToGcj02Batch / gcj02ToWgs84Batch / gcj02ToBd09Batch / bd09ToGcj02Batch / wgs84ToBd09Batch / bd09ToWgs84Batch

地理围栏(4 自由函数 + FenceLib 对象)

  • pointInPolygon(lon, lat, polygon)boolean
  • pointsInPolygon(flatPoints, polygon)boolean[]
  • pointInGeojson(lon, lat, geojson)boolean
  • distanceToPolygonEdge(lon, lat, polygon)number(米,Haversine)
  • FenceLib(有状态围栏库,R-tree 加速):new FenceLib() / addPolygon(name, polygon) / addGeojson(geojson) → 导入数 / queryPoint(lon, lat) → 命中名称 string[] / queryPointsBatch(flat) → 每点命中 string[][] / count()

轨迹处理(7)

  • trackSimplify(flat, toleranceM)number[](Douglas-Peucker 抽稀)
  • trackFilterByMaxSpeed(flat, timestampsMs, maxSpeedMs){ kept, keptIdx }(限速剔除漂移点)
  • trackSmoothMovingAverage(flat, windowSize) / trackSmoothMedian(flat, windowSize)number[]
  • trackSmoothKalman2d(flat, timestampsMs, processNoise, measurementNoise)number[](2D 卡尔曼)
  • trackStats(flat, timestampsMs){ totalDistanceM, durationMs, avgSpeedMs, maxSpeedMs, pointCount }(速度单位 m/s,乘 KM_PER_H 得 km/h)
  • trackDetectStops(flat, timestampsMs, maxRadiusM, minDurationMs)StopPoint[]

几何(4)

  • polygonArea(polygon) / polygonAreaGeojson(geojson)number(平方米)
  • bufferPoint(lon, lat, radiusM, segments)Polygon(圆形缓冲区近似多边形)
  • convexHull(flatPoints)Polygon(凸包)

类型

  • Coord { lon, lat }
  • Polygon { rings: Coord[][] }rings[0]=外环 CCW,rings[1..]=洞 CW)
  • TrackStats / StopPoint / TrackFilterResult
  • 常量 KM_PER_H = 3.6(m/s → km/h)
  • helper coordToFlat(Coord[]) → number[] / flatToCoord(number[]) → Coord[](对象数组 ↔ 扁平数组)

最小用例

import { wgs84ToGcj02, FenceLib } from '@/uni_modules/nex-geo';

// GPS 原始坐标转高德/腾讯可用坐标
const p = wgs84ToGcj02(116.404, 39.915);

// 围栏库
const lib = new FenceLib();
lib.addPolygon('园区A', { rings: [[{lon:116.3,lat:39.9},{lon:116.5,lat:39.9},{lon:116.5,lat:40.0},{lon:116.3,lat:40.0},{lon:116.3,lat:39.9}]] });
const hits = lib.queryPoint(116.4, 39.95); // ['园区A']

错误(抛出的 Error)

InvalidParam / ParseGeoJson / OutOfBounds / EmptyInput / InternalError

当前状态(v0.9.0):核心算法 72 项自动化测试全量通过;真机端到端回归持续推进中。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据。所有计算/处理均在本地完成,无任何网络请求、不发送数据到任何服务器。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。