2011-02-26 141 views
0

我有以下类型的输入:如何表示地理位置查找的街道地址范围?

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个问题)

回答

1

我会采取刺探后续问题。我假设1区的街道1 .. 6是主要街道,泽塔是地址范围内这些街道之间的小街道。

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

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

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

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

  4. 检查此lat/lng是否在多边形形状内。

如果您决定使用按地址进行匹配,则此处为美国邮政地址标准的链接。你可以使用这个标准来规范你的地址。

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

安德鲁 在OpenGeoCode.Org

+0

谢谢,就是这样。 – 2011-03-02 16:38:21

2

假设你将依赖于外部资源(如谷歌或雅虎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. 

上面显示我已经标准化的街道地址(情况加上占像“西方”与“东”)在一种与我的外部反向地理编码器同步的方式。然后,我在索引的第二级实现一个范围查找(这就是我写的原因,意味着您需要实现该逻辑),这样我就不必枚举它们之间的所有数字。 注意:格式/表示形式的很多细节将取决于您反向地理编码源遵守的习惯,因此您认为重要,因为您认为此数据的规范化/规范化形式为,否则您将获得许多错误的否定。

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

+0

尼斯和完整的答案队。但它并没有解决以下问题:我有地址“Zeta street 5”,它位于6街道定义的1区,它们都不是Zeta。我如何获得这条街的正确区域? – 2011-02-26 18:39:28

+0

嗯,我刚刚意识到我需要重新解释我的问题,因为你的答案对我所问的问题是完美的,但实际上我需要的不仅仅是这些。 – 2011-02-26 18:59:51