2009-07-09 105 views
5

位置数据本质上是一个树形结构。因此,当你问某人的地址时,你想知道他们居住在哪个区域/城区,城市/城镇,州/省和国家。将位置信息存储在数据库中的最佳方法是什么?

这个数据只希望只设置一次,只需要很少的修改。大多数电子商务网站和其他许多网站都需要存储这种类型的信息,但我正在努力寻找更多信息。也许是因为我没有找到合适的术语,但我认为这将是一个已经解决的常见问题。

这会导致另一个问题。我在哪里可以得到这类信息,例如哪些地区属于哪个城市,哪些城市属于哪些州,哪些州属于哪些国家?

编辑:为了使事情更加复杂我希望能够提供一种通用的解决方案,因为例如一些国家不使用邮政编码,他们使用邮政编码,它是有点相同的事情,但不是相当。我最大的愿望是拥有区域/郊区 - >城市/城镇 - >地区/省/州 - >国家。我可能正在尝试不可能的事情。

编辑2: 对不起,我可能没有足够清晰,但我不需要邮政编码。只是郊区/地区名称 - >城市........

回答

1

如果你想获得美国拉链信息看看Tiger。这是来自美国人口普查的信息,将为您提供所有数据。但是,需要注意的是信息不容易抽象,所以需要一些时间。

0

这比第一次出现更复杂。一些城镇有多个邮政编码。一些邮政编码有多个城镇。许多地址可以使用主要城镇或最近城市的名称。验证地址不是微不足道的。

如果您想尝试存储邮政编码数据,您可以购买zip code databases。但是您可能会发现使用their tool来验证USPS更容易。

0

如果你对邮政编码不感兴趣,也许你可以从Wikipedia刮你需要的东西。

0

首先,这里有两个截然不同的东西:地理信息和政治/组织信息。 可以共享邮政编码,但在地理上任何物体都完全位于另一个物体内。

当我们必须解决问题时,我们只需制作一个通用树结构,其中每个地理节点都有对每个父节点的引用。顶级节点(我们的例子中的国家)没有父级引用。而且,对于不同的国家我们有不同的结构。唯一的要求是它必须是分层的。

之后,我们通过预先计算树遍历信息来加速地理查询。我们遍历树,计算遍历顺序并将其存储在地理节点中。在那之后,查询中的简单的int比较足以检查一个地理位置是否在另一个地理位置之内等等。

与此同时,像邮政编码信息这样的东西看起来就像这里的并行数据结构一样,存储在不同的表中,并且引用地理结构中的地理节点。

相关问题