fam*_*gar 2 python zipcode google-maps postal-code
我有一个带开始和结束邮政编码的csv文件(英国相当于美国邮政编码),并希望计算两者之间的简单距离,公路旅行距离和旅行时间.我想要走的路是以某种方式使用谷歌地图.我首先尝试使用一些spreadhsheet和以下网址http://maps.google.com/maps?saddr="&B2&"&daddr ="&A2&"但是
rth*_*rth 17
邮政编码之间的距离可以通过pgeocode库获得。与上面的响应不同,它不查询Web API,因此更适合处理大量数据,
>>> import pgeocode
>>> dist = pgeocode.GeoDistance('GB')
>>> dist.query_postal_code('WC2N', 'EH53')
536.5 # retured distance in km
Run Code Online (Sandbox Code Playgroud)
有关这些邮政编码的更多信息,包括纬度和经度,可以查询,
>>> nomi = pgeocode.Nominatim('GB')
>>> nomi.query_postal_code(['WC2N', 'EH53'])
postal_code country code place_name \
0 WC2N GB London
1 EH53 GB Pumpherston, Mid Calder, East Calder, Oakbank
state_name state_code county_name county_code community_name \
0 England ENG Greater London 11609024 NaN
1 Scotland SCT West Lothian WLN NaN
community_code latitude longitude accuracy
0 NaN 51.5085 -0.125700 4.0
1 NaN 55.9082 -3.479025 4.0
Run Code Online (Sandbox Code Playgroud)
这使用GeoNames 邮政编码数据集来获取 GPS 坐标,然后计算这些坐标上的 Haversine(大圆)距离。大多数国家都支持。
在英国的特殊情况下,GB数据集中只包含向外的代码,完整的数据集也可用,GB_full但目前pgeocode不支持它。
alx*_*wrd 11
找到2个邮政编码之间的距离的主要问题是它们不是为它设计的.
为了指导邮件,英国被皇家邮政分为邮政编码区.- 维基百科
邮政编码本身没有提供有用的信息,因此您需要来自外部来源的帮助.http://maps.google.com上的Google地图服务没有用,因为它不是为您检索这样的信息而设计的.
Google Maps API功能丰富,可为您提供许多选项.上面的链接是Distance Matrix API,它有助于计算2点之间的距离.这样做的结果将基于旅行(驾驶距离),这可能是您想要的,也可能不是.
Python 3
import urllib.request
import json
res = urllib.request.urlopen("https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=SE1%208XX&destinations=B2%205NY").read()
data = json.loads(res.decode())
print(data["rows"][0]["elements"][0]["distance"])
# {'text': '127 mi', 'value': 204914}
Run Code Online (Sandbox Code Playgroud)
注意:Google Maps API受使用限制的约束.
postcodes.io有一个由公共数据集支持的漂亮API.示例查找.结果是JSON,可以使用json模块映射到Python字典.这里的缺点是它无法检查距离,所以你必须自己使用返回的经度和纬度.
Python 3
import urllib.request
import json
res = urllib.request.urlopen("http://api.postcodes.io/postcodes/SE18XX").read()
data = json.loads(res)
print(data["result"]["longitude"], data["result"]["latitude"])
# -0.116825494204512 51.5057668390097
Run Code Online (Sandbox Code Playgroud)
我不想过多考虑这个因为它是一个很大的话题,并且根据你想要达到的目标而变化很大,但一个好的起点是Haversine Formula,它考虑了地球的曲率.然而,它假设地球是一个完美的球体(它不是).
根据其经度和纬度,半正公式确定球体上两点之间的大圆距离.在导航中很重要,它是球形三角学中更通用公式的一个特例,即三角形的法则,它涉及球形三角形的边和角度.
以下是在Python中实现的示例:https://stackoverflow.com/a/4913653/7220776
| 归档时间: |
|
| 查看次数: |
12946 次 |
| 最近记录: |