# cgcs2000
**Repository Path**: proj4js/cgcs2000
## Basic Information
- **Project Name**: cgcs2000
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-09-05
- **Last Updated**: 2025-09-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# CGCS2000
中国2000国家大地坐标系(CGCS2000),用于查询和处理CGCS2000坐标系信息。
## 简介
CGCS2000(China Geodetic Coordinate System 2000)是中国当前最新的国家大地坐标系标准。本库提供了完整的CGCS2000坐标系信息查询功能,包括地理坐标系和投影坐标系,支持3度分带和6度分带的高斯-克吕格投影。
## 安装
```bash
npm install cgcs2000
```
## 快速开始
```javascript
// ES6 模块引入
import CGCS2000 from 'cgcs2000';
// CommonJS 引入
const CGCS2000 = require('cgcs2000');
// 根据WKID获取坐标系信息
const cs = CGCS2000.getByWKID(4490);
console.log(cs);
// 获取所有支持的WKID列表
const wkids = CGCS2000.getAllWKIDs();
console.log(wkids);
// 根据名称搜索坐标系
const results = CGCS2000.getByName('Gauss-Kruger');
console.log(results);
// 获取3度分带坐标系
const threeDegreeSystems = CGCS2000.get3DegreeGK();
console.log(threeDegreeSystems);
```
## 主要功能
### 坐标系查询
- [getAllWKIDs()](file://d:\temp\CGCS2000\src\CGCS2000.ts#L175-L177) - 获取所有支持的WKID
- [getByWKID(wkid)](file://d:\temp\CGCS2000\src\CGCS2000.ts#L184-L186) - 根据WKID获取坐标系信息
- [getByName(name)](file://d:\temp\CGCS2000\src\CGCS2000.ts#L193-L206) - 根据名称搜索坐标系
- [getByCentralMeridian(centralMeridian, withZoneNumber)](file://d:\temp\CGCS2000\src\CGCS2000.ts#L214-L223) - 根据中央经线获取坐标系
### 坐标系类型查询
- [getGeographicCS()](file://d:\temp\CGCS2000\src\CGCS2000.ts#L229-L231) - 获取地理坐标系
- [getProjectedCS()](file://d:\temp\CGCS2000\src\CGCS2000.ts#L237-L242) - 获取所有投影坐标系
- [get3DegreeGK(withZoneNumber)](file://d:\temp\CGCS2000\src\CGCS2000.ts#L300-L312) - 获取3度分带高斯-克吕格坐标系
- [get6DegreeGK()](file://d:\temp\CGCS2000\src\CGCS2000.ts#L318-L323) - 获取6度分带高斯-克吕格坐标系
### 坐标转换
- `transformToProjected(longitude, latitude, targetWKID)` - 地理坐标转投影坐标
- `transformToGeographic(x, y, sourceWKID)` - 投影坐标转地理坐标
- `transformBetweenProjected(x, y, sourceWKID, targetWKID)` - 投影坐标间转换
### 坐标验证
- `validateCoordinates(longitude, latitude, wkid)` - 验证坐标有效性
- [calculateDistance(coord1, coord2)](file://d:\temp\CGCS2000\src\CGCS2000.ts#L758-L767) - 计算两点间距离
## 支持的坐标系
### 地理坐标系
- **WKID 4490**: GCS_China_Geodetic_Coordinate_System_2000
- 中国2000国家大地坐标系(地理坐标系)
- 椭球参数:CGCS2000椭球(长半轴6378137米,扁率1/298.257222101)
### 投影坐标系
#### 3度分带高斯-克吕格投影
- **带号分带** (WKID 4513-4554)
- 第25带至第45带(中央经线75°E至135°E)
- **无带号分带** (WKID 4547-4568)
- 中央经线111°E至135°E
#### 6度分带高斯-克吕格投影
- **WKID 21413-21423**
- 第13带至第23带(中央经线75°E至129°E)
## API 详细说明
### 基础查询方法
#### getAllWKIDs()
获取所有支持的WKID列表,按数值升序排列。
```javascript
const wkids = CGCS2000.getAllWKIDs();
// 返回: [4490, 4513, 4514, ..., 4554, 4547, 4548, ..., 4568, 21413, ..., 21423]
```
#### getByWKID(wkid)
根据WKID获取坐标系详细信息。
```javascript
const cs = CGCS2000.getByWKID(4490);
// 返回坐标系对象或null(如果WKID不存在)
```
#### getByName(name)
根据名称或别名搜索坐标系(支持模糊匹配)。
```javascript
const results = CGCS2000.getByName('Gauss-Kruger Zone 20');
// 返回匹配的坐标系数组
```
### 分类查询方法
#### getByType(type)
根据类型获取坐标系('geographic' 或 'projected')。
```javascript
const geographicCS = CGCS2000.getByType('geographic');
const projectedCS = CGCS2000.getByType('projected');
```
#### get3DegreeGK(withZoneNumber)
获取3度分带高斯-克吕格坐标系。
```javascript
// 获取带号分带的3度分带坐标系
const withZone = CGCS2000.get3DegreeGK(true);
// 获取无带号分带的3度分带坐标系(默认)
const withoutZone = CGCS2000.get3DegreeGK();
```
#### get6DegreeGK()
获取6度分带高斯-克吕格坐标系。
```javascript
const sixDegree = CGCS2000.get6DegreeGK();
```
### 坐标转换方法
#### transformToProjected(longitude, latitude, targetWKID)
将地理坐标转换为指定投影坐标系的平面坐标。
```javascript
const projected = CGCS2000.transformToProjected(116.4074, 39.9042, 4525);
// 返回 {x, y} 或 null(如果转换失败)
```
#### transformToGeographic(x, y, sourceWKID)
将投影坐标转换为地理坐标。
```javascript
const geographic = CGCS2000.transformToGeographic(432102.845, 4412345.678, 4525);
// 返回 {longitude, latitude} 或 null(如果转换失败)
```
### 实用工具方法
#### validateCoordinates(longitude, latitude, wkid)
验证坐标是否在指定坐标系的有效范围内。
```javascript
const result = CGCS2000.validateCoordinates(116.4074, 39.9042, 4525);
// 返回 {valid: true/false, message: '验证信息'}
```
#### calculateDistance(coord1, coord2)
计算两个地理坐标点之间的距离(米)。
```javascript
const distance = CGCS2000.calculateDistance(
{longitude: 116.4074, latitude: 39.9042},
{longitude: 121.4737, latitude: 31.2304}
);
// 返回距离值(米)
```
#### getRecommendedCSByExtent(minLon, maxLon, minLat, maxLat)
根据经纬度范围推荐最合适的坐标系。
```javascript
const recommended = CGCS2000.getRecommendedCSByExtent(110, 120, 30, 40);
// 返回推荐的坐标系数组
```
### 坐标系推断方法
#### inferCoordinateSystem(x, y, candidateWKIDs)
根据投影坐标推断可能的坐标系。
```javascript
// 推断可能的坐标系列表
const possibleSystems = CGCS2000.inferCoordinateSystem(500000, 4000000);
console.log(possibleSystems);
// 使用候选WKID列表进行推断
const candidates = [4525, 4526, 4527]; // 限定在某些坐标系中查找
const specificSearch = CGCS2000.inferCoordinateSystem(500000, 4000000, candidates);
```
#### getMostLikelyCoordinateSystem(x, y)
获取最可能的坐标系。
```javascript
// 获取最可能的坐标系
const mostLikely = CGCS2000.getMostLikelyCoordinateSystem(500000, 4000000);
if (mostLikely) {
console.log(`最可能的坐标系: ${mostLikely.name} (WKID: ${mostLikely.wkid})`);
}
```
## 坐标系信息结构
每个坐标系对象包含以下属性:
```javascript
{
wkid: 4490, // WKID
name: "GCS_China_Geodetic_Coordinate_System_2000", // 名称
alias: "CGCS2000 (Geographic)", // 别名
description: "中国2000国家大地坐标系(地理坐标系)", // 描述
unit: "degree", // 单位
type: "geographic", // 类型(geographic/projected)
datum: "China_2000", // 基准面
spheroid: "CGCS2000", // 椭球
semiMajorAxis: 6378137, // 长半轴
inverseFlattening: 298.257222101, // 扁率倒数
primeMeridian: "Greenwich", // 本初子午线
projection: "Transverse_Mercator", // 投影类型(仅投影坐标系)
centralMeridian: 117, // 中央经线(仅投影坐标系)
scaleFactor: 1, // 比例因子(仅投影坐标系)
falseEasting: 500000, // 东偏(仅投影坐标系)
falseNorthing: 0, // 北偏(仅投影坐标系)
wkt: "...", // WKT表示
proj4: "..." // PROJ.4参数
}
```
## 使用示例
### 1. 查询坐标系信息
```javascript
// 获取北京地区适用的坐标系
const beijingCS = CGCS2000.getByCentralMeridian(117);
console.log(beijingCS.name); // CGCS2000_3_Degree_GK_CM_117E
// 获取所有3度分带坐标系
const all3Degree = CGCS2000.get3DegreeGK();
console.log(`共有 ${all3Degree.length} 个3度分带坐标系`);
```
### 2. 坐标转换
```javascript
// 地理坐标转投影坐标(北京坐标)
const beijingProj = CGCS2000.transformToProjected(116.4074, 39.9042, 4525);
console.log(beijingProj); // {x: 432102.845, y: 4412345.678}
// 投影坐标转地理坐标
const beijingGeo = CGCS2000.transformToGeographic(432102.845, 4412345.678, 4525);
console.log(beijingGeo); // {longitude: 116.4074, latitude: 39.9042}
```
### 3. 坐标验证
```javascript
// 验证坐标是否有效
const validation = CGCS2000.validateCoordinates(116.4074, 39.9042, 4525);
if (validation.valid) {
console.log("坐标有效");
} else {
console.log("坐标无效:" + validation.message);
}
```
### 4. 坐标系推断
```javascript
// 推断坐标系
const candidates = CGCS2000.inferCoordinateSystem(500000, 4000000);
console.log(`找到 ${candidates.length} 个可能的坐标系`);
// 获取最可能的坐标系
const mostLikely = CGCS2000.getMostLikelyCoordinateSystem(500000, 4000000);
if (mostLikely) {
console.log(`最可能的坐标系: ${mostLikely.name}`);
}
```
## 浏览器使用
在浏览器环境中,库会自动将 [CGCS2000](file://d:\temp\CGCS2000\src\CGCS2000.ts#L170-L1204) 对象添加到全局 `window` 对象:
```html
```
## 构建和开发
```bash
# 安装依赖
npm install
# 构建项目
npm run build
# 运行测试
npm test
# 生成测试覆盖率报告
npm run test:coverage
# 构建后的文件位于 dist/ 目录
```
## 许可证
MIT
## 相关标准
- GB/T 24356-2009 测绘成果质量检查与验收
- CGCS2000国家大地坐标系定义
## 注意事项
1. 坐标转换功能需要配合 proj4js 库使用
2. 3度分带适用于大比例尺测图(1:5000及以上)
3. 6度分带适用于小比例尺测图(1:10000及以上)
4. CGCS2000与WGS84在定义上基本一致,通常可视为相同坐标系