百度地图简单调用js及天气获取

这是一个简单的小例子,获取天气过程可能有点繁琐,本次通过获取所在的城市,根据城市获取城市编码,再根据编码获取当前城市的天气情况。当然网上有很多关于天气获取的,如知心天气中国气象局和风天气freeAPI等,所以,没必要那么复杂。感兴趣可以上网百度天气api或参考下列推荐几个天气接口链接,希望有所帮助。
免费天气预报api接口
和风天气预报和实况
实况天气
彩云天气API
百度地图Api简单实例:http://lbs.baidu.com/index.php?title=jspopularGL/guide/helloworld

关于Ak具体步骤生成可以参考此篇:https://www.cnblogs.com/shewuxuan/p/12642998.html

高德经纬坐标拾取工具
https://lbs.amap.com/console/show/picker

1.注册一个百度账号后,并创建属于自己的应用,生成Ak, 点我申请
在这里插入图片描述

2.创建index.html,引用百度地图API文件,注意此处的ak是之前注册申请过的

<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=您的密钥">

3.创建地图实例,并设置经纬度,百度实例介绍比较详细。

	var map = new BMapGL.Map("container");
	// 创建点坐标 
	var point = new BMapGL.Point(longiDis, lagiDis);

4.根据获取到当前经纬度及城市名,根据地名,调用高德api获取对应的地址编码,根据地址编码进行天气查询。
高德行政区域查询api
高德天气查询api
中国城市代码表

        function cityToCode(cityName) {
            let url = "https://restapi.amap.com/v3/config/district?keywords=" + cityName + "&subdistrict=0&key=5d2d3e6c0d5188bec134fc4fc1b139e0";
            this.loadXMLDoc(url)
        }

5.获取到的天气状况:
在这里插入图片描述

具体源码如下:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Hello, World</title>
    <style type="text/css">
        html {
            height: 100%
        }
        body {
            height: 100%;
            margin: 0px;
            padding: 0px
        }
        #container {
            width: 70%;
            height: 100%;
            margin: 0 auto;
        }
        .aside {
            position: fixed;
            right: 29px;
            z-index: 10000000;
            top: 0;
        }
    </style>
    <script type="text/javascript"
        src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=bcQ3L1zGiLHszt5MiEWGDLCUM1C6qdrK"></script>
</head>
<body>
    <div id="container"></div>
    <div class="aside">
        <div class="row"><label for="">城市:</label><span id="city"></span></div>
        <div class="row"><label for="">编码:</label><span id="code"></span></div>
        <div class="row"><label for="">经度:</label><span id="longitide"></span></div>
        <div class="row"><label for="">纬度:</label><span id="lagitide"></span></div>
        <div class="row"><label for="">天气:</label><span id="weather"></span></div>
        <div class="row"><label for="">风力等级:</label><span id="windpower"></span></div>
        <div class="row"><label for="">温度:</label><span id="humidity"></span></div>
        <div class="row"><label for="">省份:</label><span id="province"></span></div>
    </div>
    <script type="text/javascript">
       
        /**
         * 通过百度api获取当前城市及经纬度.
         * 百度文档:
         * https://lbsyun.baidu.com/index.php?title=webapi/weather(天气--服务文档,根据经纬度查询收费)
         * http://lbs.baidu.com/index.php?title=jspopularGL/guide/widget(地图)
         * */
        function initMap(result) {
            var longiDis, lagiDis, cityNames;
            //获取当前城市经度
            longiDis = result.center.lng;
            //获取当前城市纬度
            lagiDis = result.center.lat;
            //获取当前城市名
            cityNames = result.name;
            console.log("IP 定位城市:" + cityNames + "   经度" + result.center.lng + "   纬度" + result.center.lat);
            // 创建地图实例
            var map = new BMapGL.Map("container");
            // 创建点坐标
            var point = new BMapGL.Point(longiDis, lagiDis);
            // 初始化地图,设置中心点坐标和地图级别
            map.centerAndZoom(point, 15);
            //开启鼠标滚轮缩放,地图的鼠标滚轮缩放默认是关闭的,需要配置开启。
            map.enableScrollWheelZoom(true);
            //设置地图旋转角度
            map.setHeading(64.5);
            //设置地图的倾斜角度
            map.setTilt(73);
            //设置地图模式为:地球模式
            // map.setMapType(BMAP_EARTH_MAP)
            this.cityToCode(cityNames)
            document.getElementById('city').innerHTML = cityNames;
            document.getElementById('longitide').innerHTML = longiDis;
            document.getElementById('lagitide').innerHTML = lagiDis;
        }

		//获取当前城市
        var curCity = new BMapGL.LocalCity();
        curCity.get(initMap)

        /**调用高德地图的api
         * 通过获取到的地名,获取对应的地址编码,根据地址编码进行天气查询
         * **/
        function cityToCode(cityName) {
            let url = "https://restapi.amap.com/v3/config/district?keywords=" + cityName + "&subdistrict=0&key=5d2d3e6c0d5188bec134fc4fc1b139e0";
            this.loadXMLDoc(url)
        }
        function loadXMLDoc(url) {
            var xmlhttp;
            if (window.XMLHttpRequest) {
                // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                xmlhttp = new XMLHttpRequest();
            }
            else {
                // IE6, IE5 浏览器执行代码
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = () => {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    console.log(JSON.parse(xmlhttp.responseText).districts[0].adcode);
                    //获取所在城市的对应城市编码
                    let cityCode = JSON.parse(xmlhttp.responseText).districts[0].adcode;
                    this.getWeather(cityCode)
                    document.getElementById('code').innerHTML = cityCode;
                }
            }
            xmlhttp.open("GET", url, true);
            xmlhttp.send();
        }


        /**
         * 根据城市编码号查询该城市目前天气状况
         * @key:高德官网申请密钥
         * @city:城市编码 如110101:北京
         * @extensions: base:返回实时天气  all:返回预报天气
         * @output:返回的格式  JSON/XML
         * */
        function getWeather(cityCode) {
            let urlw = "https://restapi.amap.com/v3/weather/weatherInfo?key=5d2d3e6c0d5188bec134fc4fc1b139e0&city=" + cityCode + "&extensions=base";
            var xmlhttp;
            if (window.XMLHttpRequest) {
                // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                xmlhttp = new XMLHttpRequest();
            }
            else {
                // IE6, IE5 浏览器执行代码
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = () => {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    console.log('获得' + cityCode + '城市', xmlhttp.responseText, JSON.parse(xmlhttp.responseText));
                    let weatherInfo = JSON.parse(xmlhttp.responseText).lives[0];
                    document.getElementById('weather').innerHTML = weatherInfo.weather;
                    document.getElementById('windpower').innerHTML = weatherInfo.windpower;
                    document.getElementById('humidity').innerHTML = weatherInfo.humidity;
                    document.getElementById('province').innerHTML = weatherInfo.province;
                }
            }
            xmlhttp.open("GET", urlw, true);
            xmlhttp.send();
        }

    </script>
</body>

</html>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ee_11eeeeee/article/details/108346329