玩轉百度地圖API(地圖,坐標,標記,添加控制項,2D圖,混合圖,智慧搜索,地址解析器,資訊窗口)

1.註冊得到appkey

2.直接上程式碼

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body,
        html {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            font-family: "微軟雅黑";
        }
        
        p {
            margin-left: 5px;
            font-size: 14px;
        }
        
        #container {
            height: 100%;
            width: 100%;
            overflow: hidden;
        }
        
        #point {
            display: none;
        }
        
        .search {
            margin-bottom: 10px;
            height: 30px;
            margin: 0 auto;
            width: 300px;
        }
        
        .center {
            height: 650px;
            width: 1200px;
            margin: 0 auto;
        }
    </style>
    <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=xxxxxxxxxxxxxxxxxxxxxx"></script>
    <title>BaiduMap</title>
</head>

<body>
    <header class="search">
        <input type="search" name="txtSearch" id="txtSearch">
        <button id="btnSearch">搜索</button>
        <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;"></div>
    </header>
    <div class="center">
        <span id="point"></span>
        <div id="container"></div>
    </div>
    <script type="text/javascript">
        var btnSearch = document.querySelector('#btnSearch');

        function initMap(point) {

            //默認天安門
            point = point || {
                lng: 116.403955,
                lat: 39.915112
            };
            //地圖
            let map = new BMap.Map('container');

            //坐標
            let poi = new BMap.Point(point.lng, point.lat);

            //標記
            let marker = new BMap.Marker(poi);

            //帶有定位的導航控制項
            let navigationControl = new BMap.NavigationControl({
                // 靠左上角位置
                anchor: BMAP_ANCHOR_TOP_LEFT,
                // LARGE類型
                type: BMAP_NAVIGATION_CONTROL_LARGE,
                // 啟用顯示定位
                enableGeolocation: true
            });

            //定位控制項
            let geolocationControl = new BMap.GeolocationControl();

            // 比例尺控制項
            let scaleCtrl = new BMap.ScaleControl();

            //2D圖,混合圖
            let mapType = new BMap.MapTypeControl({
                mapTypes: [BMAP_NORMAL_MAP, BMAP_HYBRID_MAP],
                anchor: BMAP_ANCHOR_TOP_LEFT
            });
            //默認縮略地圖控制項
            let overView = new BMap.OverviewMapControl();

            //右下角,打開
            let overViewOpen = new BMap.OverviewMapControl({
                isOpen: true,
                anchor: BMAP_ANCHOR_BOTTOM_RIGHT
            });

            //右鍵菜單
            let menu = new BMap.ContextMenu();

            //建立一個自動完成的對象
            let ac = new BMap.Autocomplete({
                "input": "txtSearch",
                "location": map
            });

            //地址解析器
            let geoc = new BMap.Geocoder();

            //資訊窗口
            let infoWindow = new BMap.InfoWindow();

            //let local = new BMap.LocalSearch(map);

            // 比例尺控制項 BMapGL才支援
            // let zoomCtrl = new BMap.ZoomControl(); 

            // 3D控制項 BMapGL才支援
            // var navi3DCtrl = new BMap.NavigationControl3D();

            // 初始化地圖,設置中心點坐標和地圖級別
            map.centerAndZoom(poi, 16);

            //開啟滑鼠滾輪縮放
            map.enableScrollWheelZoom(true);

            //添加標記
            map.addOverlay(marker);

            //添加帶有定位的導航控制項
            map.addControl(navigationControl);

            //添加定位控制項
            map.addControl(geolocationControl);

            //添加比例尺控制項
            map.addControl(scaleCtrl);

            //添加2D圖,混合圖
            map.addControl(mapType);

            //添加默認縮略地圖控制項
            map.addControl(overView);

            //添加右下角,打開
            map.addControl(overViewOpen);

            let txtMenuItem = [{
                text: '放大一級',
                callback: function() {
                    map.zoomIn();
                }
            }, {
                text: '縮小一級',
                callback: function() {
                    map.zoomOut();
                }
            }];

            for (const item of txtMenuItem) {
                menu.addItem(new BMap.MenuItem(item.text, item.callback, 100));
            }

            //添加右鍵菜單
            map.addContextMenu(menu);

            //添加比例尺控制項 BMapGL才支援
            // map.addControl(zoomCtrl);

            //添加3D控制項 BMapGL才支援
            // map.addControl(navi3DCtrl);

            //定位成功事件
            geolocationControl.addEventListener("locationSuccess", (e) => {
                setCenterAndMarker(map, marker, e.point);
            });

            //地圖點擊事件
            map.addEventListener('click', (e) => {
                setCenterAndMarker(map, marker, e.point);
            });

            //滑鼠放在下拉列表上的事件
            ac.addEventListener("onhighlight", (e) => {

                const str = getHighLightContent(e);

                document.getElementById("searchResultPanel").innerHTML = str;
            });

            //搜索事件
            btnSearch.addEventListener('click', (e) => {

                var txtSearch = document.getElementById('txtSearch').value;

                function onSearchComplete() {

                    let pp = local.getResults().getPoi(0).point; //獲取第一個智慧搜索的結果

                    setCenterAndMarker(map, marker, pp);
                }

                //智慧搜索
                let local = new BMap.LocalSearch(map, {
                    onSearchComplete: onSearchComplete
                });

                try {
                    local.search(txtSearch);
                } catch (error) {

                }
            });

            //標註點擊事件
            marker.addEventListener('click', (e) => {

                geoc.getLocation(e.point, function(res) {

                    var addComp = res.addressComponents;

                    const sContent = `<h4 style='margin:0 0 5px 0;'>${res.address}</h4>
                                    <p>城市:${addComp.city}</p>
                                    <p>市區:${addComp.district}</p>
                                    <p>街道:${addComp.street}</p>
                                    <p>街道號:${addComp.streetNumber}</p>
                                    <p>坐標:${Object.values(res.point).toString()}</p>`;

                    infoWindow.setContent(sContent);

                    marker.openInfoWindow(infoWindow);

                    infoWindow.redraw();
                });

            });
        }

        //獲取文本內容
        function getHighLightContent(e) {

            let str = "";

            let _value = e.fromitem.value;

            let value = "";

            if (e.fromitem.index > -1) {
                value = _value.province + _value.city + _value.district + _value.street + _value.business;
            }

            str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

            value = "";

            if (e.toitem.index > -1) {

                _value = e.toitem.value;
                value = _value.province + _value.city + _value.district + _value.street + _value.business;
            }

            str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;

            return str;
        }

        //設置中心和標註
        function setCenterAndMarker(map, marker, pp) {

            map.setCenter(pp); //設置中心坐標

            map.clearOverlays(); //移除原有的標註

            marker.setPosition(pp); //設置坐標

            map.addOverlay(marker); //添加標註
        }

        initMap();
    </script>
</body>

</html>

 

Tags: