如何以编程方式(合法地)获取街道地址的经度和纬度

时间:2020-03-06 14:59:04  来源:igfitidea点击:

据称,可以从Google Maps或者某些此类服务中获取此信息。 (仅美国地址是不够的。)

解决方案

我们要查找的术语是地理编码,是的,Google确实提供了这项服务。

  • 新的V3 API:http://code.google.com/apis/maps/documentation/geocoding/
  • 旧版V2 API:http://code.google.com/apis/maps/documentation/services.html#Geocoding

我们可以在此处查看Google Maps API文档,以开始使用此工具:

http://code.google.com/apis/maps/documentation/services.html#Geocoding

我们似乎还可以使用实时地图对国际地址进行以下操作:

http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry

如果要在不依赖服务的情况下执行此操作,则可以从美国人口普查下载TIGER Shapefile。

我们可以在感兴趣的街道上查找,该街道将分为几个部分。每个网段都有一个起始地址和结束地址,我们可以沿网段进行插值,以找到门牌号在网段上的位置。

这将为我们提供一对lon / lat。

但是请记住,在线服务使用了大量的地址检查和更正功能,我们也必须重复这些操作才能获得良好的结果。

还要注意的是,尽管有免费数据,但它并不是完美的,因为最新的街道不在其中(它们可能在Google使用的数据中),并且由于调查的不准确,这些街道可能会偏离其真实位置。但是对于98%的地理编码需求来说,它可以完美运行,免费,而且我们可以控制所有内容,从而减少了应用程序中的依赖关系。

Openstreetmaps的目的是映射世界上的所有事物,尽管它们并不完全是值得的,因为它们是根据CC许可提供数据的,因此值得一看

但是,许多(大多数?)其他国家/地区仅按我们需要付费的政府或者服务进行了映射。如果我们不需要对大量数据进行地理编码,那么使用Google,Yahoo或者其他一些免费的全球地图服务可能就足够了。

如果我们必须对大量数据进行地理编码,那么最好通过从主要提供商(例如电话簿)中租赁地图数据来为我们提供最佳服务。

-亚当

除了上述Google地理编码网络服务外,雅虎还提供了一项竞争服务。在最近的项目中,通过用户交互对地址进行地理编码,我提供了对这两者的支持。原因是我发现,尤其是在美国境外,他们对较隐蔽地点的处理方式差异很大。有时Google会有最佳答案,有时是Yahoo。

需要注意的一个陷阱:如果Google真的认为他们不知道位置在哪里,他们将返回602错误,指示失败。另一方面,雅虎如果可以从错误地址中删除某个城市/省/州/等,则会返回该镇中心的位置。因此,我们必须注意获得的结果,看看它们是否真的是我们想要的。一些结果中有一些辅助字段可以告诉我们:Yahoo将该字段称为"精度",而Google将该字段称为"准确性"。

如果网站免费供消费者使用,则Google的服务条款将允许我们免费使用其地理编码API。否则,我们将必须获得企业地图的许可证。

我们也可以尝试使用OpenStreetMap NameFinder,它包含(可能)整个世界的开源,类似Wiki的街道数据。 NameFinder将在八月底停止存在,但由Nominatim代替。

我们也可以使用Microsoft的MapPoint Web服务执行此操作。

这是一篇博客文章,解释了如何:
http://www.codestrider.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5

Google要求我们显示带有其数据的Google地图,每天最多有2.5k(原为25k)HTTP请求。有用,但我们必须注意用法。

他们确实有

http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

(此后Google删除了它。如果我们看到重复项或者缓存,我将链接至该链接。)

...在其中,我发现GeoNames具有可下载的数据库,免费的Web服务和商业Web服务。