使用函数追踪加拿大边界。 (加拿大的经纬度分界线)
Tracing Canadian borders with a function. (longitude and latitude boundaries of Canada)
我正在编写一个 python 脚本来生成加拿大的随机地址。为此,我必须生成加拿大边界内(不在海洋中)的随机元组(经度、纬度)。
我想我可以用小矩形来近似边界(就像在微积分中一样)。哪个起作用,但不是 optimal/accurate。
我在网络上找不到任何学术 paper/discussion,可能是我的搜索没有包含正确的关键字。你能帮我找到合适的资源甚至回答这个问题吗?编程部分很好,我只需要数学!
谢谢
您说的是反向地理编码。最简单的方法是使用 google 地图地理编码 API.
您无需注册也可以这样做,但您每天只能拨打 4-5 次电话。您可以免费注册相对较多的通话次数(我上次检查时为 20-25k),如果超过该次数,则必须付费。
import requests
import json
def getplace(lat, lon):
url = "http://maps.googleapis.com/maps/api/geocode/json?"
url += "latlng=%s,%s&sensor=false" % (lat, lon)
data = {'key': 'your-api-key-goes-here'} # If using your free 5 calls, include no data and just doa get request on the url
v = requests.post(url=url, data=data)
j = json.loads(v.text)
components = j['results'][0]['address_components']
country = town = None
for c in components:
if "country" in c['types']:
country = c['long_name']
if "locality" in c['types']:
town = c['long_name']
return town, country
print(getplace(45.425533, -75.69248))
print(getplace(45.525533, -77.69248))
以上输出:
('Ottawa', 'Canada')
("Barry's Bay", 'Canada')
您可以打印出原始响应 print(v.text
以查看数据对象并找到您真正关心的字段
我正在编写一个 python 脚本来生成加拿大的随机地址。为此,我必须生成加拿大边界内(不在海洋中)的随机元组(经度、纬度)。 我想我可以用小矩形来近似边界(就像在微积分中一样)。哪个起作用,但不是 optimal/accurate。
我在网络上找不到任何学术 paper/discussion,可能是我的搜索没有包含正确的关键字。你能帮我找到合适的资源甚至回答这个问题吗?编程部分很好,我只需要数学!
谢谢
您说的是反向地理编码。最简单的方法是使用 google 地图地理编码 API.
您无需注册也可以这样做,但您每天只能拨打 4-5 次电话。您可以免费注册相对较多的通话次数(我上次检查时为 20-25k),如果超过该次数,则必须付费。
import requests
import json
def getplace(lat, lon):
url = "http://maps.googleapis.com/maps/api/geocode/json?"
url += "latlng=%s,%s&sensor=false" % (lat, lon)
data = {'key': 'your-api-key-goes-here'} # If using your free 5 calls, include no data and just doa get request on the url
v = requests.post(url=url, data=data)
j = json.loads(v.text)
components = j['results'][0]['address_components']
country = town = None
for c in components:
if "country" in c['types']:
country = c['long_name']
if "locality" in c['types']:
town = c['long_name']
return town, country
print(getplace(45.425533, -75.69248))
print(getplace(45.525533, -77.69248))
以上输出: ('Ottawa', 'Canada') ("Barry's Bay", 'Canada')
您可以打印出原始响应 print(v.text
以查看数据对象并找到您真正关心的字段