目录
坐标距离计算
地理编码
from geopy.geocoders import Nominatim
from pprint import pprint
geolocator = Nominatim(user_agent='jia')
loc = geolocator.geocode('昆山市花桥镇') # 地理编码
print(loc.address) # 打印结果:花桥镇, 昆山市, 苏州市, 江苏省, 215332, 中国
print(loc.longitude, loc.latitude) # 打印经纬度
print(loc.altitude) # 打印海拔
pprint(loc.raw) # 打印地图信息
创建Nominatim对象时不添加user_agent参数会报错:
Traceback (most recent call last):
File "D:\zhuomian\demo\sty\jdt.py", line 3, in <module>
geolocator = Nominatim()
File "D:\python\lib\site-packages\geopy\geocoders\nominatim.py", line 105, in __init__
raise ConfigurationError(
geopy.exc.ConfigurationError: Using Nominatim with default or sample `user_agent` "geopy/2.2.0" is strongly discouraged, as it violates Nominatim's ToS https://operations.osmfoundation.org/policies/nominatim/ and may possibly cau
se 403 and 429 HTTP errors. Please specify a custom `user_agent` with `Nominatim(user_agent="my-application")` or by overriding the default `user_agent`: `geopy.geocoders.options.default_user_agent = "my-application"`.
解决方法:给参数user_agent给任意值即可
反地理编码
location = geolocator.reverse("31.3038368 121.0843885") # 反地理编码
print(location.address) # 打印结果:花溪路, 花桥镇, 昆山市, 苏州市, 江苏省, 中国
print(location.longitude, location.latitude) # 打印经纬度
print(location.altitude) # 打印海拔
pprint(location.raw) # 打印地图信息
坐标距离计算
坐标系模式(默认使用WGS-84坐标系):
model major (km) minor (km) flattening ELLIPSOIDS = {'WGS-84': (6378.137, 6356.7523142, 1 / 298.257223563), 'GRS-80': (6378.137, 6356.7523141, 1 / 298.257222101), 'Airy (1830)': (6377.563396, 6356.256909, 1 / 299.3249646), 'Intl 1924': (6378.388, 6356.911946, 1 / 297.0), 'Clarke (1880)': (6378.249145, 6356.51486955, 1 / 293.465), 'GRS-67': (6378.1600, 6356.774719, 1 / 298.25), }
from geopy.distance import geodesic, great_circle, distance
home = (31.4379182, 121.0360873)
company = (29.4379182, 120.0360873)
# 可以是meters(米)、kilometers(千米)、miles(英里)、nautical(海里)、feet(英尺),默认为千米
print(distance(home, company))
print('经纬度距离:', geodesic(home, company).meters) # 计算经纬度距离,结果同print(distance(home, gs).meters)
print('球面度距离:', great_circle(home, company).meters) # 计算球面距离