如何完成地址的地理编码?

bus*_*ina 2 google-maps geolocation google-geocoder

我想知道Google如何进行地理编码和解决?它是否像DNS查找一样工作,它们有一个大地址表,这是一个地理编码的哈希,或者是否有任何有趣的几何图形?如果它是一个大哈希表,他们是如何收集所有数据的呢?

Mat*_*att 5

Busbina,我在SmartyStreets工作,我们在那里验证和编码街道地址 - 所以我会告诉你我所知道的,并将你链接到你自己的研究的其他来源.

回答你的问题:两者兼而有之.

有大量数据库的供应商(例如,像TIGER数据的那些)包含关系,地理政治信息,包括坐标,街道,边界和名称.对于美国数据,只需通过查找就可以通过这些表获得至少ZIP级精度.但是,为了更准确,请附加+4代码,您可以将其缩小到高层建筑的城市街区或楼层.

为了进一步准确(即知道建筑物在街道上的精确位置),谷歌和其他人执行所谓的插值,他们从数据集中获取已知边界,并从一开始就采用已知的主要数字范围.阻挡或街道到它的尽头,他们解决了一个比例.如果已知正确的主号码,并且在理想设置中的直道上,则这样的简单比例有效:

(primary number - starting primary number) / (ending primary number) =
        (x - starting boundary coordinate) / (ending boundary coordinate)
Run Code Online (Sandbox Code Playgroud)

哪里x可以近距离猜测街道上的实际位置 - 但只是一个猜测.准确的建筑级数据可能非常昂贵,我认为只适用于某些城市地区.

关键是要获得正确的主号码和准确,最新的数据.由于涉及如此多信息的所有开销,维持这可能是耗时且昂贵的.

请注意,Google和类似的地图服务只执行地址近似,而不是地址验证,因此可能会出错(即使地理编码算法非常精确),因为主号码可能是错误的,甚至可能不存在.因此,如果这对您很重要(或者您没有展示Google地图并且必须遵守服务条款),那么像LiveAddress这样的东西,将由USPS认证,并且不会返回错误的地址.

所以有一些事情需要考虑.

更多信息:

**我会添加一个注释,因为我有很多这个问题:屋顶或建筑级别的准确性是非常昂贵的信息.我知道很少有提供此服务的提供商,他们自己开采和收集这些数据.例如,谷歌有街景视图项目,他们从中获得了大致地址的精确坐标,他们可以提供这样的精确度.但是大多数地理编码器使用来自官方来源的相同数据,它们只是插入不同的内容.如果你想要非常精确的坐标,比如建筑级,你可以期望为它付出巨大的代价,或者自己去收集数据.(是的,谷歌是免费的 - 除非你打算使用这些信息而不仅仅是显示地图,基本上.)