如何通过编程(并合法地)获取街道地址的经纬度

75

据说可以从Google Maps或类似服务中获取此信息。(仅限美国地址并不足够。)

15个回答

2

如果你想用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密钥是必要的。

1

如果你想针对像kohat这样的城市,在JavaScript中尝试这个方法:

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);
  } 
});

enter image description here


1
我有一批10万条记录需要进行地理编码,但遇到了Google API的限制(而且由于这是内部企业应用程序,我们不得不升级到他们的高级服务,价格为10K美元以上)。所以我使用了这个:http://geoservices.tamu.edu/Services/Geocode/BatchProcess/ -- 它们也有一个API。(总成本约为200美元)

1
在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)

希望它有所帮助。

0
我知道这是一个旧问题,但谷歌正在定期更改获取纬度和经度的方式。
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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接