使用NETGeographicLib在RAWVAL方法中计算某点大地水准面高度时遇到问题

问题描述 投票:0回答:1

我正在开发一个类似于模拟的应用程序,它必须连续具有点(纬度,经度)的大地水准面高度。由于 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# 中以高性能和高精度计算 某个点(纬度、经度)的大地水准面高度?

谢谢你的兴趣。

gis height latitude-longitude geography geographic-lib
1个回答
0
投票
后来找到解决办法了

下面的方法是在多线程环境下计算超过 100 万个输入进行测试的。整个过程没有遇到任何错误。

1 - 首先,请注意必须在多线程部分之前读取“EGM96-5.pgm”文件。

2 - 尽管您这样做了,但尝试同时访问该文件会导致该错误。因此,在读取文件后,通过从 Geoid 类创建的对象调用

CacheAll() 方法

官方文档对该方法的解释:

Geoid Class 中的CacheAll() Method

注意: 使用 CacheAll() 方法只会导致内存覆盖更多位置,而这只是文件的大小(EGM96-5.pgm 文件大约为 18mb)。

希望对您也有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.