python—geopy地理编码及坐标距离计算

目录

地理编码

反地理编码

坐标距离计算


地理编码

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)  # 计算球面距离

  

猜你喜欢

转载自blog.csdn.net/JBY2020/article/details/127304709
今日推荐