https://blog.csdn.net/learn_tech/article/details/80756788

2018年06月21日 10:35:52 learn_tech 阅读数:1182
 

转载地址:https://blog.csdn.net/Next_Second/article/details/78618081?locationNum=2&fps=1

http://www.cnblogs.com/aiyuxi/p/6310035.html

geopy是一个关于地理编码的python库。主要有以下几个功能:(需要联网)

  1. 地理编码:将字符串转换为地理位置
  2. 逆地理编码:用于将地理坐标转换为具体地址
  3. 计算两个点的距离:经纬度距离和球面距离

安装

pip install geopy

使用

地理编码

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim()
>>> location = geolocator.geocode("天安门")
>>> print(location.address)
天安门, 东长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国
>>> print((location.latitude, location.longitude))
(39.9073285, 116.391242416486)
>>> print(location.raw)
{'class': 'building', 'boundingbox': ['39.9072282', '39.9075301', '116.3906498', '116.3918383'], 'place_id': '74005413', 'lon': '116.391242416486', 'osm_type': 'way', 'osm_id': '25097203', 'importance': 0.111, 'display_name': '天安门, 东长安街, 崇文, 北京市, 东城区, 北京市, 100010, 中国', 'type': 'yes', 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', 'lat': '39.9073285'}
>>>

逆地理编码

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim()
>>> location = geolocator.reverse("34.224719, 108.9427484")
>>> print(location.address)
海底捞, 长安北路, 小寨, 雁塔区, 雁塔区 (Yanta), 西安市, 陕西省, 710061, 中国
>>> print((location.latitude, location.longitude))
(34.2253171, 108.9426205)
>>> print(location.raw)
{'lon': '108.9426205', 'display_name': '海底捞, 长安北路, 小寨, 雁塔区, 雁塔区 (Yanta), 西安市, 陕西省, 710061, 中国', 'boundingbox': ['34.2252171', '34.2254171', '108.9425205', '108.9427205'], 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright', 'address': {'county': '雁塔区 (Yanta)', 'country': '中国', 'road': '长安北路', 'state_district': '西安市', 'restaurant': '海底捞', 'neighbourhood': '小寨', 'country_code': 'cn', 'postcode': '710061', 'state': '陕西省', 'town': '雁塔区'}, 'place_id': '58165875', 'lat': '34.2253171', 'osm_id': '4516338791', 'osm_type': 'node'}
>>>

计算距离

单位可以为

  • meters 米(简写m)
  • kilometers 千米(简写km)
  • miles 英里(简写mi)
  • nautical 海里(简写nm)
  • feet 英尺(简写ft)

具体可参考源代码

计算经纬度距离Vincenty distance

>>> from geopy.distance import vincenty
>>> tiananmen = (39.9073285, 116.391242416486)
>>> xiaozhai = (34.2253171, 108.9426205)
>>> print(vincenty(tiananmen, xiaozhai).meters)
913925.3164971869
>>>

计算球面距离great-circle distance

>>> from geopy.distance import great_circle
>>> tiananmen = (39.9073285, 116.391242416486)
>>> xiaozhai = (34.2253171, 108.9426205)
>>> print(great_circle(tiananmen, xiaozhai).meters)
913913.5874054108
>>>

参考

geopy Github地址 
geopy使用详解

geopy使用详解

  由于专业需要,经常接触一些地理处理的工具包,文档都是英文的,自己看的同时将其翻译一下,一方面自己学习的同时有个记录,要是能同时给一起的学习的童鞋们一些帮助,想想也是极好的。以下的文档内容主要翻译自官方文档,水平有限,错误的地方希望大家指出。

  处理地理数据经常会涉及到地理编码的问题。地理编码指的是将地理信息转化成坐标关系的过程。分为正向和反向的编码。正向的是指将地址信息转换为坐标点,比如:武汉市武汉大学-->(114.3594147, 30.5401222);反向地理编码就是将地理坐标转换为具体的地址,是一个与前面相反的过程。

  基于python的地理编码库geopy 是用于地理编码的常用工具,使用它 可获取多种地图服务的坐标。目前Python2和Python3下都支持。Python开发者可以使用geopy很容易的获取全球的某个街道地址,城市, 国家和地块的地理坐标,它是通过第三方的地理编码器和数据源来解析的。

geopy可以使用的地理定位服务如下:

OpenStreetMapNominatim,ESRIArcGISGoogleGeocodingAPI(V3)BaiduMapsBingMapsAPI,Yahoo!PlaceFinderYandexIGNFranceGeoNamesNaviData,OpenMapQuestWhat3WordsOpenCageSmartyStreetsgeocoder.us, and GeocodeFarm等. 这些丰富的地理编码器在geopy.geocoders模块下面,它提供各个地理定位服务的API类。每个地理编码器至少定义了一个geocode方法, 用于将字符串转换为地理位置;也定义了一个reverse方法,用于将地理坐标转换为具体地址。每个地理编码器需要接受认证和设置才能使用它的服务,例 如:在初始化时,需要一个API key或者locale。

geopy 在python中的使用的更多相关文章

  1. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  2. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  3. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  4. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  5. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

  6. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  7. python2.7高级编程 笔记二(Python中的描述符)

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  8. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  9. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

随机推荐

  1. PHP urlencode空格被转为+的问题

    我想既然各位点进来,绝大数是因为你遇到了空格被转为+号所带来的坑 不过没关系,解决方案很简单:使用rawurlencode()来进行编码即可~此函数遵循RFC 3986标准,空格会被转为%20 同时, ...

  2. matlab循环中显示figure时窗口跳动

    在Matlab中,当在一个循环内部利用figure显示图片时,有时候会出现窗口跳动,尤其是两个显示器的时候, 具体就是每次循环中显示的figure的位置都出现在屏幕的不同位置,导致看起来灰常不爽 go ...

  3. LeetCode 921. 使括号有效的最少添加(Minimum Add to Make Parentheses Valid) 48

    921. 使括号有效的最少添加 921. Minimum Add to Make Parentheses Valid 题目描述 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的 ...

  4. DataTable Distinct

    DataView dataView = dtTemp.DefaultView; DataTable dataTableDistinct = dataView.ToTable(true, "U ...

  5. 51book机票接口对接,吐血整理(含PHP封装代码)

    前言 最近在对接51book的机票接口,遇到了挺多坑,所以整理一份作为记录 机票有两个不同的接口,一个是机票,另一个是保险 一.申请 要接51book的机票,首先是要申请账号,这时候应该是有客户经理跟 ...

  6. Python3 - Bytes类型

    Python3 新增 bytes 类型,是指一堆字节的集合,十六进制表现形式,两个十六进制数构成一个 byte ,以 b 开头的字符串都是 bytes 类型. 计算机只能存储二进制,字符.图片.视频. ...

  7. .net 生成非托管代码

    最近在一个老外的程序中看到一段代码,其中使用了System.Runtime.InteropServices.MarshalAs方法进行托管代码与非托管代码之间封装数据,感觉很新颖.特意记录下来,供大家 ...

  8. 阿里云主机centos7系统创建SWAP区,并启动挂载(适合无SWAP区虚拟化平台)

    以root用户登录建立交换区文件: fallocate -l 2G /swapfile /swapfile //赋予仅root用户的权限,确保安全 mkswap /swapfile swapon /s ...

  9. maven的setting配置文件中mirror和repository的区别

    当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 . 这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 , maven认为目标仓 ...

  10. ExtractFileDir 与 ExtractFilePath 的区别

    ExtractFileDir 从文件名中获取目录名(文件不在根目录下时取得的值后没有“/”,在根目录时一样,都是盘符,例如“C:/”) ExtractFilePath 从文件名中获取路径名(文件不在根 ...