gpt4 book ai didi

c++ - 使用查找表进行坐标转换

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:04 25 4
gpt4 key购买 nike

我有一个应用程序,它读取带有值(即纬度、经度、值)的网格化坐标数据,然后将这些数据绘制在 map 上。绘制的 map 使用朗伯共形圆锥投影,因此所有坐标数据都必须从纬度/经度转换为东距/北距。这一切都很好,但是在读取多个数据文件时存在明显的性能问题。由于所有数据文件都包含相同的一组点(尽管不一定以相同的顺序),我认为某种查找表对坐标转换很有用。但是,我以前从未使用过查找表,并且在弄清楚设计时遇到了一些麻烦。

简而言之 - 假设坐标对之间存在 1:1 关系,关于采用经纬度坐标对(浮点值)并查找相应的 E/N 对(浮点值)的最快方法的任何建议,没有缺失值等?

由于纬度/经度是浮点值,我不能将它们用作数组索引(例如:lookup_array[lat][lon]),显然这才是我最容易被绊倒的地方。

注意:此解决方案可以使用 C 或 C++,以具有最佳解决方案为准。

最佳答案

您要使用的技术称为 memoization .对于您的情况,hash table似乎很适合 lookup table . C++11 有一个标准的基于散列的关联容器,称为 std::unordered_map。存在 C++03 的实现;例如GCC 和 MSVC 的早期版本有 std::tr1::unordered_map。您需要创建(或找到)一个好的哈希函数,将坐标转换为哈希值(请参阅下面评论中 Johan Lundberg 的建议)。

基于比较的关联容器,例如std::map,也适用,但当元素数量足够大时速度会明显变慢。

关于c++ - 使用查找表进行坐标转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9011373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com