16

我很好奇 Google 地理编码器的工作原理。

我一直在研究一些开源地理编码器的实现,比如geocommons 的 geocoderPostGIS 的新 Tiger Geocoder。到目前为止,这大致是我所知道的(希望能证明我一直在做功课):

我意识到开源地理编码器的核心包含三个主要元素。

1.- 一个地址规范化器,它采用任意字符串并将其规范化(以此处为例):

normalize_address('address string');

e.g.: SELECT naddy.* FROM normalize_address('29645 7th Street SW Federal Way 98023') AS naddy;

 address | predirabbrev |      streetname       | streettypeabbrev | postdirabbrev | internal | location | stateabbrev |  zip  | parsed
 ---------+-------------+-----------------------+------------------+---------------+----------+----------+-------------+-------+--------
 29645 |               | 7th Street SW Federal  | Way              |               |          |          |             | 98023 | 

和:

2.- 一个地理编码器,它对核心算法是Levenshtein Distance的名称进行一些神奇的模糊匹配。

一个很好的例子是维基百科文章中的一个,它计算了单词 kitten 和 sit 之间的 Levenshtein 距离(距离为 3,因为这是将一个字符串更改为另一个字符串所需的编辑次数):

kitten → sitten (substitution of 's' for 'k')
sitten → sittin (substitution of 'i' for 'e')
sittin → sitting (insertion of 'g' at the end).

3.- 在最后对街道段进行一些插值,以猜测房子在哪里。我下载了一大块免费的Census Tiger 街道数据集来创建这个示例。

街道插值示例

在上面的示例中,感兴趣的街道段 (Schaeffer Hills Dr) 有一个从 300 开始的from 节点(所以 300 Schaeffer Hills Dr)和一个在 400 结束的to 节点(400 Schaeffer Hills Drv)。如果我匹配到这个 Schaeffer Hills Drv,并且请求是针对 310 号街道,那么算法只会将其插入(遍历其中的 10%)到我的绿色箭头所在的位置。

这就是开源地理编码器工具的作用。尽管如此,谷歌显然比这更聪明,并使用各种非传统的提示。

怎么会这样?

例如,我可以输入680 Mission st(没有城市、州、县,什么都没有)。大多数标准地址规范器会因为找到太多匹配项而崩溃。但是因为我在旧金山,我谷歌使用我的 ip 来获取一些类似 geoip 的信息,通过一些模糊搜索做一些扩展边界作为提示,然后立即找到匹配的最接近的段并告诉我这是我的答案(哪个是对的!)。

除了我上面描述的技术之外,我正在寻找可以更清楚地了解 Google 地理编码器如何工作的答案。

更新:

好的,到目前为止,我们列出了两种提示

  • Geoip 作为提示
  • 感兴趣区域边界框(参见 Paul 的示例)。
  • 其他的?
4

2 回答 2

7

通过戳黑盒子可以发现的一件事是 Google 地理编码器对令牌的顺序并不完全敏感(没有强制执行街道/城市/州/国家/地区的期望,尽管当你遵循时它会更好那)。这对我说,他们可能会将所有内容转储到某种全文搜索中,然后查看返回的内容。或者也许不是。尝试搜索“sault saint marie adams 200”和“sault saint marie adams 200”。

关于您的任务示例,这是一个很棒的示例,因为您可以看到地图提示直接发挥作用:

使用欧洲地图窗口查询:欧洲结果。

使用欧洲地图窗口查询:欧洲结果

使用北美地图窗口查询:美国结果。

使用北美地图窗口查询:美国结果

于 2012-06-12T21:19:35.250 回答
4

还有另一个数据来源:县财产地图。这些不仅包括道路,还包括财产线(及其街道地址)。您经常可以在 Google 的地图上看到这一点,它实际上会显示分隔相邻属性的微弱线条。有时他们甚至勾勒出建筑物(县地图通常也包括这些)。

您也可以进行反向查找,因为您的 GPS 坐标查找您的确切地址可以像 2D 查询一样简单,以查找您所在的属性多边形。当我远离道路时,我已经看到这个工作正常但是仍在物业内,尽管手机离另一条街道更近,但它仍返回了正确的街道地址。

请注意,这些地图往往是公开的,有些县甚至有自己的在线界面。您甚至可以查找谁拥有特定地块。

于 2012-06-12T06:17:53.967 回答