【发布时间】:2009-11-26 21:05:07
【问题描述】:
我正在从一张非统一位置的大表中提取位置实体(“麦迪逊广场花园”、“圣地亚哥动物园”等)。 我试图避免在我的新表中出现多个实体。 我没有可靠的街道地址,但正在尝试提取本地范围内的地址。
我通过计算和匹配 30 公里地理范围内的相似名称来做到这一点。
我正在浏览一个地理编码的城市表,并为每个城市创建一个纬度/经度范围,然后提取该范围内的位置名称。
以麦迪逊广场花园为例。场地将在城市表中的不同城市多次重叠。例如,Manhattan、Newark 等都可能与 NYC 范围重叠,并导致 NYC 的某些属性出现多个条目。
我不能只将范围设置为较小的区域,因为我会丢失位置,或者更糟糕的是,由于我通常没有良好的街道/城市/地理编码位置(尽管 30 公里区域),因此最终会输入更多条目似乎工作得很好)。
我希望 geohashing 能够让我创建一个边界框,我可以在其中找到重叠部分,并避免多个条目,但根据我的发现,情况似乎并非如此。
理想情况下,我相信我正在寻找可以放入单元格中的哈希值或其他值,并存储唯一的位置名称/哈希值,因此 mysql 不会以单个位置的多个条目结束。
我没有每个条目的正确街道地址(尽管我确实有一些),因此获得街道级别的准确性而不使用范围似乎并不是一个选择。 我也没有一致的城市名称,所以我以 NYC、New York、Manhattan 等结尾。但我的城市表更好,包括纽约,但不是 NYC。
_------------已编辑-------- 在再次查看 Geohash.org 之后,我认为我在正确的轨道上,只是缺少了一点粒度。 如果我取散列的前两个字符,那在一个太大的范围内是一致的。 例如,从维多利亚、公元前到波特兰的所有内容,或者前两个字符都是“C2”。 但是,使用 3 个字符的解决方案, 纽约市以“dr5”开头,纽瓦克也是如此(这很好),但哈肯萨克是“dr7”。 更糟糕的是,Vanouver,不列颠哥伦比亚省。是'C2b',但列治文的郊区是'C28'。
【问题讨论】:
-
听起来您只想要每个位置的最佳城市匹配。一个简单的方法就是选择从您所在位置到市中心距离最短的城市。它并不完美,但要做得更好,您可能需要为每个城市设置一个边界多边形。
-
是的,我很乐意这样做,Keith,不幸的是,我认为我要报废的数据太混乱了。我正在浏览几百万行,并从半结构化数据中挑选出位置。我并不总是有与该位置相关的准确城市名称,我将如何在曼哈顿和纽约市之间做出选择?那种东西是我认为绊倒我的东西。
标签: geocoding collision-detection geohashing