避免地理编码范围碰撞

时间:2009-11-26 21:05:07

标签: geocoding collision-detection geohashing

我正在从一个非均匀位置的大桌子中提取位置实体('麦迪逊广场花园','圣地亚哥动物园'等)。 我试图在我的新表中避免多个实体。 我没有可靠的街道地址,但我正在尝试提取本地范围内的地址。

我这样做的方法是在30公里的地理范围内对相似的名字进行计数和匹配。

我正在浏览地理编码的城市表,并为每个城市创建一个纬度/经度范围,然后提取该范围内的位置名称。

以麦迪逊广场花园为例。场地将从城市表中的不同城市多次重叠。例如,曼哈顿,纽瓦克等都可能与NYC范围重叠,并导致纽约市某些房产的多个条目。

我不能将范围设置为较小的区域,因为我会丢失位置,或者更糟糕的是,最终会有更多的条目,因为我通常没有良好的街道/城市/地理编码位置(尽管30公里区域)似乎工作得很好)。

我希望geohashing能让我创建一个边界框,在那里我可以找到重叠,并避免多个条目,但根据我发现的情况似乎并非如此。

理想情况下,我相信我正在寻找一个哈希或其他一些我可以放入单元格的值,并存储一个唯一的位置名称/哈希,因此mysql不会以单个位置的多个条目结束。

我没有为每个条目提供正确的街道地址(虽然我确实有一些),因此获得街道级别的准确性并且不使用范围似乎不是一个选项。 我也没有一致的城市名称,所以我最终得到纽约,纽约,曼哈顿等。但我的城市表更好,包括纽约,但不是纽约。

_-------------- EDITED -------------------- 再看看Geohash.org之后,我想我正走在正确的轨道上,只是缺少一点细粒度。 如果我取哈希的前两个字符,那就是在一个太大的范围内是一致的。 例如,从维多利亚,bc到波特兰的所有东西,或前两个字符都是'C2'。 但是,转到3个字符的解决方案, NYC以'dr5'开头,Newark也是如此(这很好),但Hackensack是'dr7'。 更糟糕的是,Vanouver,bc。是'C2b',但Richmond bc的郊区是'C28'。

1 个答案:

答案 0 :(得分:1)

我已经建立了一个类似的服务,它采用纬度/经度坐标并返回最近的城市。我使用了来自http://www.globixdata.com/的数据库,其中包含城市名称及其纬度/经度坐标以及可能相关的其他数据,例如近似人口。如果您的地址或地点位于城市之间的边界,则可能无法获得100%准确的结果。

我支付了数据库的费用,但你可以在网上免费找一些相似的东西。