大家好,欢迎来到IT知识分享网。
高德 web api 通过 adcode 获取地区实时天气信息,每天有30万次查询的免费额度
一、基础知识
1. adcode 是什么,
是每个行政地区的编号,比如莒县的编号就是 ,在这个地区出生的人的身份证前缀都是地区编号,我的身份证就是以这个开头的。
2. 需要申请官方的 web service api 服务的 key
注意申请的类型,是 web service api,这是地图信息的服务接口,每次请求都需要这个 key 才能请求。
高德应用控制台: https://console.amap.com/dev/key/app
二、天气请求接口
接口很简单明了,只需要两个参数:
- 服务 key
- adcode
官方说明: https://lbs.amap.com/api/webservice/guide/api/weatherinfo
这样就可以了,你拿到数据了,做你需要的业务就好了。
三、通过路径规划的数据获取天气
首先你需要知道路径规划的方法,可以看我的教程:
如何使用高德地图 API 做一个路线规划应用,展示自定义路线
假设上面已经搞定了,我们来看一下返回的数据是什么样的。
1. 获取路径数据
这个路径规划的数据并不是通过普通的 api 返回的,而是在高德的插件里,所以你从浏览器的调试窗口中是看不到这个数据的。
map.plugin('AMap.DragRoute', () => {
// path 是驾车导航的起、途径和终点,最多支持16个途经点 this.currentDragRouting = new AMap.DragRoute(map, path, line.policy, {
// 此处省略}) // 路线规划完成时 this.currentDragRouting.on('complete', res => {
console.log(res) // 路径规划的所有数据都在这个 res 里 })
这个 res 的内容里,有个 steps,而这个 step 每个都标记了这个点的地址位置,里面有我们需要的 adcode
2. 过滤去重路径中的地区数据
比如上面这个数据中有 216 个路径点,但这里面每个点的地址位置其实是有很多重复的,我们需要将其过滤一下,每个地区只留一个。
let steps = res.data.routes[0].steps let districtsMap = new Map() steps.forEach(item => {
item.cities.forEach(city => {
city.districts.forEach(district => {
if (districtsMap.has(district.adcode)){
// 如果已经有这个地区了就不用做什么 } else {
// 如果没有就添加它到集合中,其实不需要这么多数据,只需要 adcode 也行 districtsMap.set(district.adcode, {
name: [city.name, district.name], adcode: district.adcode}) } }) }) })
3. 获取每个地区的天气数据并集中展示
定义一个请求天气信息返回 proimse 的方法
getWeather(adcode){
return axios({
url: 'https://restapi.amap.com/v3/weather/weatherInfo', params: {
key: mapConfig.key_service, city: adcode } }) },
使用第2步获取到的地区数组数据,将其转换成 axios 请求的数组。集中请求这些点的天气数据。
// 将地区数组转化成 axios 请求的数组。 let weatherRequestArray = [] districtsMap.forEach((value,key) => {
weatherRequestArray.push(this.getWeather(key)) }) // 集中获取天气数据 axios .all(weatherRequestArray) .then(response => {
// 格式化数据到 markdown 文本 let weatherString = '\n\n 天气信息\n\n' response.forEach((res, index) => {
let weatherData = res.data.lives[0] weatherString = weatherString.concat(`${
index + 1}. ${
weatherData.province}-${
weatherData.city}: ${
weatherData.temperature}℃ | ${
weatherData.humidity}%RH, ${
weatherData.weather},\n`) }) this.activeLineObj.note = this.activeLineObj.note.concat(weatherString) })
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109526.html


