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根据地名获取相应经纬度
今天有个需求,要根据地名获取经纬度坐标值. 于是我第一想法:打开百度地图,手动输入地名,获取.显然当地名较少时,可实施.然而,当地名较多时,此方法显然工作量很大. 于是,第二想法:代码获取,请求百度地 ...
随机推荐
- 2016.3.7 Word2007编号设置
1.点击下图红圈出的下拉箭头 2.点击下图新建样式按钮 3.在弹出窗口中,设置名称AAA(方便稍后的查找修改),样式类型改为列表,点击编号 4.在弹出的窗口中以此设置各级标题的编号样式,保存后设置成功 ...
- 五颜六色的记事本 Notepad2.cn
这是一款五颜六色的记事本,支持同时五种颜色的标签录入,可随意切换. 考虑到使用者的用眼舒适度,特意采用颜色对比明显并且色调柔和的配色方案,选择通用的微软雅黑字体作为编辑字体,字体工整便于识别. 针对使 ...
- 部署和调优 2.8 mysql主从配置-2
配置主从准备工作 在主上创建一个测试的数据库 首先登录主的mysql,或者用绝对路径 /usr/local/mysql/bin/mysql mysql > create database db1 ...
- JVM实用参数(二)参数分类和即时(JIT)编译器诊断
JVM实用参数(二)参数分类和即时(JIT)编译器诊断 作者: PATRICK PESCHLOW 原文地址 译者:赵峰 校对:许巧辉 在这个系列的第二部分,我来介绍一下HotSpot J ...
- Node.js的__dirname,__filename,process.cwd(),./的含义
简单说一下这几个路径的意思,: __dirname: 获得当前执行文件所在目录的完整目录名 __filename: 获得当前执行文件的带有完整绝对路径的文件名 process.cwd():获得当前执行 ...
- 下拉刷新和上拉加载更多(第三方框架MJRefresh)
#import "RootViewController.h" #import "MJRefresh.h" @interface RootViewControll ...
- Windows libQGLViewer2.7.0,libQGLViewer2.6.2与g2o20160427, g2o20170730编译生成G2O
1. Win10, VS2013, libQGLViewer2.6.2 和 QT5.6.3编译时候会出错,初步判断libQGLViewer2.6.2不支持QT5 错误 error LNK1120: 个 ...
- php学习笔记-默认参数
在定义函数的时候,我们可以把其中的一个参数变的特殊起来,使它有一个默认值,这个参数就叫默认参数.在调用这个函数的时候,你既可以给这个默认参数传递一个值,这样的话默认参数的值会被覆盖掉,也可以不给它传递 ...
- AdapterPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...
- 关于 block的一些浅识
block的定义:“带自动变量的匿名函数” (一)写法: ^ void (int iAge){ NSLog(@"%d", iAge);}; 和C函数写法区别在于: 1) :以插入符 ...