通信工程师的 WPS 地理数据处理工具箱,新增海拔查询和批量 KML 生成两大功能。

一、项目简介
TableGIS 是一个嵌入 WPS 表格的地理数据处理插件,面向无线网络优化工程师。插件集成了坐标转换、度分秒换算、距离方位角计算、扇区/覆盖圆 KML 生成等功能。最近新增了海拔批量查询 和独立批量 KML 生成工具两个模块。
- 项目类型:WPS 加载项 (jsaddon)
- 运行环境:Windows + WPS Office
- 核心技术:JavaScript (WPS API) + C++ (Win32 原生桌面应用)
二、功能一:海拔批量查询
2.1 功能介绍
海拔查询功能可以从选中的经纬度数据批量获取海拔值,数据源为 Open-Meteo 免费高程 API(基于 SRTM 90m 精度 DEM 数据),取代手动逐个查询的繁琐过程。
2.2 使用方法
- 在 WPS 表格中选中两列数据(经度列 + 纬度列)
- 点击 TableGIS 选项卡 → 海拔查询分组 → 海拔查询按钮
- 等待查询完成,结果自动复制到剪贴板
- 在右侧空白列直接粘贴即可
2.3 技术实现
API 接口 :https://api.open-meteo.com/v1/elevation
请求方式为 GET,参数格式 latitude=lat1,lat2&longitude=lon1,lon2,返回 JSON:
json
{
"elevation": [1246.0, 64.0, 328.5]
}
核心实现:按每批次 100 个坐标分组请求,批次间延迟 1 秒避免触发频率限制。异步串行处理,全部完成后统一输出结果。
javascript
function fetchBatch(batchIndex) {
var batch = batches[batchIndex];
var apiUrl = "https://api.open-meteo.com/v1/elevation?" +
"latitude=" + batch.lats.join(",") +
"&longitude=" + batch.lons.join(",");
// XHR GET 请求,解析 elevation 数组
// 批次间延迟 1 秒:setTimeout(() => fetchBatch(batchIndex + 1), 1000)
}
2.4 使用限制
| 限制项 | 说明 |
|---|---|
| 最大行数 | 100 行 |
| 列要求 | 恰好 2 列(经度、纬度) |
| 坐标范围 | 经度 -180~180,纬度 -90~90 |
| 批次间隔 | 1 秒/批次,避免 API 限流 |
| 超时时间 | 15 秒/请求 |
2.5 错误处理
- HTTP 429:提示"请求太频繁,请稍后重试"
- HTTP 400:提示"请求参数错误"
- HTTP 5xx:提示"服务器暂时不可用"
- 超时:标记为"查询超时"
- 无效坐标:标记为"无效坐标"
三、新增功能二:批量 KML 生成工具
3.1 功能介绍
批量 KML 工具是一个独立 Windows 桌面程序 (LanhanTools.exe),点击 WPS 插件中的"批量KML"按钮即可启动。支持从 CSV/XLSX 文件导入站点数据,生成符合 Google Earth / 奥维地图格式的 KML 图层文件。
3.2 程序架构
工具采用 C++ 原生 Win32 开发,无第三方 UI 框架,界面轻量(220×345 像素,置顶显示,Win11 圆角)。通过 3 个标签页处理不同 KML 场景:
TG图层工具(左侧标签栏)
├── Tab 0: 路测KML --- 信号电平 → 彩色覆盖圆 KML
├── Tab 1: 扇形KML --- 工参数据 → 图标点 KML
└── Tab 2: 模板管理 --- RSRP/SINR 颜色模板
3.3 路测 KML(Tab 0)
将路测信号数据按强度区间着色,生成圆形覆盖 KML 图层。
操作流程:
- 点击 浏览 加载 CSV 文件(自动检测 UTF-8 BOM / UTF-16 LE / GBK 编码)
- 选择 经度列、纬度列、电平列(支持自动识别表头关键词:lon/lat/rssi/rsrp 等)
- 选择 颜色模板 或自定义范围颜色
- 设置覆盖圆 半径(默认 50 米)
- 点击 生成KML
内置颜色模板:
| 模板名称 | 电平范围 (dBm) |
|---|---|
| 4G城区 | 7段:-145-105-100-98-96-90-80~-20 |
| 4G农村 | 6段:-145-110-105-100-95-80-20 |
| 5G模板 | 6段:-145-105-98-96-93-80-20 |
| SINR模板 | 6段:-145-20-30102040 |
模板保存为 templates.json(UTF-8 BOM 格式),存储在 exe 同级目录。每个范围的颜色可点击打开系统颜色选择器 自由设置,范围值修改后自动前后传递(改一行的最大值自动更新下一行的最小值)。支持添加/删除范围行,超过一屏自动出现滚动条。
覆盖圆生成算法:
使用 Haversine 球面几何公式计算圆周上 36 个顶点的经纬度坐标,组成闭合多边形:
cpp
double lat2 = asin(sin(lat1)*cos(d) + cos(lat1)*sin(d)*cos(bearing));
double lng2 = lng1 + atan2(sin(bearing)*sin(d)*cos(lat1),
cos(d) - sin(lat1)*sin(lat2));
3.4 扇形 KML(Tab 1)
适用于基站工参表的扇区覆盖可视化,生成带图标的点 KML。
图标选择器:
点击"选择图标"按钮弹出图标选择窗口,提供三大类合计 300+ 种图标:
| 图标系列 | 数量 | 示例 |
|---|---|---|
| Pushpin | 8 色 | 黄/绿/蓝/红/紫/橙/粉/白 |
| Paddle | 8色×38标签 | 空白、A-Z、0-9、星号 |
| Shapes | 86 种 | 医院、餐厅、机场、学校、加油站... |
图标网格 8 列排列,支持滚动浏览,选中高亮蓝色边框。图标 URL 指向 Google Maps KML 官方 CDN。
KML 输出包含 <ExtendedData> 元数据标签,将 CSV 中的其他列(如站点名、地址、类型等)作为附加属性嵌入每个点位。
3.5 模板管理(Tab 2)
集中管理颜色模板。左侧下拉框选择模板,右侧列表展示所有范围(带颜色块预览),支持添加/删除/编辑范围。修改后点击"保存模板"即可持久化。
3.6 KML 输出示例
生成的 KML 文件包含按信号范围分组的 Folder 结构,每个点位一个 Placemark,Polygon 使用模板颜色填充:
xml
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>路测覆盖图层</name>
<Style id="range_0">
<PolyStyle><color>ff0000ff</color></PolyStyle>
</Style>
<Folder>
<name>-100 ~ -98 dBm</name>
<Placemark>
<name>Point 1</name>
<styleUrl>#range_0</styleUrl>
<Polygon>
<altitudeMode>clampToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>113.264,23.129,0 ...(36 个顶点)</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Folder>
</Document>
</kml>
兼容平台:Google Earth / 奥维互动地图 / 图新地球 (LSV) / ArcGIS Earth / QGIS
四、WPS 插件 KML 工具组
新增功能已整合到插件"KML工具"分组,共 4 个按钮:
| 按钮 | 功能 |
|---|---|
| kml临时打开 | 在 Google Earth 中快速预览选中坐标 |
| 扇区KML | 工参表 → 扇区覆盖 KML(按频段分组着色) |
| 覆盖圆KML | 站点经纬度 → 圆形覆盖图层(可自定义半径) |
| 批量KML | 启动独立批量 KML 生成工具 |
五、安装方法
- TableGIS这里下载
- 关闭所有 WPS 窗口后运行安装程序
- 重启 WPS,顶部出现 TableGIS 选项卡
提示:安装包自动注册到 WPS 加载项目录,支持 64 位 WPS
六、参考资料
- 海拔数据:Open-Meteo Elevation API
- KML 规范:OGC KML 2.2 Standard
- 图标来源:Google Maps KML Icons
*本文由 TableGIS 插件开发者撰写。如有问题或建议,欢迎私信交流。