php 百度地图api获取经纬度,调用百度地图API接口获取地铁站的经纬度信息

c6e333a8812c8dec11373bae5bd03fde.png今天我们来看一下,如何通过百地图API来获取地点的经纬度。首先百度地图提供了强大的API接口,我们可以通过调用它来实现目的。这是网址:https://lbsyun.baidu.com/。首先想要调用API接口,先要注册账号,注册成功后,会有一个开发者认证,输入邮箱,手机号就可以了。认证通过之后呢,我们就可以创建应用来获取AK了。AK就是调用API接口的凭证。打开控制台,点击创建应用,在应用类型那选择浏览器端,因为我们要通过浏览器来获取嘛,界面应该就是下面的样子。

填完之后呢,在我的应用里会出现你刚刚设置的,复制一下AK,一会儿用的到。好了,准备工作基本上就完成了,下面我们就可以去调用API了。我们先来获取北京地铁1号线的所有站点,通过一个简单的爬虫程序就可以搞定。from bs4 import BeautifulSoupfrom urllib.request import urlopencity_subway = {}url = "https://baike.baidu.com/item/%E5%8C%97%E4%BA%AC%E5%9C%B0%E9%93%811%E5%8F%B7%E7%BA%BF"def subway_station_1(subway,url):bsObj_1 = BeautifulSoup(urlopen(url).read())for i in bsObj_1.find_all("table"):if i.find().text == subway + "首末车时刻表":station_list = []for tr in i.find_all("tr"):for td in tr.find_all("td"):if (td.get("colspan") == "1" and td.get("rowspan") == "1"):station = td.get_text()station_list.append(station)city_subway[subway] = station_listreturn city_subway这样我们就得到了一个city_subway 的字典,里面包含着地铁一号线的各种信息。{"北京地铁1号线": ["苹果园","古城","八角游乐园","八宝山","玉泉路","五棵松","万寿路","公主坟","军事博物馆","木樨地","南礼士路","复兴门","西单","天安门西","天安门东","王府井","东单","建国门","永安里","国贸","大望路","四惠","四惠东"]}接下来,我们就来获取每个站点的经纬度。百度地图已经给出了参考文档,我们根据这个文档来做就行。网址是https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding。它给出了一个url,这个url就可以返回我们想要的经纬度信息。如下所示:

4c121729a7b3d6987b25e3c52f629c3a.png我们只需要获取上面这个页面就可以了,address=后面加上我们想要查询的地址,ak=后面加上刚刚申请好的AK。import requestsimport restation_long_lat = {}pathen = re.compile(r""lng":(\d+.\d+),"lat":(\d+.\d+)")for station in city_subway.values():for line in station:api_url = "http://api.map.baidu.com/geocoding/v3/address=" + line_name + line + "&output=json&city=北京市&ak=换成你的&callback=showLocation"r = requests.get(api_url).textlng,lat = pathen.findall(r)[0]station_long_lat[line] = (float(lng),float(lat))然后我们就可以得到站点的经纬度了。{"苹果园": (116.18963446946083, 39.934641008155275),"古城": (116.5201500019005, 39.91496364870823),"八角游乐园": (116.21884171520198, 39.91306522416191),"八宝山": (116.2250072350697, 39.91305851389836),"玉泉路": (116.5201500019005, 39.91496364870823),"五棵松": (116.27795244196295, 39.916132266625176),"万寿路": (116.28651600994891, 39.91380009777728),"公主坟": (116.5201500019005, 39.91496364870823),"军事博物馆": (116.33078176654712, 39.91560053332307),"木樨地": (116.5201500019005, 39.91496364870823),"南礼士路": (116.5201500019005, 39.91496364870823),"复兴门": (116.5201500019005, 39.91496364870823),"西单": (116.5201500019005, 39.91496364870823),"天安门西": (116.5201500019005, 39.91496364870823),"天安门东": (116.5201500019005, 39.91496364870823),"王府井": (116.5201500019005, 39.91496364870823),"东单": (116.5201500019005, 39.91496364870823),"建国门": (116.44226799215203, 39.91453005191511),"永安里": (116.45905573752259, 39.910516038804346),"国贸": (116.46783149874459, 39.91879959387437),"大望路": (116.46116905872637, 39.914107935722996),"四惠": (116.51463108233885, 39.91166587774982),"四惠东": (116.52252188776905, 39.91423992513861)}是不是很简单,很方便。下面我来说一下我刚开始用的时候遇到的问题,给大家个参考。

1.如果你直接用在notebook中用requests.get(api_url),会返回,看到这个不要觉得是哪里有问题了,这是正常的。我们可以获取它的文本就好。

2.为什么我在address=后面加了一个line_name + line ,这个line_name就是北京地铁1号线。因为之前我直接加站名的话,有时候会出现定位不准的情况,所以加上路线名会更准确。

这就是全部的内容了,如果有什么错误的话,欢迎给我留言,互相学习!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值