据说可以从Google Maps或类似服务中获取此信息。(仅限美国地址并不足够。)
据说可以从Google Maps或类似服务中获取此信息。(仅限美国地址并不足够。)
你需要的术语是地理编码,是的,Google提供这项服务。
如果你不想依赖在线服务,那么可以从美国人口普查局下载TIGER Shapefiles。
查找感兴趣的街道,该街道将有几个段落。每个段落都有起始地址和结束地址,您需要对该段进行插值,以找到您的房屋号码所在的位置。
这将为您提供经纬度坐标对。
请注意,在线服务会使用大量地址检查和校正,为了获得良好的结果,您也必须复制这些步骤。
另请注意,尽管免费数据很好,但并不完美-最新的街道可能不在其中(它们可能在Google的数据中),而且由于测量误差,这些街道可能偏离其实际位置。 但对于98%的地理编码需求,它运作完美,是免费的,并且您控制一切,因此可以减少应用程序中的依赖性。
Openstreetmaps的目标是绘制全世界的地图,尽管他们还没有实现目标,但值得关注,因为他们在CC许可下提供数据。
然而,许多(大多数?)其他国家仅由政府或需要支付费用的服务进行映射。 如果您不需要对很多数据进行地理编码,则使用Google、Yahoo或其他免费的全球地图服务可能已经足够了。
如果您需要地理编码大量数据,则最好从主要提供商(例如Teleatlas)租用地图数据。
-亚当
你也可以尝试使用OpenStreetMap NameFinder,它包含了类似维基百科的开源街道数据,覆盖(可能)全球。NameFinder将在八月底停止服务,但Nominatim是它的替代品。
http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders
(Google已将其删除。如果您看到重复或缓存,我将链接到该网站。)
...其中我发现GeoNames,它既有可下载的数据库,也有免费的网络服务和商业网络服务。
如果你的网站是免费供消费者使用的,那么谷歌的服务条款将允许你免费使用他们的地理编码 API。否则,你将需要获取企业地图许可证。
可用于 Drupal 和 PHP(且易于修改):
function get_lat_long($address) {
$res = drupal_http_request('http://maps.googleapis.com/maps/api/geocode/json?address=' . $address .'&sensor=false');
return json_decode($res->data)->results[0]->geometry->location;
}
使用R代码获取街道地址的纬度和经度
# CODE TO GET THE LATITUDE AND LONGITUDE OF A STREET ADDRESS WITH GOOGLE API
addr <- '6th Main Rd, New Thippasandra, Bengaluru, Karnataka' # set your address here
url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='') # construct the URL
doc = xmlTreeParse(url)
root = xmlRoot(doc)
lat = xmlValue(root[['result']][['geometry']][['location']][['lat']])
long = xmlValue(root[['result']][['geometry']][['location']][['lng']])
lat
[1] "12.9725020"
long
[1] "77.6510688"
你也可以通过微软的MapPoint Web Services实现这一点。
以下是一篇博客文章,解释了如何实现:http://www.codestrider.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5