提问人:magique 提问时间:11/6/2023 最后编辑:magique 更新时间:11/15/2023 访问量:38
使用 NETGeographicLib 计算 RAWVAL 方法中某个点的大地水准面高度时遇到问题
Encountering with a problem while calculating the geoid height at a point in RAWVAL method with NETGeographicLib
问:
我正在开发一个类似于模拟的应用程序,它必须连续具有点(纬度、经度)的大地面高度。由于 NETGeographicLib 由于在 GPU 中工作和高精度而表现出高性能的原因,我更喜欢这个库,而不是 PyGeodesy、GeoidHeightDotnet 或我知道的库之间的其他库。
1 - 但是,当我反复强制 NETGeographicLib 的 ConvertHeight() 方法使用多线程计算点的大地水准面高度以及系统中点之后的六位数精度时,RAWVAL() 方法会抛出错误。
我的日志是这样说的;
There is an error in Geoid Height Calculation with lat: 41.377132999997144 lon: 28.448859000009104 with the error: GeographicLib.GeographicException: Error reading C:\Users\xxxx\Desktop\xxxx\xxxx\GeoidUndulationCalculatorWPF\bin\Debug\net6.0-windows/geoids\egm96-5.pgm: Index was outside the bounds of the array.
2 - 我想到的第一个意见,点后面的数字可能会导致错误。如果是可以使用多少位数字?
3 - 就像错误显示“egm96-5.pgm:索引超出了数组的边界”一样,文件中搜索的值超出了边界。那么你知道“egm96-5.pgm”文件的边界是什么值吗?
4 - 或者您是否知道任何替代库可以与 NETGeographicLib 执行相同的操作,该库在 C# 中以高性能和高精度计算点(纬度、纬度)的大地水准面高度?
谢谢你的有趣。
答:
我后来找到了一个解决方案,
下面的方法通过在多线程环境中计算超过 100 万个输入来测试。整个过程没有遇到任何错误。
1 - 首先,请注意必须在多线程部分之前读取“EGM96-5.pgm”文件。
2 - 尽管您这样做了,但尝试同时访问该文件会导致该错误。因此,在读取文件后,通过从 Geoid 类创建的对象调用 CacheAll() 方法。因此,当进程运行时,任何线程都能够轻松访问“EGM96-5.pgm”文件而不会发生任何冲突。
官方文档详解:大地水准面类中的 CacheAll() 方法
注意:使用 CacheAll() 方法只是因为内存覆盖了更多空间,它只是文件大小(EGM96-5.pgm 文件约为 18mb)。
希望它也能帮助你。
评论