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根据地名获取相应经纬度
今天有个需求,要根据地名获取经纬度坐标值. 于是我第一想法:打开百度地图,手动输入地名,获取.显然当地名较少时,可实施.然而,当地名较多时,此方法显然工作量很大. 于是,第二想法:代码获取,请求百度地 ...
随机推荐
- 如何设置select下拉禁止选择
转自:https://blog.csdn.net/you23hai45/article/details/52233207
- [Python Study Notes]计算器
# ------------------------------------------------------------------------------------- # @文件: 计算器.p ...
- checked多选,取消,反选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- phonegap创建项目
cordova create LynApp com.LynApp "LynApp"cd LynAppcordova platform add androidcordova buil ...
- Flow Layout
--------------siwuxie095 将根面板 contentPane 的布局切换为 Flow Layout Flow La ...
- GUI编程01
1 tkinter TkInter是标准的Python GUI库.的Python与Tkinter的结合提供了一个快速和容易的方法来创建GUI应用程序. Tkinter的提供了一个强大的面向对象的接口T ...
- ZROI2018提高day1t3
传送门 分析 考场上想到了先枚举p的长度,在枚举这个长度的所有子串,期望得分40~50pts,但是最终只得了20pts,这是因为我写的代码在验证中总是不断删除s'中的第一个p,而这种方式不能解决形如a ...
- drools规则引擎笔记(二)
规则引擎版本,drools6.5.0 final eclipse:Neon JDK1.8 今天主要是在规则的when部分加入了多个fact对象. 对于working memory存在多个fact的情形 ...
- vs code进行c/c++开发
vs code是微软公司开发的跨平台编辑器,丰富的插件功能可以满足各种编程语言的编码,编译和调试.由于vs code本身只是一个编辑器,所以你需要准备编译工具链.本文针对的是windows系统,我这里 ...
- 最全PyCharm教程--for python
PyCharm简介: PyCharm是由JetBrains打造的一款Python IDE,VS2010的重构插件Resharper就是出自JetBrains之手. 同时支持Google App E ...