1.pip安装xlrd,xlwt,requests模块.

2.在工程目录处放置地点Excel文件。

python2.7.13代码:

#coding:utf-8
import xlrd
import xlwt
import requests
import urllib
import math
import re pattern_x = re.compile(r'"x":(".+?")')
pattern_y = re.compile(r'"y":(".+?")') def mercator2wgs84(mercator):
# key1=mercator.keys()[0]
# key2=mercator.keys()[1]
point_x = mercator[0]
point_y = mercator[1]
x = point_x / 20037508.3427892 * 180
y = point_y / 20037508.3427892 * 180
y = 180 / math.pi * (2 * math.atan(math.exp(y * math.pi / 180)) - math.pi / 2)
return (x, y) def get_mercator(addr):
quote_addr = urllib.quote(addr.encode('utf8'))
city = urllib.quote(u'兰州市'.encode('utf8'))
province = urllib.quote(u'甘肃省'.encode('utf8'))
if quote_addr.startswith(city) or quote_addr.startswith(province):
pass
else:
quote_addr = quote_addr
s = urllib.quote(u'北京市'.encode('utf8'))
api_addr = "http://api.map.baidu.com/?qt=gc&wd=%s&cn=%s&ie=utf-8&oue=1&fromproduct=jsapi&res=api&callback=BMap._rd._cbk62300" % (
quote_addr
, s)
req = requests.get(api_addr)
content = req.content
x = re.findall(pattern_x, content)
y = re.findall(pattern_y, content)
if x:
x = x[0]
y = y[0]
x = x[1:-1]
y = y[1:-1]
x = float(x)
y = float(y)
location = (x, y)
else:
location = ()
return location def run():
data = xlrd.open_workbook('Book2.xlsx')
rtable = data.sheets()[0]
nrows = rtable.nrows
values = rtable.col_values(0) workbook = xlwt.Workbook()
wtable = workbook.add_sheet('data', cell_overwrite_ok=True)
row = 0
for value in values:
mercator = get_mercator(value)
if mercator:
wgs = mercator2wgs84(mercator)
else:
wgs = ('NotFound', 'NotFound')
print "%s,%s,%s" % (value, wgs[0], wgs[1])
wtable.write(row, 0, value)
wtable.write(row, 1, wgs[0])
wtable.write(row, 2, wgs[1])
row = row + 1 workbook.save('data.xls') if __name__ == '__main__':
run()

  运行即可得到data.xls结果文件。

PS:py2和Py3有些些不同。

python3.6.1代码

# coding:utf-8
import xlrd
import xlwt
import requests
import urllib
import math
import re pattern_x = re.compile(r'"x":(".+?")')
pattern_y = re.compile(r'"y":(".+?")') def mercator2wgs84(mercator):
# key1=mercator.keys()[0]
# key2=mercator.keys()[1]
point_x = mercator[0]
point_y = mercator[1]
x = point_x / 20037508.3427892 * 180
y = point_y / 20037508.3427892 * 180
y = 180 / math.pi * (2 * math.atan(math.exp(y * math.pi / 180)) - math.pi / 2)
return (x, y) def get_mercator(addr):
quote_addr = urllib.parse.quote(addr.encode('utf8'))
city = urllib.parse.quote(u'兰州市'.encode('utf8'))
province = urllib.parse.quote(u'甘肃省'.encode('utf8'))
if quote_addr.startswith(city) or quote_addr.startswith(province):
pass
else:
quote_addr = quote_addr
s = urllib.parse.quote(u'北京市'.encode('utf8'))
api_addr = "http://api.map.baidu.com/?qt=gc&wd=%s&cn=%s&ie=utf-8&oue=1&fromproduct=jsapi&res=api&callback=BMap._rd._cbk62300" % (
quote_addr
, s)
req = requests.get(api_addr)
content = req.text
x = re.findall(pattern_x, content)
y = re.findall(pattern_y, content)
if x:
x = x[0]
y = y[0]
x = x[1:-1]
y = y[1:-1]
x = float(x)
y = float(y)
location = (x, y)
else:
location = ()
return location def run():
data = xlrd.open_workbook('Book2.xls')
rtable = data.sheets()[0]
nrows = rtable.nrows
values = rtable.col_values(0) workbook = xlwt.Workbook()
wtable = workbook.add_sheet('data', cell_overwrite_ok=True)
row = 0
for value in values:
mercator = get_mercator(value)
if mercator:
wgs = mercator2wgs84(mercator)
else:
wgs = ('NotFound', 'NotFound')
print("%s,%s,%s" % (value, wgs[0], wgs[1]))
wtable.write(row, 0, value)
wtable.write(row, 1, wgs[0])
wtable.write(row, 2, wgs[1])
row = row + 1 workbook.save('data.xls') if __name__ == '__main__':
run()

  

Python利用百度地图api批量获取地址经纬度的更多相关文章

  1. 利用百度地图API,获取经纬度坐标

    利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...

  2. 使用百度地图API自动获取地址和经纬度

    先上效果图,这是直接点击获取经纬度和地址的.没有做搜索的功能. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  3. 利用百度地图开源sdk获取地址信息。

    注册百度开发者帐号,下载相关sdk 添加权限: 添加百度注册访问应用(AK)码 添加源代码文件到libs文件: 代码如下: package com.lixu.baidu_gps; import com ...

  4. 利用百度翻译API,获取翻译结果

    利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...

  5. 百度地图API 批量添加 带检索功能的信息窗口

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 利用百度地图API和群蚁算法,对TSP问题进行模拟与求解

    前言 最近由于换了工作,期间也有反思和总结上家公司的得失,总觉得有什么事情当初可以完成或者完成得更好,其中TSP问题就是其中之一.当初在开发一个仓配系统的时候,有一个线路排程的需求,当时自己简单在纸上 ...

  7. 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)

    <?php   //获取用户ip(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获取127.0.0.1) function getip(){     if(!empty($_SERVE ...

  8. Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)

    1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:http://lbsyun.baidu.com/apiconsole/key?applicatio ...

  9. Python使用百度地图API根据地名获取相应经纬度

    今天有个需求,要根据地名获取经纬度坐标值. 于是我第一想法:打开百度地图,手动输入地名,获取.显然当地名较少时,可实施.然而,当地名较多时,此方法显然工作量很大. 于是,第二想法:代码获取,请求百度地 ...

随机推荐

  1. Debian 7开启ssh、telnet

    SSH 1. 安装ssh服务 apt-get install openssh-server 2. 开启ssh /etc/init.d/ssh  start Telnet 1. 安装telnet apt ...

  2. spring的配置文件在web.xml中加载的方式

    web.xml加载spring配置文件的方式主要依据该配置文件的名称和存放的位置不同来区别,目前主要有两种方式. 1.如果spring配置文件的名称为applicationContext.xml,并且 ...

  3. Oracle中REGEXP_SUBSTR函数(字符串转多行)

    Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下: 在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20',' ...

  4. DAY5-模块与包

    一.模块的介绍 1.什么是模块 #常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用. #在python中,模块的使 ...

  5. taglib标签在web.xml文件中报错的解决办法

    报错的原因分析: 在jsp2.0中,且2.4版的DTD验证中,taglib描述符,正确写法是放到<jsp-config></jsp-config>描述符中.所以,我们的tagl ...

  6. spring----AOP注解以及spring的JDBC和事务

    技术分析之:Spring框架的AOP技术(注解方式) 1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包 * 先引入Spring框架开发的基本开发包 * 再引入Spring框架的AOP的开 ...

  7. C++——static

    1.第一条也是最重要的一条:隐藏.(static函数,static变量均可) 所有未加static前缀的全局变量和函数都具有全局可见性:加static前缀的全局变量和函数只有有局部可见性: //a.c ...

  8. go 语言介绍

    特点1. 静态类型,编译开源语言 2. 脚本化的语法,支持多种编程范式(函数式,面向对象) 3. 原生,给力的并发支持并发编程 Go语言的优势: 1.脚本化的语法:开发效率高,容易上手 2.静态类型+ ...

  9. C#调用C++类库的几种方式

    1.  直接调用C++类库中的公共方法 使用DllImport特性对方法进行调用,比如一个C++类库SampleCppWrapper.dll中的公共方法: extern "C" _ ...

  10. 229B Planets

    传送门 题目大意 有编号1~n的星球,在不用的星球间共有m个传送门,任意两个星球间传送门不超过1个,每个传送门需要花费一定的时间,但是在某时刻会在某星球有旅客到达,这时要一定等到没有旅客到达的时候才能 ...