更新记录
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)→booleanpointsInPolygon(flatPoints, polygon)→boolean[]pointInGeojson(lon, lat, geojson)→booleandistanceToPolygonEdge(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 项自动化测试全量通过;真机端到端回归持续推进中。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12439287
赞赏 1934
赞赏
京公网安备:11010802035340号