python 接入百度地图数据解析失败

阅读: 评论:0

python 接入百度地图数据解析失败

python 接入百度地图数据解析失败

地理位置信息的解析与逆解析可能是我们在分析地理位置数据时所面临的最棘手的问题了,好在现在很多主流的在线 地图厂商地给开发者提供了免费的API接口调用。

这一篇以百度地图API为例,演示如何在R语言以及Python中通过调用API实现地理位置的解析与逆解析,即将地址转换为具体经纬度,将经纬度转换为具体的地址。

免费API调用需要开发者自己在百度地图开放平台上注册APPkey,每日限调6000次,因为是免费的,所有人都可以申请注册,注册地址如下。以下是本次分享的所有代码:

R语言版:

library("httr")

library("magrittr")

library("jsonlite")

dizhi = c('北京市朝阳区望京东路6号望京国际研发园三期','北京市海淀区上地信息路9号奎科科技大厦')

将地址解析为具体的经纬度:

GetJD

url = "/"

header

payload = list(

'output' = 'json',

'ak' = '***********'

)

addinfo

for (i in dizhi){

payload[["address"]]=i

tryCatch({

web

content % content(as="text",encoding="UTF-8") %>% fromJSON(flatten = TRUE) %>% `[[`(2) %>% `[[`(1)

addinfo

},error = function(e){

cat(sprintf("任务【%s】处理失败!",i),sep = "n")

addinfo

})

Sys.sleep(runif(1))

print(sprintf("正在抓取第【%s】个地址",i))

}

print("所有数据全部抓取完毕!!!")

return(addinfo)

}

运行程序:

system.time(myresult

lng lat

116.4955 40.01256

116.3130 40.04769

地址逆解析——将经纬度还原为具体地址

待解析的经纬度指标

lddata = data.frame(

lon = c(39.934,40.013,40.047),

lat = c(116.329,116.495,116.313)

)

解析函数

GetAddress

url = "/"

header = c('User-Agent'= 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36')

payload = list(

'output' = 'json',

'ak' = '*******'

)

addinfo = c()

for (i in 1:nrow(lddata)){

payload[['location']] = sprintf('%.3f,%.3f',lddata[i,'lon'],lddata[i,'lat'])

tryCatch({

web

addinfo % content(as="text",encoding="UTF-8") %>% fromJSON(flatten = TRUE) %>%`[[`(2) %>%`[[`(2) %>% c(addinfo,.)

},error = function(e){

cat(sprintf(“第【%d】个任务处理失败!”,i),sep = “n”)

addinfo

})

}

return(addinfo)

}

运行逆解析程序

system.time( MyAddress

'北京市海淀区增光路35-6号' '北京市朝阳区望京东路辅路' '北京市海淀区上地五街9号'

Python版:

import time

import requests

quest import quote

#待解析的地址

dizhi = ['北京市朝阳区望京东路6号望京国际研发园三期','北京市海淀区上地信息路9号奎科科技大厦']

地址解析函数——将地址转换为经纬度

def getid(dizhi):

url = "/"

header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'}

payload = {

'output':'json',

'ak':'**********'

}

addinfo = []

for i in dizhi:

payload['address'] = i

try:

content = (url,params=payload,headers=header).json()

addinfo.append(content['result']['location'])

except:

pass

return(addinfo)

运行解析程序

if __name__ == "__main__":

#计时开始:

t0 = time.time()

myaddress = getid(dizhi)

t1 = time.time()

total = t1 - t0

print("消耗时间:{}".format(total))

[{'lat': 40.012564990769135, 'lng': 116.49546484496102},

{'lat': 40.04768803728198, 'lng': 116.31300123279135}]

地址逆解析——经纬度解析为具体地址

lon = [39.934,40.013,40.047]

lat = [116.329,116.495,116.313]

lddata = [(j,w) for j,w in zip(lon,lat)]

解析函数

def GetAddress(lddata):

url = "/"

header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'}

payload = {

'output':'json',

'ak':'*********'

}

addinfo = []

for lon,lat in lddata:

payload['location'] = '{0:s},{1:s}'.format(str(lon),str(lat))

try:

content = (url,params=payload,headers=header).json()

addinfo.append(content['result']['formatted_address'])

except:

addinfo.append(None)

return(addinfo)

运行程序

if __name__ == "__main__":

#计时开始:

t0 = time.time()

mylonlat = GetAddress(lddata)

t1 = time.time()

total = t1 - t0

print("消耗时间:{}".format(total))

['北京市海淀区增光路35-6号', '北京市朝阳区望京东路辅路', '北京市海淀区上地五街9号']

在线课程请点击文末原文链接:

往期案例数据请移步本人GitHub:

本文发布于:2024-01-31 06:25:48,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170665354926206.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:地图   数据   python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23