geopy.geocoders解决关于具体地址和经纬度互转的问题

对于经纬度的操作也许也会在我们日常生活中使用到,这里简单的介绍一下如何使用geopy.geocoders这个库来得到对应地点的经纬度以及根据对应的经纬度得到它的地址的小工具。

from geopy.geocoders import Nominatim

import re

import time
这是代码需要导入的三个python包,对应网上的教程install一下即可

geolocator = Nominatim()

首先利用Nominatim得到一个我们的定位器geolocator

假设接下来在txt文件中有这样一些经纬度

B0001       22.947097113.679983   114  6:30:00    67997.3868

B0002       22.577792113.966524   163  6:30:00    37926.5416

B0003       23.192458113.347272   139  6:30:00    27953.0363

B0004       23.255965113.31875      98     6:30:00    25085.6986

B0005       33.65205116.97047        66     6:30:00    20919.0667

B0006       22.262784112.79768      72     6:30:00    18237.6295

B0007       29.560903106.239083   15     6:30:00    15729.3601

B0008       23.143373113.376315   95     6:42:00    14868.4446

B0009       23.28528113.651842      110  6:36:00    13556.1555

B0010       23.099259113.488909   64     6:36:00    13327.9511

B0011       23.192462113.34726      89     6:42:00    11349.0899

B0012       22.548889113.955368   102  6:33:00    10957.5811

B0013       23.178845113.358177   90     6:45:00    10427.7392

B0014       23.054911113.768888   232  6:30:00    10210.6765

B0015       23.053426113.761634   217  6:33:00    10187.7506

如何才能得到对应的address呢

for count in range(0,1877):

    f= open('c.txt',encoding='UTF-8')

   line = f.readline()

   rest = f.read()

   f.close()

   temp=line.split()

   location = geolocator.reverse(str(temp[1])+","+str(temp[2]))

   if '深圳' in location.address:

       f2 = open('shenzhen.txt','r+')

       f2.read()

       f2.write(str(line))

       f2.close()

   elif '佛山' in location.address:

       f2 = open('foshan.txt','r+')

       f2.read()

       f2.write(str(line))

       f2.close()

   elif '东莞' in location.address:

       f2 = open('dongguan.txt','r+')

       f2.read()

       f2.write(str(line))

       f2.close()

   elif '广州' in location.address:

       f2 = open('guangzhou.txt','r+')

       f2.read()

       f2.write(str(line))

       f2.close()

   else:

       f2 = open('other.txt','r+')

       f2.read()

       f2.write(str(line))

       f2.close()

   f3 = open('count.txt','r+')

   f3.read()

   f3.write(str(line))

   f3.close()

    f= open('c.txt','w',encoding='UTF-8')

   f.write(rest)

   f.close()

time.sleep(1)

先无视一些我自己加入的处理,需要做的仅仅就是一句话,利用geolocator.reverse函数把输入的经纬度得到一个geopy.location.Location的一个object,里面有所有你想要的东西,都在各个attribute里面,具体的大家访问geopy查看object的结构即可。这里我们简简单单的要一个address。自己外加的一些处理简单的说说,就是把txt文件的每一行读入后用split分解成三个小string,后面两个就是我们要的经纬度,按照需要的格式把后面两个用逗号连接起来后作为参数传入reverse函数。然后我做了个分类,看看是这四个城市中哪个城市的就输出到对应的文件里。

 

所以,既然reserve这么简单,解析对应具体位置的经纬度也一样简单。使用geolocator.geocode传入你所要地名的字符串即可,任何语言应该都可以,比如

Location=geolocator.geocode(”北京天安门”);

然后使用location.latitude和location.longitude就得到经纬度了

that's all

你可能感兴趣的:(breadcrumb)