# geo-elevation-calc **Repository Path**: ajun816/geo-elevation-calc ## Basic Information - **Project Name**: geo-elevation-calc - **Description**: 通过经纬度计算高程数据 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-20 - **Last Updated**: 2025-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # geo-elevation-calc ## 项目介绍 这是一个功能全面的地理高程计算工具集,提供了多种编程语言实现(C++、JavaScript、Java),用于根据经纬度坐标精确计算高程数据。该工具集支持读取ASCII格式DEM(数字高程模型)数据文件,使用双线性插值算法提高计算精度,并可处理无效数据点,适用于各类地理信息系统、地形分析和工程应用场景。 ## 项目结构 ``` geo-elevation-calc/ ├── .gitignore # Git忽略规则文件 ├── .vscode/ # VSCode配置文件 ├── LICENSE # 许可证文件 ├── README.md # 项目主要说明文档(中文) ├── README.en.md # 项目说明文档(英文) ├── dem_elevation_calc/ # C++版本的高性能DEM高程计算器 ├── java_elevation_calc/ # Java版本的DEM高程计算器 ├── js_elevation_calc/ # JavaScript版本的网页版DEM高程计算器 └── simple_elevation_calc/ # 简化版高程计算器(适用于学习和快速测试) ``` ## 主要功能 1. **多语言实现**:提供C++、JavaScript和Java三种编程语言实现,满足不同场景需求 2. **高性能处理**:优化的数据读取和处理算法,支持处理大型DEM数据集 3. **精确计算**:使用双线性插值算法提高任意经纬度位置的高程计算精度 4. **错误处理**:完善的无效数据点识别和处理机制 5. **交互式界面**:命令行和网页版多种交互方式,操作简便直观 6. **自动测试**:内置测试用例,验证计算结果准确性 7. **线段最高点分析**:JavaScript版本支持计算两点连线上的最高点坐标和高程 ## 数据说明 - DEM数据文件位于各子项目目录下的`dem001.txt`文件(约76MB) - 数据格式为标准ASCII格网格式,包含以下头部信息: - `ncols`: 网格的列数 - `nrows`: 网格的行数 - `xllcorner`: 左下角x坐标(经度) - `yllcorner`: 左下角y坐标(纬度) - `cellsize`: 单元格大小(经纬度增量) - `NODATA_value`: 无效数据的标记值 - 数据主体为按行列排列的高程值矩阵,无效数据点标记为'x' ## 子项目说明 ### 1. dem_elevation_calc(C++版本) 基于C++的高性能命令行工具,适用于需要处理大量地理数据的场景,提供高效的高程计算功能。 **特点:** - 高性能C++实现,处理速度快 - 命令行交互式查询,支持批量处理 - 自动测试预设点,验证计算准确性 - 完整的错误处理机制 **使用方法:** 1. 编译程序: ```bash cd dem_elevation_calc make ``` 2. 运行程序: ```bash ./dem_elevation_calc ``` 3. 程序会自动加载DEM数据,并进入交互式查询界面 4. 按照提示输入经度和纬度坐标,系统将返回计算的高程值 **文件结构:** - `dem_reader.h/cpp`: DEM数据读取器类,实现数据解析和高程计算 - `main.cpp`: 主程序入口,包含用户交互界面 - `Makefile`: 编译配置文件 ### 2. js_elevation_calc(JavaScript版本) 基于JavaScript的网页版工具,无需安装,直接在浏览器中运行,方便分享给团队成员使用,支持单点高程查询和线段最高点分析功能。 **特点:** - 纯前端实现,无需后端服务器 - 友好的Web用户界面,操作简便 - 自动加载和测试预设点(成都市和西安市) - 支持实时输入和结果显示 - 新增线段最高点分析功能,可计算两点连线上的最高点坐标和高程 - 完全跨平台,任何现代浏览器均可运行 **使用方法:** 1. 单点高程查询: - 打开`js_elevation_calc/index.html`文件 - 等待DEM数据加载完成(可能需要一些时间) - 在输入框中输入经度和纬度,点击"计算高程"按钮获取结果 2. 线段最高点分析: - 在页面的线段最高点分析区域,输入起点和终点的经纬度坐标 - 点击"分析最高点"按钮 - 系统将计算并显示两点连线上的最高点坐标和高程信息 **文件结构:** - `index.html`: 主HTML页面,包含用户界面和交互逻辑 - `dem_reader.js`: DEM数据读取器类,实现数据解析和高程计算功能 - `line_highest_point.js`: 线段最高点分析器类,实现球面几何计算和最高点查找功能 - `dem001.txt`: DEM数据文件 ### 3. java_elevation_calc(Java版本) 基于Java的命令行工具,提供了面向对象的设计和实现,便于与其他Java项目集成或扩展功能。 **特点:** - 面向对象设计,代码结构清晰 - 命令行交互式界面,操作简单直观 - 支持显示DEM数据信息 - 可作为Java库集成到其他项目中 **使用方法:** 1. 确保已安装JDK 8或更高版本和Maven 3.6或更高版本 2. 构建项目: ```bash cd java_elevation_calc mvn clean package ``` 3. 运行程序(使用提供的运行脚本): - Windows系统:`run.bat` - Linux/Mac系统:`./run.sh` **文件结构:** - `pom.xml`: Maven项目配置文件 - `src/main/java/com/geocalc/`: Java源代码目录 - `GeoPoint.java`: 地理点类 - `ElevationException.java`: 高程计算异常类 - `DemReader.java`: DEM数据读取器 - `ElevationCalculatorApp.java`: 命令行交互式应用程序 ### 4. simple_elevation_calc(简化版) 简化版高程计算器,适用于快速测试和学习目的,实现了基本的高程计算功能。 **特点:** - 代码结构简单,易于理解和学习 - 从文件加载高程数据点 - 使用线性插值法计算高程值 - 交互式命令行界面 - 自动生成测试数据文件 **使用方法:** 1. 编译项目: ```bash cd simple_elevation_calc make ``` 2. 运行程序: ```bash make run # 或直接运行 ./elevation_calc ``` ## 技术原理 本项目主要使用双线性插值算法计算任意经纬度位置的高程值,具体原理如下: 1. **坐标转换**:将经纬度坐标转换为DEM数据的网格索引坐标 2. **定位网格**:找到目标点所在的网格单元及周围的四个网格点 3. **相对位置计算**:确定目标点在网格单元中的相对位置(归一化坐标) 4. **双线性插值**: - 首先在水平方向上对左右两个网格点进行线性插值 - 然后在垂直方向上对两个水平插值结果进行线性插值 - 最终得到目标点的高程值 5. **无效数据处理**: - 识别数据文件中的无效数据点(标记为'x') - 在计算过程中跳过无效点,使用有效点的平均值或返回特定的无效值标记 双线性插值算法相比最近邻插值能够提供更平滑、更精确的结果,特别适合于地形分析和可视化应用。 ## 技术栈 - **C++版本**:标准C++,无需外部依赖库 - **JavaScript版本**:纯JavaScript,HTML5,CSS3 - **Java版本**:Java 8+,Maven构建工具 - **简化版**:标准C++,无需外部依赖库 ## 浏览器兼容性 JavaScript版本支持以下浏览器: - Chrome 60+ - Firefox 55+ - Safari 11+ - Edge 79+ ## 环境要求 ### 硬件要求 - 推荐至少4GB RAM(处理大型DEM数据文件时) - 足够的硬盘空间存储DEM数据文件(约100MB) - 支持现代浏览器的计算机(对于JavaScript版本) ### 软件要求 - C++编译器(支持C++11或更高版本,对于C++版本) - JDK 8或更高版本(对于Java版本) - Maven 3.6或更高版本(对于Java版本) - 现代Web浏览器(对于JavaScript版本) ## 注意事项 1. DEM数据文件较大(约76MB),加载可能需要一些时间 2. 确保输入的经纬度坐标在数据范围内,否则将返回错误或默认值 3. 计算结果为近似值,基于插值算法 4. JavaScript版本需确保数据文件与HTML在同一目录下 5. 对于线段最高点分析功能,计算时间与线段长度和采样密度有关 6. 当查询点周围数据无效时,系统将使用有效点的平均值或返回默认值 ## 常见问题解答 **Q: 程序报错"无法找到DEM数据文件"怎么办?** **A:** 确保`dem001.txt`文件与程序在同一目录下,或检查程序配置中的文件路径是否正确。 **Q: 为什么输入的坐标返回的高程值为-9999?** **A:** 这表示该位置在DEM数据中是无效点,或者坐标超出了数据范围。 **Q: JavaScript版本加载数据很慢怎么办?** **A:** 由于DEM数据文件较大,首次加载可能需要一些时间。请确保网络连接稳定(如果通过网络访问),或考虑使用本地文件访问方式。 **Q: 如何提高线段最高点分析的计算速度?** **A:** 可以尝试减小线段长度或降低采样密度(需修改JavaScript代码中的相关参数)。 **Q: 能否处理其他格式的DEM数据文件?** **A:** 当前版本仅支持标准ASCII格网格式的DEM数据文件。如需处理其他格式,需要修改数据读取部分的代码。 ## 参与贡献 我们欢迎社区成员参与贡献,改进和扩展该项目: 1. Fork 本仓库 2. 新建 Feature 分支 3. 提交代码 4. 新建 Pull Request ## 许可证 [MIT License](LICENSE) ## 免责声明 本项目提供的高程数据仅供参考,不应用于正式的工程设计或关键应用。使用本项目产生的任何后果,项目作者不承担任何责任。 ## 数据说明 - DEM数据文件位于`bin_map/data/dem001.txt` - 数据格式为ASCII文本,包含头部信息和高程数据 - 无效数据点标记为'x' ## 浏览器兼容性 JavaScript版本支持以下浏览器: - Chrome 60+ - Firefox 55+ - Safari 11+ - Edge 79+ ## 注意事项 1. DEM数据文件较大,加载可能需要一些时间 2. 确保输入的经纬度坐标在数据范围内 3. 计算结果为近似值,基于插值算法 4. JavaScript版本需确保数据文件与HTML在同一目录下 ## 参与贡献 1. Fork 本仓库 2. 新建 Feature 分支 3. 提交代码 4. 新建 Pull Request ## 许可证 本项目采用MIT许可证 - 详见LICENSE文件 ## 更新日志 - 2025-09-20:添加JavaScript版本,支持网页端交互式查询 - 2025-09-19:修复C++版本编译警告,优化代码结构 - 2025-09-18:初始版本,包含C++命令行工具