在C中进行地理编码查找

时间:2012-07-30 13:18:54

标签: c# c++ c search geocode

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

  • 英国
    • 肯特
    • Orpington的
    • 洽坦
    • 罗切斯特
    • 佛尔
    • 的Edenbridge
  • 威尔特
    • 斯温
    • Malmsbury

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

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

3 个答案:

答案 0 :(得分:4)

这是一个小建议,但不多于:

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

另请参阅:At what point is it worth using a database?