# 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在定义上基本一致,通常可视为相同坐标系