据称,可以从Google Maps或某些此类服务中获取此信息。(仅美国地址是不够的。)
据称,可以从Google Maps或某些此类服务中获取此信息。(仅美国地址是不够的。)
Answers:
您要查找的术语是地理编码,是的,Google确实提供了这项服务。
除了上述Google地理编码Web服务外,Yahoo还提供了一项竞争服务。在最近的一个项目中,它是通过用户交互来进行地址编码的,其中包括对这两者的支持。原因是我发现,尤其是在美国以外,他们对较隐蔽地点的处理方式差异很大。有时Google会有最佳答案,有时是Yahoo。
要注意的一个陷阱:如果Google真的认为他们不知道您的位置在哪里,他们将返回602错误,指示失败。另一方面,如果雅虎可以从您的错误地址中删除某个城市/省/州/等,则会返回该镇中心的位置。因此,您必须注意获得的结果,看看它们是否真的是您想要的。结果中有一些辅助字段可以告诉您:Yahoo将该字段称为“精度”,而Google将该字段称为“准确性”。
如果要在不依赖服务的情况下执行此操作,则可以从美国人口普查下载TIGER Shapefile。
您可以在感兴趣的街道上查找,该街道将分为几个部分。每个网段都有一个起始地址和结束地址,您可以沿网段进行插值,以找到您的门牌号在网段上的位置。
这将为您提供一对lon / lat。
但是请记住,在线服务使用了大量的地址检查和更正功能,您也必须复制它们才能获得良好的结果。
还要注意,尽管有免费数据,但它并不是完美的-最新的街道不在其中(它们可能在Google使用的数据中),并且由于调查的不准确,这些街道可能会偏离其真实位置。但是对于98%的地理编码需求来说,它可以完美运行,免费,而且您可以控制所有内容,从而减少了应用程序中的依赖关系。
Openstreetmaps旨在绘制世界上所有事物的地图,尽管它们并不完全是值得一看的,因为根据CC许可提供数据
但是,许多其他(大多数?)其他国家/地区仅按您需要付费的政府或服务进行了映射。如果您不需要对大量数据进行地理编码,那么使用Google,Yahoo或其他一些免费的全球地图服务可能就足够了。
如果您必须对大量数据进行地理编码,那么最好从主要提供商(例如电话簿)中租赁地图数据来为您提供最佳服务。
-亚当
您也可以尝试使用OpenStreetMap NameFinder,它包含(可能)整个世界的开源,类似Wiki的街道数据。NameFinder将在八月底停止存在,但由Nominatim代替。
Google要求您显示包含其数据的Google地图,每天最多有2.5k(原为25k)HTTP请求。有用,但您必须注意用法。
他们确实有
http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders
(此后Google删除了它。如果您看到重复项或缓存,我将链接至该链接。)
...在其中,我发现GeoNames同时具有可下载的数据库,免费的Web服务和商业Web服务。
与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;
}
您可以在此处查看Google Maps API文档,以开始使用此工具:
http://code.google.com/apis/maps/documentation/services.html#Geocoding
您似乎还可以使用实时地图对国际地址进行以下操作:
http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry
您也可以使用Microsoft的MapPoint Web服务执行此操作。
这是一篇博客文章,解释了如何:http : //www.codestrider.com/BlogRead.aspx?b= b5e8e275-cd18-4c24- b321-0da26e01bec5
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"
如果要在Python中执行此操作:
import json, urllib, urllib2
address = "Your address, New York, NY"
encodedAddress = urllib.quote_plus(address)
data = urllib2.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=" + encodedAddress + '&sensor=false').read()
location = json.loads(data)['results'][0]['geometry']['location']
lat = location['lat']
lng = location['lng']
print lat, lng
请注意,如果Google看到的邮件数量超过一定数量,似乎确实会限制请求,因此您确实想在HTTP请求中使用API密钥。
我有100,000条记录要进行地理编码,并遇到了Google API的限制(并且由于它是针对内部企业应用程序的,因此我们必须升级到其高级服务,这需要1万美元以上)
因此,我改用了以下代码:http : //geoservices.tamu.edu/Services/Geocode/BatchProcess/-它们也有一个API。(总费用约为200美元)
您可以在JavaScript中尝试像kohat这样的城市
var geocoder = new google.maps.Geocoder();
var address = "kohat";
geocoder.geocode( { 'address': address}, function(results, status) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude+" and "+longitude);
}
});
在python中使用geopy PyPI 来获取纬度,经度,邮政编码等。这是工作示例代码。
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your-app-id")
location = geolocator.geocode("Your required address ")
if location:
print('\n Nominatim ADDRESS :',location.address)
print('\n Nominatim LATLANG :',(location.latitude, location.longitude))
print('\n Nominatim FULL RESPONSE :',location.raw)
else:
print('Cannot Find')
在Nominatim中-有些地址无法工作,所以我只是尝试了 MapQuest。
它正确返回。Mapquest每月提供免费计划15000笔交易。对我来说足够了。
样例代码:
import geocoder
g = geocoder.mapquest("Your required address ",key='your-api-key')
for result in g:
# print(result.address, result.latlng)
print('\n mapquest ADDRESS :',result.address,result.city,result.state,result.country)
print('\n mapquest LATLANG :', result.latlng)
print('\n mapquest FULL RESPONSE :',result.raw)
希望能帮助到你。
我知道这是一个古老的问题,但是Google更改了基于常规获取经纬度的方法。
HTML代码
<form>
<input type="text" name="address" id="address" style="width:100%;">
<input type="button" onclick="return getLatLong()" value="Get Lat Long" />
</form>
<div id="latlong">
<p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
<p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
</div>
JavaScript代码
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>
<script>
function getLatLong()
{
var address = document.getElementById("address").value;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var latitude = results[0].geometry.location.lat();
document.getElementById("latbox").value=latitude;
var longitude = results[0].geometry.location.lng();
document.getElementById("lngbox").value=longitude;
}
});
}
</script>