1. 程式人生 > >搜尋某個地方通過百度地圖獲取到座標

搜尋某個地方通過百度地圖獲取到座標

本文轉載,原文地址:https://blog.csdn.net/shi_yi_fei/article/details/77373492 

根據一個地名來查詢地圖上的位置,並找出最相近的一個地址的座標,通過一個JSAPI來實現,並標註所有相關的地址的座標;

同時,如果未查到改地址,則在頁面上手工輸入一個新地址來進行查詢。

主要使用了 JSAPI的 LocalSearch 以及其回撥方法,用的百度地圖JSAPI版本為2.0!

<!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;font-family:"微軟雅黑";}
        #l-map{height:800px;width:100%;float:left;}
        #r-result{width:20%;}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=yoursecret"></script>
    <title>拾取地址的座標</title>
</head>
<body>
    <div id="l-map"></div>
    <div id="r-result">  請輸入地址:
    <br/>
      <input type="text" id="txtKeyword" />
    <br/>
      <button onclick="searchAddr()">搜尋</button>
    </div>
</body>
</html>
<script type="text/javascript">
    // 百度地圖API功能
    map = new BMap.Map("l-map");            // 建立Map例項
    map.centerAndZoom("{$address}", 12);
    map.enableScrollWheelZoom();    //啟用滾輪放大縮小,預設禁用
    map.enableContinuousZoom();    //啟用地圖慣性拖拽,預設禁用
    map.addControl(new BMap.NavigationControl());  //新增預設縮放平移控制元件
    map.addControl(new BMap.OverviewMapControl()); //新增預設縮略地圖控制元件
    map.addControl(new BMap.OverviewMapControl({ isOpen: true, anchor: BMAP_ANCHOR_BOTTOM_RIGHT }));   //右下角,開啟
 
    local = new BMap.LocalSearch(map, {
        renderOptions: {map:map,autoViewport:true,selectFirstResult:false},
        pageCapacity:10
    });
 
    myIcon = new BMap.Icon("http://api.map.baidu.com/img/markers.png", new BMap.Size(23, 25), {
                    offset: new BMap.Size(10, 25),
                    imageOffset: new BMap.Size(0, 0 - 10 * 25)
                });
 
    
    var keys = new Array("{$address}");
 
    local.setSearchCompleteCallback(function (searchResults) {
            console.log(searchResults);
            if (typeof(searchResults) == "undefined" ) {
                alert("百度API沒有搜尋到該地址");
                return;
            }
            if(searchResults.length>0) {
                var searchResult = searchResults[0];
            }else {
                var searchResult = searchResults;
            }
            
            console.log(searchResult);
            
            var contents = [];
            for(var i=0; i<searchResult.getCurrentNumPois(); i++) 
            {
                //獲得需要得到的座標
                var poi = searchResult.getPoi(i);
                if (!poi) {
                    alert("百度API沒有搜尋到該地址");
                }
                // console.log(poi);
        
                //設定中心點
                map.centerAndZoom(poi.point, 13);
                // 建立標註,為要查詢的地方對應的經緯度
                var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat),{ icon: myIcon });
                //alert("["+poi.point.lng+","+poi.point.lat+"]");
                //在地圖上新增標識
                map.addOverlay(marker);
                //點選標識後顯示的內容
                contents[i] = "你要查詢的地方:【"+poi.title+"】<br/>地址:"+poi.address+"<br/>經度:"+poi.point.lng+"<br/>緯度:"+poi.point.lat;
                
                marker.setTitle(contents[i]);
                //新增點選事件監聽
                marker.addEventListener("click", makerClick);    
                if (i==0) {
                    var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + contents[0] + "</p>");
                    marker.openInfoWindow(infoWindow); 
                }
                    
            }
            
        });
    local.search(keys);
    
    var makerClick = function() {
        var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + this.getTitle() + "</p>");
        this.openInfoWindow(infoWindow);
    }
 
    function searchAddr() {
        var keys = document.getElementById("txtKeyword").value;
        local.search(keys);
    }
</script>

效果