如何表示地理位置查找的街道地址范围?

时间:2011-02-26 13:54:41

标签: algorithm data-structures geolocation

我有以下类型的输入:

Zone 1 =>
  Alabama street, 1 to 135, west side
  Alabama street, 2 to 144, east side
  Bahama square, 2 to 4
Zone 2 =>
  Bahama square, 5 to 8
  Cecil street, 3 to 27

这些数据代表某个区域内的某些区域。就像一个城市中的一个小区域,由几条封闭的街道所定义。

如果我获得了地理位置(纬度,经度),我该如何将此值映射到上述上下文中的区域?很明显,谷歌地图查找会给我一个地址,但如何从那里开始?为有效区域建立表示此类数据(地址范围)的最佳方法是什么?

(哇,1中有3个问题)

2 个答案:

答案 0 :(得分:2)

假设您将依赖外部来源(如Google或Yahoo PlaceFinder)进行反向地理编码,您将获得街道号码和街道(让我们假设城市,州等都匹配)。一旦你有街道和街道号码,就可以查询区域的“数据库”。

因此,您真正想要的是一个帮助您识别正确区域的索引。您可以选择在街道号码,街道名称或两者的组合上添加索引。例如,假设您使用像Yahoo PlaceFinder这样的常量源,可以安全地假设您获得的输出将被标准化,并且使用(街道号,街道)索引可能是可行的。

然而,在街道名称的规范化形式上创建索引可能会更健壮(即,由于名称+数字变化而更不容易出错)。在查询索引时,您将询问每个街道节点,以查看您所拥有的数字是否属于该范围。

因此,例如,您的索引可能如下所示:

w. alabama ==> 1 <to> 135 ==> zone 1
e. alabama ==> 2 <to> 144 ==> zone 1
    bahama ==> 2 <to> 4 ==> zone 1
           ==> 5 <to> 8 ==> zone 2
etc.

以上显示我已经以与我的外部反向地理编码器同步的方式规范化了街道地址(案例加上“西”与“东”之类的会计)。然后我在索引的第二级实现了一个范围查找(这就是我写的原因,暗示你需要实现那个逻辑),所以我不必枚举它们之间的所有数字。 注意:此处格式/表示的许多细节将取决于您的反向地理编码源遵循的习惯,因此重要的是您考虑此数据的规范/规范化形式或者您会得到很多误报。

当然,您可以在关系数据库的帮助下完成大部分工作,具体取决于它们对范围索引的支持。但是,如果你没有一个方便或者不想与一个集成,我认为上面的自定义索引可以工作。

答案 1 :(得分:1)

我会抓住后续问题。我假设1区的街道1 .. 6是主要街道,而Zeta是地址范围内这些街道之间的小街。

我的解决方案是为区域形成shapefile,然后检查要检查的地址的lat / lng是否在shapefile中。这是一些方法细节:

  1. 使用反向API获取每个街道终点的纬度/经度(例如,1 w。阿拉巴马州,135 w。阿拉巴马州等)。

  2. 使用这些端点在您的区域周围创建多边形(shapefile)。

  3. 使用反向API获取要检查的地址的纬度/经度。

  4. 检查此纬度/经度是否在多边形内。

  5. 如果你决定使用地址匹配,这里是美国邮政地址标准的链接。您可以使用此标准来规范您的地址。

    http://pe.usps.gov/text/pub28/welcome.htm

    安德鲁 OpenGeoCode.Org团队