Python利用百度地图api批量获取地址经纬度
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批量获取地址经纬度的更多相关文章
- 利用百度地图API,获取经纬度坐标
利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代 ...
- 使用百度地图API自动获取地址和经纬度
先上效果图,这是直接点击获取经纬度和地址的.没有做搜索的功能. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- 利用百度地图开源sdk获取地址信息。
注册百度开发者帐号,下载相关sdk 添加权限: 添加百度注册访问应用(AK)码 添加源代码文件到libs文件: 代码如下: package com.lixu.baidu_gps; import com ...
- 利用百度翻译API,获取翻译结果
利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...
- 百度地图API 批量添加 带检索功能的信息窗口
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 利用百度地图API和群蚁算法,对TSP问题进行模拟与求解
前言 最近由于换了工作,期间也有反思和总结上家公司的得失,总觉得有什么事情当初可以完成或者完成得更好,其中TSP问题就是其中之一.当初在开发一个仓配系统的时候,有一个线路排程的需求,当时自己简单在纸上 ...
- 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)
<?php //获取用户ip(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获取127.0.0.1) function getip(){ if(!empty($_SERVE ...
- Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)
1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:http://lbsyun.baidu.com/apiconsole/key?applicatio ...
- Python使用百度地图API根据地名获取相应经纬度
今天有个需求,要根据地名获取经纬度坐标值. 于是我第一想法:打开百度地图,手动输入地名,获取.显然当地名较少时,可实施.然而,当地名较多时,此方法显然工作量很大. 于是,第二想法:代码获取,请求百度地 ...
随机推荐
- 如何使32位Linux支持4G以上内存
问题 Linux无法支持超过4G的内存,笔者使用的Linux是CentOS 5,机器是DELL PE1950服务器. 原因: X86系统默认寻址能力的限制 解决办法: 安装具有PAE(物理 ...
- S2SH整合所需jar包及其详解
转自:https://blog.csdn.net/vvvac1314/article/details/44002205 struts2所必须的jar包五个:struts2-core-2.1.6.jar ...
- Zbar和Z*算法对比
博客转载自:https://blog.csdn.net/qishandaxue/article/details/45481387 移植zbar和zxing源码到linux平台,zbar移植的是C源码, ...
- p2197 nim游戏
传送门 分析 我们知道最后取完的情况就是所有的a[i]异或和为0 所以只要开始的异或和不为0则先手一定可以将它转化为0 否则不行 所以如果异或和非0则先手胜 代码 #include<bits/s ...
- redhat图形界面启动后出现桌面但是没有登录界面解决办法
redhat图形界面启动后出现桌面但是没有登录界面解决办法 2014年07月11日 10:50:10 阅读数:7931 redhat Linux一直用着好好地,今天打开只有图像界面背景,没有出现登陆界 ...
- 关于IE6下绝对定位元素莫名消失的问题
一般来说,让绝对定位的元素不挨着浮动元素就OK了: 1.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,以及没有清除浮动时,IE6/7,FF中显示一致: 2.当绝对定位层的邻近浮动层的宽度不等于父层宽 ...
- Java基础-集合框架的学习大纲
1.List 和 Set 的区别 2.HashSet 是如何保证不重复的 3.HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)? 4.HashMap 的扩容过程 ...
- [译]Javascript timing事件
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- const char *p; char const *p; char * const p的区别
请看下面三种定义: const char *p; char const *p; char * const p; 首先看第一种,我们先看p,本着”从里往外”的原则,p是一个char *类型的变量,但ch ...
- 类的继承与super()的意义以即如何写一个正确的异常类
这些东西都是我看了许多名师课程和自己研究的成果,严禁转载,这里指出了如何正确的自己定义一个异常类并看一看sun写的java的源代码话题一:子类的构造器执行是否一定会伴随着父类的构造执行? 1.this ...