#
GdopCore.exe使用说明 |作者|TEL| |---|---| |zoulei|18011367130| ### 一.程序说明 * GdopCore.exe(x86)程序用于计算GDOP误差分布和误差椭圆 * 每种算法提供了两个接口,这两种接口是完全等价的,一种传入双行根,一种直接传入卫星实时状态x、y、z等 * 程序通过命令行传入参数,带空格的参数必须使用双引号包裹,结果返回在控制台输出流中(异常信息也在此流中) ### 二.接口说明 #### 1. 三星带参双行根GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定60|否|-| |2|主星双行根数|string|-|-||-| |3|邻1星双行根数|string|-|-||-| |4|邻2星双行根数|string|-|-||-| |5|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |6|参考站经度|double|deg|[-180,180]|否|-| |7|参考站纬度|double|deg|[-90,90]|否|-| |8|时差误差|double|us|-|否|默认1us| |9|星历位置误差|double|m|-|否|默认10000米| #### 2. 三星带参xyz星历GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定61|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|邻1星星历X|double|-|-|否|-| |6|邻1星星历Y|double|-|-|否|-| |7|邻1星星历Z|double|-|-|否|-| |8|邻2星星历X|double|-|-|否|-| |9|邻2星星历Y|double|-|-|否|-| |10|邻2星星历Z|double|-|-|否|-| |11|参考站经度|double|deg|[-180,180]|否|-| |12|参考站纬度|double|deg|[-90,90]|否|-| |13|时差误差|double|us|-|否|默认1us| |14|星历位置误差|double|m|-|否|默认10000米| #### 3. 三星无参双行根GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定62|否|-| |2|主星双行根数|string|-|-||-| |3|邻1星双行根数|string|-|-||-| |4|邻2星双行根数|string|-|-||-| |5|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |6|接收站经度|double|deg|[-180,180]|否|-| |7|接收站纬度|double|deg|[-90,90]|否|-| |8|时差误差|double|us|-|否|默认1us| |9|星历位置误差|double|m|-|否|默认10000米| #### 4. 三星无参xyz星历GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定63|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|邻1星星历X|double|-|-|否|-| |6|邻1星星历Y|double|-|-|否|-| |7|邻1星星历Z|double|-|-|否|-| |8|邻2星星历X|double|-|-|否|-| |9|邻2星星历Y|double|-|-|否|-| |10|邻2星星历Z|double|-|-|否|-| |11|接收站经度|double|deg|[-180,180]|否|-| |12|接收站纬度|double|deg|[-90,90]|否|-| |13|时差误差|double|us|-|否|默认1us| |14|星历位置误差|double|m|-|否|默认10000米| #### 5. 双星时频差带参双行根GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定64|否|-| |2|主星双行根数|string|-|-||-| |3|邻星双行根数|string|-|-||-| |4|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |5|接收站经度|double|deg|[-180,180]|否|-| |6|接收站纬度|double|deg|[-90,90]|否|-| |7|参考站经度|double|deg|[-180,180]|否|-| |8|参考站纬度|double|deg|[-90,90]|否|-| |9|目标上行频点|double|MHz|-|否|-| |10|参考上行频点|double|MHz|-|否|-| |11|主星本振|double|MHz|-|否|-| |12|邻星本振|double|MHz|-|否|-| |13|时差误差|double|us|-|否|默认1us| |14|频差误差|double|Hz|-|否|默认1Hz| |15|星历位置误差|double|m|-|否|默认10000米| #### 6. 双星时频差带参xyz星历GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定65|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|主星星历VX|double|-|-|否|-| |6|主星星历VY|double|-|-|否|-| |7|主星星历VZ|double|-|-|否|-| |8|邻星星历X|double|-|-|否|-| |9|邻星星历Y|double|-|-|否|-| |10|邻星星历Z|double|-|-|否|-| |11|邻星星历VX|double|-|-|否|-| |12|邻星星历VY|double|-|-|否|-| |13|邻星星历VZ|double|-|-|否|-| |14|接收站经度|double|deg|[-180,180]|否|-| |15|接收站纬度|double|deg|[-90,90]|否|-| |16|参考站经度|double|deg|[-180,180]|否|-| |17|参考站纬度|double|deg|[-90,90]|否|-| |18|目标上行频点|double|MHz|-|否|-| |19|参考上行频点|double|MHz|-|否|-| |20|主星本振|double|MHz|-|否|-| |21|邻星本振|double|MHz|-|否|-| |22|时差误差|double|us|-|否|默认1us| |23|频差误差|double|Hz|-|否|默认1Hz| |24|星历位置误差|double|m|-|否|默认10000米| #### 7. 双星时频差无参双行根GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定66|否|-| |2|主星双行根数|string|-|-||-| |3|邻星双行根数|string|-|-||-| |4|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |5|接收站经度|double|deg|[-180,180]|否|-| |6|接收站纬度|double|deg|[-90,90]|否|-| |7|目标上行频点|double|MHz|-|否|-| |8|主星本振|double|MHz|-|否|-| |9|邻星本振|double|MHz|-|否|-| |10|时差误差|double|us|-|否|默认1us| |11|频差误差|double|Hz|-|否|默认1Hz| |12|星历位置误差|double|m|-|否|默认10000米| #### 8. 双星时频差无参xyz星历GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定67|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|主星星历VX|double|-|-|否|-| |6|主星星历VY|double|-|-|否|-| |7|主星星历VZ|double|-|-|否|-| |8|邻星星历X|double|-|-|否|-| |9|邻星星历Y|double|-|-|否|-| |10|邻星星历Z|double|-|-|否|-| |11|邻星星历VX|double|-|-|否|-| |12|邻星星历VY|double|-|-|否|-| |13|邻星星历VZ|double|-|-|否|-| |14|接收站经度|double|deg|[-180,180]|否|-| |15|接收站纬度|double|deg|[-90,90]|否|-| |16|目标上行频点|double|MHz|-|否|-| |17|主星本振|double|MHz|-|否|-| |18|邻星本振|double|MHz|-|否|-| |19|时差误差|double|us|-|否|默认1us| |20|频差误差|double|Hz|-|否|默认1Hz| |21|星历位置误差|double|m|-|否|默认10000米| #### 9. 两星一地带参双行根GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定68|否|-| |2|主星双行根数|string|-|-||-| |3|邻星双行根数|string|-|-||-| |4|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |5|超短站经度|double|deg|[-180,180]|否|-| |6|超短站纬度|double|deg|[-90,90]|否|-| |7|参考站经度|double|deg|[-180,180]|否|-| |8|参考站纬度|double|deg|[-90,90]|否|-| |9|时差误差|double|us|-|否|默认1us| |10|星历位置误差|double|m|-|否|默认10000米| #### 10. 两星一地带参xyz星历GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定69|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|邻星星历X|double|-|-|否|-| |6|邻星星历Y|double|-|-|否|-| |7|邻星星历Z|double|-|-|否|-| |8|超短站经度|double|deg|[-180,180]|否|-| |9|超短站纬度|double|deg|[-90,90]|否|-| |10|参考站经度|double|deg|[-180,180]|否|-| |11|参考站纬度|double|deg|[-90,90]|否|-| |12|时差误差|double|us|-|否|默认1us| |13|星历位置误差|double|m|-|否|默认10000米| #### 11. 一星两地带参双行根GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定70|否|-| |2|主星双行根数|string|-|-||-| |3|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |4|超短站1经度|double|deg|[-180,180]|否|-| |5|超短站1纬度|double|deg|[-90,90]|否|-| |6|超短站2经度|double|deg|[-180,180]|否|-| |7|超短站2纬度|double|deg|[-90,90]|否|-| |8|参考站经度|double|deg|[-180,180]|否|-| |9|参考站纬度|double|deg|[-90,90]|否|-| |10|时差误差|double|us|-|否|默认1us| |11|星历位置误差|double|m|-|否|默认10000米| #### 12. 一星两地带参xyz星历GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定71|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|超短站1经度|double|deg|[-180,180]|否|-| |6|超短站1纬度|double|deg|[-90,90]|否|-| |7|超短站2经度|double|deg|[-180,180]|否|-| |8|超短站2纬度|double|deg|[-90,90]|否|-| |9|参考站经度|double|deg|[-180,180]|否|-| |10|参考站纬度|double|deg|[-90,90]|否|-| |11|时差误差|double|us|-|否|默认1us| |12|星历位置误差|double|m|-|否|默认10000米| #### 13. 高低轨两高一低带参xyz星历GDOP |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定69|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|邻星星历X|double|-|-|否|-| |6|邻星星历Y|double|-|-|否|-| |7|邻星星历Z|double|-|-|否|-| |8|低轨星历X|double|-|-|否|-| |9|低轨星历Y|double|-|-|否|-| |10|低轨星历Z|double|-|-|否|-| |11|参考站经度|double|deg|[-180,180]|否|-| |12|参考站纬度|double|deg|[-90,90]|否|-| |13|时差误差|double|us|-|否|默认1us| |14|星历位置误差|double|m|-|否|默认10000米| #### 14. 三星带参双行根误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定50|否|-| |2|主星双行根数|string|-|-||-| |3|邻1星双行根数|string|-|-||-| |4|邻2星双行根数|string|-|-||-| |5|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |6|定位点经度|double|deg|[-180,180]|否|-| |7|定位点纬度|double|deg|[-90,90]|否|-| |8|参考站经度|double|deg|[-180,180]|否|-| |9|参考站纬度|double|deg|[-90,90]|否|-| |10|时差误差|double|us|-|否|默认1us| |11|星历位置误差|double|m|-|否|默认10000米| |12|误差概率百分比|double|-|[0,100]|否|默认50,即50%| #### 15. 三星带参xyz星历误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定51|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|邻1星星历X|double|-|-|否|-| |6|邻1星星历Y|double|-|-|否|-| |7|邻1星星历Z|double|-|-|否|-| |8|邻2星星历X|double|-|-|否|-| |9|邻2星星历Y|double|-|-|否|-| |10|邻2星星历Z|double|-|-|否|-| |11|定位点经度|double|deg|[-180,180]|否|-| |12|定位点纬度|double|deg|[-90,90]|否|-| |13|参考站经度|double|deg|[-180,180]|否|-| |14|参考站纬度|double|deg|[-90,90]|否|-| |15|时差误差|double|us|-|否|默认1us| |16|星历位置误差|double|m|-|否|默认10000米| |17|误差概率百分比|double|-|[0,100]|否|默认50,即50%| #### 16. 三星无参双行根误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定52|否|-| |2|主星双行根数|string|-|-||-| |3|邻1星双行根数|string|-|-||-| |4|邻2星双行根数|string|-|-||-| |5|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |6|定位点经度|double|deg|[-180,180]|否|-| |7|定位点纬度|double|deg|[-90,90]|否|-| |8|接收站经度|double|deg|[-180,180]|否|-| |9|接收站纬度|double|deg|[-90,90]|否|-| |10|时差误差|double|us|-|否|默认1us| |11|星历位置误差|double|m|-|否|默认10000米| |12|误差概率百分比|double|-|[0,100]|否|默认50,即50%| #### 17. 三星无参xyz星历误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定53|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|邻1星星历X|double|-|-|否|-| |6|邻1星星历Y|double|-|-|否|-| |7|邻1星星历Z|double|-|-|否|-| |8|邻2星星历X|double|-|-|否|-| |9|邻2星星历Y|double|-|-|否|-| |10|邻2星星历Z|double|-|-|否|-| |11|定位点经度|double|deg|[-180,180]|否|-| |12|定位点纬度|double|deg|[-90,90]|否|-| |13|接收站经度|double|deg|[-180,180]|否|-| |14|接收站纬度|double|deg|[-90,90]|否|-| |15|时差误差|double|us|-|否|默认1us| |16|星历位置误差|double|m|-|否|默认10000米| |17|误差概率百分比|double|-|[0,100]|否|默认50,即50%| #### 18. 双星时频差带参双行根误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定54|否|-| |2|主星双行根数|string|-|-||-| |3|邻星双行根数|string|-|-||-| |4|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |5|目标上行频点|double|MHz|-|否|-| |6|参考上行频点|double|MHz|-|否|-| |7|主星本振|double|MHz|-|否|-| |8|邻星本振|double|MHz|-|否|-| |9|定位点经度|double|deg|[-180,180]|否|-| |10|定位点纬度|double|deg|[-90,90]|否|-| |11|参考站经度|double|deg|[-180,180]|否|-| |12|参考站纬度|double|deg|[-90,90]|否|-| #### 19. 双星时频差带参xyz星历误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定55|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|主星星历VX|double|-|-|否|-| |6|主星星历VY|double|-|-|否|-| |7|主星星历VZ|double|-|-|否|-| |8|邻星星历X|double|-|-|否|-| |9|邻星星历Y|double|-|-|否|-| |10|邻星星历Z|double|-|-|否|-| |11|邻星星历VX|double|-|-|否|-| |12|邻星星历VY|double|-|-|否|-| |13|邻星星历VZ|double|-|-|否|-| |14|目标上行频点|double|MHz|-|否|-| |15|参考上行频点|double|MHz|-|否|-| |16|主星本振|double|MHz|-|否|-| |17|邻星本振|double|MHz|-|否|-| |18|定位点经度|double|deg|[-180,180]|否|-| |19|定位点纬度|double|deg|[-90,90]|否|-| |20|参考站经度|double|deg|[-180,180]|否|-| |21|参考站纬度|double|deg|[-90,90]|否|-| #### 20. 双星时频差无参双行根误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定56|否|-| |2|主星双行根数|string|-|-||-| |3|邻星双行根数|string|-|-||-| |4|采集时刻|string|-|-||yyyy-MM-dd HH:mm:ss| |5|目标上行频点|double|MHz|-|否|-| |6|主星本振|double|MHz|-|否|-| |7|邻星本振|double|MHz|-|否|-| |8|定位点经度|double|deg|[-180,180]|否|-| |9|定位点纬度|double|deg|[-90,90]|否|-| |10|接收站经度|double|deg|[-180,180]|否|-| |11|接收站纬度|double|deg|[-90,90]|否|-| #### 21. 双星时频差无参xyz星历误差椭圆 |参数序号|参数|参数类型|单位|参数限制|必须添加双引号|说明| |---|---|---|---|---|--|---| |1|算法类型|int|-|固定57|否|-| |2|主星星历X|double|-|-|否|-| |3|主星星历Y|double|-|-|否|-| |4|主星星历Z|double|-|-|否|-| |5|主星星历VX|double|-|-|否|-| |6|主星星历VY|double|-|-|否|-| |7|主星星历VZ|double|-|-|否|-| |8|邻星星历X|double|-|-|否|-| |9|邻星星历Y|double|-|-|否|-| |10|邻星星历Z|double|-|-|否|-| |11|邻星星历VX|double|-|-|否|-| |12|邻星星历VY|double|-|-|否|-| |13|邻星星历VZ|double|-|-|否|-| |14|目标上行频点|double|MHz|-|否|-| |15|主星本振|double|MHz|-|否|-| |16|邻星本振|double|MHz|-|否|-| |17|定位点经度|double|deg|[-180,180]|否|-| |18|定位点纬度|double|deg|[-90,90]|否|-| |19|接收站经度|double|deg|[-180,180]|否|-| |20|接收站纬度|double|deg|[-90,90]|否|-| ### 三.反序列化需要用到的对象如下 /// /// 对应地图上一个点 /// public class MapDot { public MapDot() { } public MapDot(double lon,double lat,double alt) { this.Lon = lon; this.Lat = lat; this.Alt = alt; } public double Lon { get; set; } public double Lat { get; set; } public double Alt { get; set; } } /// /// 对应地图上一条曲线(由多个点组成) /// public class MapLine { public List Line { get; set; } = new List(); } /// /// 一个误差距离对应地图上多条曲线 /// public class ErrDistanceMapLines { public double ErrDistance { get; set; } public string ErrDistanceKm => $"{ErrDistance / 1e3}km"; public List MapLines { get; set; } = new List(); } ### 四.C#调用Demo如下 ## GDOP误差分布 Process p = new Process(); var binPath = AppDomain.CurrentDomain.BaseDirectory; p.StartInfo.WorkingDirectory = $"{binPath}ProcessCore\\GDOP"; p.StartInfo.FileName = $"{binPath}ProcessCore\\GDOP\\GdopCore.exe"; p.StartInfo.Arguments = $"";//按接口说明传参,参数有空格需要使用双引号包裹 p.StartInfo.CreateNoWindow =true; p.StartInfo.RedirectStandardError = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = false; StringBuilder sb = new StringBuilder(); p.OutputDataReceived += (sender, e) => sb.Append(e.Data);//使用异步流读取避免死锁 p.Start(); p.BeginOutputReadLine(); p.WaitForExit();//WaitForExit加了超时时间的话进程退出后不能保证异步流已经读取完成,这是.NET框架的BUG var txt=sb.ToString();//1 错误信息 or 0 jsonStr if (string.IsNullOrWhiteSpace(txt)) { throw new Exception("GDOP计算出现未知错误!"); } if (txt.StartsWith("1 ")) { throw new Exception(txt.Remove(0, 2)); } var jsonStr = txt.Remove(0, 2); var res = JsonConvert.DeserializeObject>(jsonStr); //TODO 将res对象绘制到地图 ## 误差椭圆 Process p = new Process(); var binPath = AppDomain.CurrentDomain.BaseDirectory; p.StartInfo.WorkingDirectory = $"{binPath}ProcessCore\\GDOP"; p.StartInfo.FileName = $"{binPath}ProcessCore\\GDOP\\GdopCore.exe"; p.StartInfo.Arguments = $"";//按接口说明传参,参数有空格需要使用双引号包裹 p.StartInfo.CreateNoWindow =true; p.StartInfo.RedirectStandardError = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = false; StringBuilder sb = new StringBuilder(); p.OutputDataReceived += (sender, e) => sb.Append(e.Data);//使用异步流读取避免死锁 p.Start(); p.BeginOutputReadLine(); p.WaitForExit();//WaitForExit加了超时时间的话进程退出后不能保证异步流已经读取完成,这是.NET框架的BUG var txt=sb.ToString();//1 错误信息 or 0 jsonStr if (string.IsNullOrWhiteSpace(txt)) { throw new Exception("误差椭圆计算出现未知错误!"); } if (txt.StartsWith("1 ")) { throw new Exception(txt.Remove(0, 2)); } var arr = txt.Split(' '); var errR1=Convert.ToDouble(arr[1]);//椭圆长轴 var errR2=Convert.ToDouble(arr[1]);//椭圆短轴 var jsonStr= arr[3]; var res = JsonConvert.DeserializeObject>(jsonStr); //TODO 将res对象绘制到地图