在C中进行地理编码查找

我想做一个超快速的地理编码查找,返回城镇,城市或国家输入的坐标。 我的知识是基本的,但据我所知,用C语言写作是一个好的开始。 我认为有这样的树结构是有意义的:

  • 英国
    • 肯特
    • 奥平顿
    • 洽坦
    • 罗切斯特
    • 多佛
    • 的Edenbridge
  • 威尔特
    • 斯温顿
    • Malmsbury

在我的文件/数据库中,我将有坐标和城镇/城市名称。 如果给我的程序命名为“Kent”,我想要一个程序,可以以最快的方式让我回到与“Kent”相关的坐标

出于性能原因,我应该将数据存储在二进制文件还是SQL数据库中? 搜索此数据的最佳方法是什么? 也许二叉树搜索? 应该如何存储数据? 也许?

这是一个小建议,但不仅仅是:

如果您想按名称或名称前缀查找地点,如您所示,那么建议您根据建议将数据存储在国家,地区,城镇等级中的数据结构是不明智的你可能会。 如果您的操作主导了数据结构的使用,那么通常最好选择适合操作的数据结构。

在这种情况下,按字母顺序排列的地方列表将更适合您的查询。 对于不在最顶层的每个地方,您可能希望添加某种对其“父”名称的引用。 如果你有一个按字母顺序排列的地方列表,你可能还想考虑一个索引,也许是一个直接指向列表中第一个以字母表中每个字母开头的地方。

当你描述你的问题时,它似乎与在字典中存储单词有更多共同点(我的意思是你在任何特定的编程语言中查找单词而不是任何特定集合数据类型的东西(名称)比大多数以地理编码为幌子的东西。

我的猜测是,一个包含全世界所有城镇,城市,地区和国家(及其坐标)名称的地名录,其人口超过1000,可以存储在一个非常简单的数据结构中(基本上是一个列表)使用一个或两个索引来快速定位第一个A地名,第一个B,依此类推。 通过稍微压缩,您可以将其保存在大多数现代台式PC的内存中。

我认为我能给出的最好建议是使用您熟悉的任何语言来获得您想要的结果。 代码工作后担心性能问题。 然后,您可以查看将非常具体的function部分一次转换为C或C ++,直到获得所需的结果。

除了不重复数据之外,您不必担心信息的存储方式。

您应该为数据创建一个或多个索引标记是关联数组/映射数据结构,其包含密钥(要搜索的项目)和值(例如记录和与密钥关联的其他信息)。 这将使您能够快速查找而无需更改每种搜索类型的数据。

另一方面,您的案例非常适合数据库。 我建议您让数据库管理器使用您的数据(例如高效查找)。 毕竟,这就是他们的生活。

另请参阅: 在什么时候使用数据库值得?