Google地理编码器如何工作?

时间:2012-06-12 06:09:09

标签: google-maps geocoding google-geocoder

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

我一直在研究开源地理编码器的一些实现,例如geocommons' geocoderPostGIS's new Tiger Geocoder。这大致是我目前所知的(希望证明我一直在做我的作业):

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

1.- 地址规范化程序,它接受任意字符串并对其进行规范化(taking the example from here):

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和sitting之间的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 street dataset来创建这个例子。

street interpolation example

在上面的例子中,感兴趣的街道段(Schaeffer Hills Dr)有一个来自节点,从300开始(所以300 Schaeffer Hills Dr)和到节点结束于400(400 Schaeffer Hills Drv)。如果我匹配这个Schaeffer Hills Drv,并且要求是310街道,那么算法只会interpolate到它(遍历10%)到我的绿色箭头所在的位置。

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

怎么样?

例如,我可以输入680 Mission st(没有城市,州,县,任何东西)。大多数标准地址规范化器会爆炸,因为它们会发现太多匹配。但是因为我在SF,我猜测谷歌使用我的ip来获得一些geoip-like informationsome expanding bounding作为一个模糊搜索提示,并立即找到最接近的匹配的段并告诉我这是我的答案(这是正确的!)。

除了上面描述的技术之外,我正在寻找能够更好地了解Google地理编码器如何运作的答案。

更新

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

  • Geoip as hints
  • 感兴趣区域边界框(见保罗的例子)。
  • 其他?

2 个答案:

答案 0 :(得分:6)

你可以通过在黑匣子上找到的一件事就是谷歌地理编码器对令牌的顺序并不完全敏感(没有强制的街道/城市/州/国家的期望,尽管它在你确实遵循那个)。对我说,他们可能会把所有东西都倾倒到某种全文搜索中,然后看看会有什么回来。或许不是。尝试搜索“sault saint marie adams 200”和“sault saint marie 200 adams”。

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

Query with map window over Europe: European results.

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

Query with map window over North America: American results.

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

答案 1 :(得分:4)

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

你也可以进行反向查找,因为你的GPS坐标找到你的确切地址可以像2D查询一样简单,找到你所在的属性多边形。我在身体远离的时候看到这个工作正常尽管手机靠近另一条街道,但仍然在公寓内,它返回了正确的街道地址。

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