# @sparta-utils/gps-transform-utils

一个支持 **三参数 / 七参数** 的 GPS 坐标转换工具，可用于 **WGS84 → CGCS2000 / 北京54** 的投影转换，并支持反向坐标还原。

> 基于 [proj4js](https://github.com/proj4js/proj4js)，适用于地理信息系统、测绘数据校正等场景。

---

## 📦 安装方式

```bash
npm install @sparta-utils/gps-transform-utils

```

## ✨ 功能特色
✅ 支持 三参数（ΔX, ΔY, ΔZ）转换

✅ 支持 七参数（含旋转角、比例）转换

✅ 自动判断中央经线（三度带）

✅ 支持反向投影（平面 → GPS 坐标）

✅ 支持 CGCS2000 / 北京54 坐标系

✅ TypeScript 强类型定义

## 🚀 使用示例
# 1️⃣ 三参数转换
```ts
import { gpsToPlaneBy3Params } from '@sparta-utils/gps-transform-utils';

const gps = { lng: 117.1234, lat: 39.1234 };
const params = { dx: 15, dy: -154, dz: -82 };

const result = gpsToPlaneBy3Params('北京54', params, gps);
console.log('三参数坐标:', result);
```

# 2️⃣ 七参数转换
```ts
import { gpsToPlaneBy7Params } from '@sparta-utils/gps-transform-utils';

const gps = { lng: 117.1234, lat: 39.1234 };
const params = {
  dx: 15,
  dy: -154,
  dz: -82,
  rx: 0.0,   // 秒
  ry: 0.0,
  rz: 0.0,
  scale: 0.0 // ppm
};

const result = gpsToPlaneBy7Params('北京54', params, gps);
console.log('七参数坐标:', result);
```
# 3️⃣ 反向还原（平面坐标 → GPS 坐标）
```ts
import { planeToGps } from '@sparta-utils/gps-transform-utils';

const plane = { x: 500320.888, y: 4321939.137 };
const gps = planeToGps('北京54', { dx: 15, dy: -154, dz: -82 }, plane, 117);
console.log('还原坐标:', gps);
```

## 🧾 参数说明
# GPS 坐标对象（输入）
| 字段    | 类型       | 说明         |
| ----- | -------- | ---------- |
| `lng` | `number` | 经度，单位：十进制度 |
| `lat` | `number` | 纬度，单位：十进制度 |


# 三参数（适用于 gpsToPlaneBy3Params）
| 字段   | 类型       | 说明      |
| ---- | -------- | ------- |
| `dx` | `number` | X轴偏移（米） |
| `dy` | `number` | Y轴偏移（米） |
| `dz` | `number` | Z轴偏移（米） |

# 七参数（适用于 gpsToPlaneBy7Params）
| 字段      | 类型       | 说明              |
| ------- | -------- | --------------- |
| `dx`    | `number` | X轴偏移（米）         |
| `dy`    | `number` | Y轴偏移（米）         |
| `dz`    | `number` | Z轴偏移（米）         |
| `rx`    | `number` | X轴旋转（秒）         |
| `ry`    | `number` | Y轴旋转（秒）         |
| `rz`    | `number` | Z轴旋转（秒）         |
| `scale` | `number` | 比例缩放（ppm，百万分之一） |

# 返回坐标（平面坐标）
| 字段  | 类型       | 说明     |
| --- | -------- | ------ |
| `x` | `number` | 东坐标（米） |
| `y` | `number` | 北坐标（米） |


## 📌 中央经线说明
工具自动按三度带判断中央经线：
```ts
// 例如经度 117.5 会被判定为中央经线 120°
centralMeridian = Math.floor(lng / 3 + 1) * 3;
```
如需手动指定，可在方法中传入 centralMeridian 参数。
## 🔗 依赖说明
proj4
