3D 地球卫星轨道可视化平台开发 Day11(筛选指定卫星字段生成适配前端的JSON数据)

张开发
2026/4/21 9:09:52 15 分钟阅读
3D 地球卫星轨道可视化平台开发 Day11(筛选指定卫星字段生成适配前端的JSON数据)
在3D地球卫星轨道可视化平台的开发过程中我们往往会收录全球海量卫星数据但实际前端渲染时并不需要全部数据——更多时候我们只需要聚焦那些知名度高、应用广泛的核心卫星系列既能精简数据量、提升前端加载速度也能让可视化效果更聚焦、更贴合需求。本文就给大家分享一段实战脚本核心功能是在已收录的全球卫星数据基础上精准筛选出指定的19个主流卫星系列生成适配前端JS接口的JSON文件同时优化匹配机制在同类卫星匹配中降低误匹配率、提升筛选准度完美衔接3D可视化前端开发。脚本基于Python开发逻辑清晰、可复用性强全程贴合实际开发场景新手也能快速上手文末附完整源码和使用说明建议收藏备用一、需求背景为什么需要这个筛选脚本在做3D地球卫星轨道可视化项目时我遇到了两个核心问题也是很多同类项目都会面临的痛点原始卫星数据冗余收录的全球卫星数据包含上万个卫星条目其中不乏一些小众、废弃的卫星直接用于前端渲染会导致数据加载缓慢、界面卡顿也会干扰核心卫星系列的展示效果数据格式不匹配原始卫星数据的字段、格式与前端Three.js可视化接口的要求不一致直接使用会出现渲染失败、数据错乱等问题匹配精度不足不同卫星系列的命名存在相似性比如部分卫星名称包含“BDS”“COMPASS”均属于北斗系列简单的字符串匹配容易出现误判要么漏筛核心卫星要么误筛无关卫星。基于此我开发了这段筛选脚本核心目标就是“精准筛选、格式适配、提升效率”聚焦19个主流卫星系列生成可直接对接前端的JSON数据同时解决匹配精度问题。二、核心设计思路3步实现精准筛选与JSON生成脚本的整体设计遵循“读取原始数据→精准筛选匹配→生成适配JSON”的核心链路同时加入异常处理、控制台可视化统计确保脚本的稳定性和易用性具体思路拆解如下1. 明确筛选范围锁定19个主流卫星系列结合航天领域的主流卫星系列筛选出19个知名度高、应用广泛的卫星系列涵盖中国、美国、欧盟、俄罗斯、日本、印度等主要航天国家/地区每个系列明确“系列名称、所属国家、匹配规则”为精准筛选奠定基础。比如中国的北斗系列BEIDOU不仅匹配“BEIDOU”关键词还匹配“BDS”“COMPASS”北斗的英文别称风云系列FENGYUN匹配“FENGYUN”和“FY-数字”如FY-3、FY-4确保不遗漏核心卫星。2. 优化匹配机制降低误匹配提升准度针对同类卫星命名相似的问题脚本采用“正则表达式不区分大小写”的匹配方式同时为每个卫星系列定制专属匹配规则避免“一刀切”的匹配逻辑从根源上降低误匹配率。比如美国的GPS系列匹配“GPS”和“NAVSTAR”GPS的官方名称而不会误匹配其他包含“GPS”字符的小众卫星中国的鸿雁星座HULIANWANG-DIGUI匹配“hulianwang”“hulianwang-digui”“digui”三种表述确保所有相关卫星都能被精准筛选。3. 格式适配前端生成可直接调用的JSON前端3D可视化接口对卫星数据的字段有明确要求如id、name、country、radius等脚本在筛选卫星的同时自动格式化数据字段确保生成的JSON文件与前端接口完全适配无需前端额外修改数据格式直接导入即可使用。三、脚本核心模块解析附关键代码说明脚本整体分为3个核心模块原始数据加载模块、卫星筛选与JSON生成模块、主程序入口每个模块职责清晰代码注释完整下面逐模块解析关键逻辑帮助大家理解脚本的工作原理。1. 导入依赖库首先导入脚本所需的依赖库都是Python内置库无需额外安装降低使用门槛# -*- coding: utf-8 -*- 功能只统计你指定的19个卫星系列并生成对应的JSON文件 输出格式与你要求完全一致 importjson# 用于JSON文件的读取和写入importre# 用于正则表达式匹配实现精准筛选frompathlibimportPath# 用于创建文件夹处理文件路径2. 配置筛选规则19个卫星系列参数定义这是脚本的核心配置部分定义了19个卫星系列的“系列名称、所属国家、正则匹配规则”采用列表嵌套元组的形式结构清晰便于后续修改和扩展# 你指定的19个卫星系列 国家 匹配规则SERIES_CONFIG[(STARLINK,美国,rSTARLINK),# 星链系列仅匹配STARLINK关键词(BEIDOU,中国,rBEIDOU|BDS|COMPASS),# 北斗系列多关键词匹配(GPS,美国,rGPS|NAVSTAR),# GPS系列匹配官方名称和简称(GLONASS,俄罗斯,rGLONASS),# 格洛纳斯系列(GALILEO,欧盟,rGALILEO),# 伽利略系列(QZSS,日本,rQZSS|QZS),# 准天顶卫星系统(IRNSS,印度,rIRNSS|NAVIC),# 印度区域导航卫星系统(ONEWEB,美国,rONEWEB),# 一网卫星系列(IRIDIUM,美国,rIRIDIUM),# 铱星系列(FENGYUN,中国,rFENGYUN|FY-\d),# 风云系列匹配数字后缀(YAOGAN,中国,rYAOGAN),# 遥感卫星系列(GAOFEN,中国,rGAOFEN),# 高分卫星系列(LANDSAT,美国,rLANDSAT),# 陆地卫星系列(SENTINEL,欧盟,rSENTINEL),# 哨兵系列(COSMOS,俄罗斯,rCOSMOS),# 宇宙系列卫星(GOES,美国,rGOES),# 地球静止环境业务卫星(METOP,欧盟,rMETOP),# 气象卫星系列(NOAA,美国,rNOAA),# 美国国家海洋和大气管理局卫星(HULIANWANG-DIGUI,中国,rHULIANWANG|HULIANWANG-DIGUI|DIGUI),# 鸿雁星座]关键说明正则表达式中使用“|”表示“或”逻辑允许一个卫星系列匹配多个关键词re.IGNORECASE参数确保匹配时不区分大小写比如“Starlink”“STARLINK”都能被匹配进一步提升筛选的全面性。3. 原始数据加载模块该模块负责读取原始卫星数据JSON文件默认路径为satellites-output.json同时加入异常处理文件不存在时提示错误确保脚本不会因文件问题崩溃返回的卫星数据为列表格式便于后续筛选# 读取原始数据defload_original_data(file_pathsatellites-output.json):try:withopen(file_path,r,encodingutf-8)asf:datajson.load(f)# 提取原始数据中的satellites字段若不存在则返回空列表returndata.get(satellites,[])exceptFileNotFoundError:print(f错误找不到{file_path}文件)return[]4. 核心模块筛选卫星并生成JSON文件这是脚本的核心功能模块实现“按系列筛选卫星→格式化数据→生成JSON文件→控制台统计输出”四大功能逻辑拆解如下1创建输出文件夹自动创建series_data文件夹用于存放生成的19个卫星系列JSON文件exist_okTrue确保文件夹已存在时不会报错2循环筛选每个卫星系列遍历SERIES_CONFIG中的每个卫星系列使用正则表达式匹配原始数据中的卫星名称3数据格式化对筛选出的卫星按照前端接口要求格式化id、name、country等字段比如id格式为“sat-1”“sat-2”4写入JSON文件每个卫星系列生成一个独立的JSON文件文件名以系列名称命名格式与前端接口完全适配5控制台输出统计在控制台打印每个卫星系列的名称、所属国家、卫星数量方便开发者快速查看筛选结果。# 按系列筛选并生成JSON文件 控制台输出你要的格式defgenerate_series_json(all_satellites):output_dirPath(series_data)output_dir.mkdir(exist_okTrue)# 创建输出文件夹已存在则不报错# 控制台打印统计标题提升可读性print(\n*70)print( 卫星系列统计系列 国家 数量)print(*70)# 遍历每个卫星系列执行筛选和JSON生成forseries_name,country,patterninSERIES_CONFIG:regexre.compile(pattern,re.IGNORECASE)# 不区分大小写匹配series_sats[]# 存储当前系列的卫星数据sat_id1# 卫星id自增格式为sat-1、sat-2...# 遍历原始卫星数据筛选当前系列的卫星forsatinall_satellites:# 匹配卫星名称若匹配成功则加入当前系列ifregex.search(sat.get(name,)):series_sats.append({id:fsat-{sat_id},name:sat[name],country:country,# 直接使用配置中的国家确保准确性type:sat.get(type,其他),# 字段默认值避免报错radius:sat.get(radius,0.0),inclination:sat.get(inclination,0.0),speed:sat.get(speed,0.0),offset:sat.get(offset,0.0),desc:sat.get(desc,暂无描述)})sat_id1# 卫星id自增# 写入JSON文件确保格式适配前端output_pathoutput_dir/f{series_name}.jsonwithopen(output_path,w,encodingutf-8)asf:# ensure_asciiFalse支持中文indent2格式化JSON提升可读性json.dump({satellites:series_sats},f,ensure_asciiFalse,indent2)# 控制台输出统计信息格式对齐便于查看print(f{series_name:24}|{country:6}|{len(series_sats):4}颗)# 筛选完成提示print(*70)print(✅ 所有系列JSON已生成文件在 series_data 文件夹中)5. 主程序入口主程序入口负责调用上述模块先加载原始卫星数据若数据加载成功则执行筛选和JSON生成操作逻辑简洁便于运行if__name____main__:all_satsload_original_data()# 加载原始卫星数据ifall_sats:# 若数据加载成功执行筛选生成操作generate_series_json(all_sats)四、脚本使用方法新手友好脚本的使用方法非常简单无需复杂配置只需3步即可完成卫星筛选和JSON生成全程可视化新手也能快速上手1. 准备原始数据将收录全球卫星数据的JSON文件命名为“satellites-output.json”并与脚本放在同一文件夹下原始JSON文件需包含“satellites”字段字段结构如下无需完全一致缺失字段会自动填充默认值{satellites:[{name:BEIDOU-1,type:导航卫星,radius:0.1,inclination:55.0,speed:7.8,offset:0.0,desc:北斗一号卫星},...]}2. 运行脚本打开Python环境推荐Python3.7及以上版本运行脚本控制台会输出每个卫星系列的统计信息示例如下 卫星系列统计系列 国家 数量 STARLINK | 美国 | 1200 颗 BEIDOU | 中国 | 55 颗 GPS | 美国 | 32 颗 ... ✅ 所有系列JSON已生成文件在 series_data 文件夹中3. 获取适配前端的JSON文件脚本运行完成后会自动在当前文件夹下生成“series_data”文件夹里面包含19个卫星系列的JSON文件如STARLINK.json、BEIDOU.json每个文件的格式都完全适配前端JS接口直接导入前端项目即可使用。五、关键优化点如何提升筛选准度前面提到脚本的核心优化点之一是“降低误匹配率、提升筛选准度”除了定制化正则匹配规则还有两个关键优化点值得大家参考不区分大小写匹配通过re.IGNORECASE参数避免因卫星名称大小写不一致导致的漏筛比如“Starlink”“STARLINK”“starlink”都能被精准匹配精准匹配而非模糊匹配使用re.search()方法匹配卫星名称中包含目标关键词的条目同时为每个系列定制专属规则避免“一刀切”的匹配逻辑比如风云系列仅匹配“FENGYUN”和“FY-数字”不会误匹配其他包含“FY”的卫星固定国家字段卫星的所属国家直接从SERIES_CONFIG中获取而非从原始数据中提取避免原始数据中国家字段错误导致的分类混乱确保每个系列的卫星所属国家准确无误。六、实战价值与扩展方向这段脚本并非简单的“筛选生成JSON”而是完全贴合3D地球卫星轨道可视化项目的实战需求其核心价值在于提升前端性能筛选后的卫星数据量大幅精简减少前端加载压力避免界面卡顿提升3D可视化效果降低开发成本生成的JSON文件直接适配前端接口无需前端额外处理数据格式节省开发时间可复用性强脚本结构清晰只需修改SERIES_CONFIG中的配置即可筛选其他卫星系列适配不同的可视化需求便于维护每个卫星系列对应独立的JSON文件后续新增、修改卫星系列时只需修改对应文件无需改动整体数据。后续扩展方向大家可以根据自己的项目需求进行优化新增筛选条件比如按卫星类型导航卫星、气象卫星、轨道高度等条件进一步筛选增加数据校验对原始数据中的字段进行校验过滤无效数据如半径为负数、速度为空等批量导出压缩将所有卫星系列的JSON文件压缩为zip包便于前端项目导入对接实时数据将脚本与卫星实时数据接口对接实现实时筛选和JSON更新。七、完整源码可直接复制使用最后附上完整源码大家可以直接复制到Python文件中修改原始数据路径和筛选配置即可快速使用无需额外安装依赖# -*- coding: utf-8 -*- 功能只统计你指定的19个卫星系列并生成对应的JSON文件 输出格式与你要求完全一致 importjsonimportrefrompathlibimportPath# 你指定的19个卫星系列 国家 匹配规则SERIES_CONFIG[(STARLINK,美国,rSTARLINK),(BEIDOU,中国,rBEIDOU|BDS|COMPASS),(GPS,美国,rGPS|NAVSTAR),(GLONASS,俄罗斯,rGLONASS),(GALILEO,欧盟,rGALILEO),(QZSS,日本,rQZSS|QZS),(IRNSS,印度,rIRNSS|NAVIC),(ONEWEB,美国,rONEWEB),(IRIDIUM,美国,rIRIDIUM),(FENGYUN,中国,rFENGYUN|FY-\d),(YAOGAN,中国,rYAOGAN),(GAOFEN,中国,rGAOFEN),(LANDSAT,美国,rLANDSAT),(SENTINEL,欧盟,rSENTINEL),(COSMOS,俄罗斯,rCOSMOS),(GOES,美国,rGOES),(METOP,欧盟,rMETOP),(NOAA,美国,rNOAA),(HULIANWANG-DIGUI,中国,rHULIANWANG|HULIANWANG-DIGUI|DIGUI),]# 读取原始数据defload_original_data(file_pathsatellites-output.json):try:withopen(file_path,r,encodingutf-8)asf:datajson.load(f)returndata.get(satellites,[])exceptFileNotFoundError:print(f错误找不到{file_path}文件)return[]# 按系列筛选并生成JSON文件 控制台输出你要的格式defgenerate_series_json(all_satellites):output_dirPath(series_data)output_dir.mkdir(exist_okTrue)print(\n*70)print( 卫星系列统计系列 国家 数量)print(*70)forseries_name,country,patterninSERIES_CONFIG:regexre.compile(pattern,re.IGNORECASE)series_sats[]sat_id1forsatinall_satellites:ifregex.search(sat.get(name,)):series_sats.append({id:fsat-{sat_id},name:sat[name],country:country,type:sat.get(type,其他),radius:sat.get(radius,0.0),inclination:sat.get(inclination,0.0),speed:sat.get(speed,0.0),offset:sat.get(offset,0.0),desc:sat.get(desc,暂无描述)})sat_id1# 写入JSONoutput_pathoutput_dir/f{series_name}.jsonwithopen(output_path,w,encodingutf-8)asf:json.dump({satellites:series_sats},f,ensure_asciiFalse,indent2)# 控制台输出你要的格式print(f{series_name:24}|{country:6}|{len(series_sats):4}颗)print(*70)print(✅ 所有系列JSON已生成文件在 series_data 文件夹中)if__name____main__:all_satsload_original_data()ifall_sats:generate_series_json(all_sats)八、总结在3D地球卫星轨道可视化项目中数据筛选和格式适配是前端开发的基础也是提升项目性能和用户体验的关键。这段脚本通过精准的正则匹配、贴合前端需求的格式生成完美解决了原始数据冗余、格式不匹配、匹配精度不足等痛点同时兼顾了易用性和可扩展性。无论是新手还是资深开发者都可以直接复用这段脚本根据自己的项目需求修改筛选配置快速生成适配前端的卫星系列JSON数据。后续我也会继续分享3D卫星可视化前端对接、性能优化的相关内容关注我不迷路求个三连么么哒如果大家在使用脚本的过程中遇到问题比如筛选漏卫星、JSON格式不匹配等可以在评论区留言我会及时回复解答

更多文章