1. 程式人生 > >百度地圖介面(輸入地址獲取經緯度)

百度地圖介面(輸入地址獲取經緯度)

1,原地址 http://www.cnblogs.com/jianglan/archive/2013/05/31/3108646.html

這幾天比較空閒,就接觸了下百度地圖的API(開發者中心連結地址:http://developer.baidu.com),發現呼叫還是挺方便的。只要簡單幾步註冊下,就可以獲得一個Key,就能直接呼叫(PS:好像1.3版本前的無需註冊獲取key,就能直接呼叫api)。   想著能結合到自己的專案中去,那也挺不錯的。看了園子中的幾篇文章,感覺甚好,想自己也動手試試。 在呼叫百度地圖API的時候,經緯度的獲取必然是關鍵,那麼怎麼樣獲取到經緯度的值呢?這是一個最首要解決的問題。 通過查詢資料,看了幾個例子,得知了呼叫的方法(感謝

與時俱進的例項,給予很大的幫助)。站著巨人的肩膀上,就能比較快的實現功能。   閒話不多,下面就直接給大家介紹下,具體要怎麼呼叫百度地圖API。   首先新建一張html頁面。然後引用上API:

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>根據地址查詢經緯度</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>

</head>

<body>

</body> 

這裡我直接引用了1.3的版本,要引用1.3版本以上的話要加上key:

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.5&ak=您的金鑰"></script>

如此幾行程式碼就成功引用了百度地圖API。接下來就是要呼叫他的一些方法了:

首先在body中新增一個div,用來載入地圖用,簡單寫下樣式。

<div id="container" style="position: absolute; margin-top:30px; width: 730px;

height: 590px; top: 50; border: 1px solid gray;

overflow:hidden;">

</div> 

然後是寫javascript程式碼,來呼叫api中的方法。首先建立一個地圖,然後設定地圖顯示的中心地圖,及顯示的放大倍數:

<script type="text/javascript">
    var map = new BMap.Map("container");
    map.centerAndZoom("寧波", 12);</script>

然後,啟動地圖的方法縮小功能,以及地圖的拖拽功能:

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 })); //右下角,開啟 

“BMAP_ANCHOR_BOTTOM_RIGHT”為控制元件顯示的位置,表示控制元件位於地圖的右下角,可以按照自己的喜歡新增引數值。 主要有一下四種:BMAP_ANCHOR_TOP_LEFT 表示控制元件定位於地圖的左上角。BMAP_ANCHOR_TOP_RIGHT 表示控制元件定位於地圖的右上角。BMAP_ANCHOR_BOTTOM_LEFT 表示控制元件定位於地圖的左下角。BMAP_ANCHOR_BOTTOM_RIGHT 表示控制元件定位於地圖的右下角。

  好了,地圖的一些基本設定已經新增上了,如果要其他的功能,還可以去通過檢視百度地圖API的Demo來獲取呼叫的方法(http://developer.baidu.com/map/jsdemo.htm)。

  接下來就是要是實現我們的主要功能了。 首先,先在頁面上新增兩個文字框,和一個查詢按鈕。第一個文字框是用來輸入要查詢的地址,第二個文字框是用來顯示查詢所得的經緯度。html程式碼就全部寫完了。

<html xmlns="http://www.w3.org/1999/xhtml"> <head> 

<title>根據地址查詢經緯度</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>

</head>

<body style="background:#CBE1FF">

<div style="width:730px;margin:auto;"> 要查詢的地址:<input id="text_" type="text" value="寧波天一廣場" style="margin-right:100px;"/>

查詢結果(經緯度):<input id="result_" type="text" />

<input type="button" value="查詢" onclick="searchByStationName();"/>

<div id="container" style="position: absolute; margin-top:30px; width: 730px; height: 590px; top: 50; border: 1px solid gray; overflow:hidden;">

</div> </div>

</body>

 接下來就是要構建一個查詢:

var localSearch = new BMap.LocalSearch(map);
localSearch.enableAutoViewport(); //允許自動調節窗體大小

然後我們就可以開始做最關鍵的一步了,就是獲取地址的具體經緯度:

function searchByStationName() {   var keyword = document.getElementById("text_").value;   localSearch.setSearchCompleteCallback(function (searchResult) {     var poi = searchResult.getPoi(0);     document.getElementById("result_").value = poi.point.lng + "," + poi.point.lat; //獲取經度和緯度,將結果顯示在文字框中     map.centerAndZoom(poi.point, 13);   });   localSearch.search(keyword); } 

為了使效果更加的明顯,我們還可以新增標註點到我們要查詢的地址上。於是,將上面的程式碼可以進一步改成:

function searchByStationName()

{ map.clearOverlays();//清空原來的標註

var keyword = document.getElementById("text_").value;

localSearch.setSearchCompleteCallback(function (searchResult)

{

var poi = searchResult.getPoi(0);

document.getElementById("result_").value = poi.point.lng + "," + poi.point.lat; map.centerAndZoom(poi.point, 13);

var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat)); // 建立標註,為要查詢的地址對應的經緯度 map.addOverlay(marker); }); localSearch.search(keyword); } 

我們也可以在標註上新增詳情資訊,使點選後能看到具體資訊。於是,再一次修改程式碼:

function searchByStationName() {
    map.clearOverlays();//清空原來的標註
    var keyword = document.getElementById("text_").value;
    localSearch.setSearchCompleteCallback(function (searchResult) {
        var poi = searchResult.getPoi(0);
        document.getElementById("result_").value = poi.point.lng + "," + poi.point.lat;
        map.centerAndZoom(poi.point, 13);
        var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat));  // 建立標註,為要查詢的地址對應的經緯度
map.addOverlay(marker); var content = document.getElementById("text_").value + "<br/><br/>經度:" + poi.point.lng + "<br/>緯度:" + poi.point.lat; var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + content + "</p>"); marker.addEventListener("click", function () { this.openInfoWindow(infoWindow); }); // marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳動的動畫 }); localSearch.search(keyword); } 

<html xmlns="http://www.w3.org/1999/xhtml"> <head>

<title>根據地址查詢經緯度</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script> </head>

<body style="background:#CBE1FF"> <div style="width:730px;margin:auto;">

要查詢的地址:<input id="text_" type="text" value="寧波天一廣場" style="margin-right:100px;"/> 查詢結果(經緯度):

<input id="result_" type="text" /> <input type="button" value="查詢" onclick="searchByStationName();"/> <div id="container" style="position: absolute; margin-top:30px; width: 730px; height: 590px; top: 50; border: 1px solid gray; overflow:hidden;"> </div> </div> </body> 

html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>根據地址查詢經緯度</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script> </head> <body style="background:#CBE1FF"> <div style="width:730px;margin:auto;"> 要查詢的地址:<input id="text_" type="text" value="寧波天一廣場" style="margin-right:100px;"/> 查詢結果(經緯度):<input id="result_" type="text" /> <input type="button" value="查詢" onclick="searchByStationName();"/> <div id="container" style="position: absolute; margin-top:30px; width: 730px; height: 590px; top: 50; border: 1px solid gray; overflow:hidden;"> </div> </div> </body> <script type="text/javascript"> var map = new BMap.Map("container"); map.centerAndZoom("寧波", 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 })); //右下角,開啟 var localSearch = new BMap.LocalSearch(map); localSearch.enableAutoViewport(); //允許自動調節窗體大小 function searchByStationName() { map.clearOverlays();//清空原來的標註 var keyword = document.getElementById("text_").value; localSearch.setSearchCompleteCallback(function (searchResult) { var poi = searchResult.getPoi(0); document.getElementById("result_").value = poi.point.lng + "," + poi.point.lat; map.centerAndZoom(poi.point, 13); var marker = new BMap.Marker(new BMap.Point(poi.point.lng, poi.point.lat)); // 建立標註,為要查詢的地方對應的經緯度 map.addOverlay(marker); var content = document.getElementById("text_").value + "<br/><br/>經度:" + poi.point.lng + "<br/>緯度:" + poi.point.lat; var infoWindow = new BMap.InfoWindow("<p style='font-size:14px;'>" + content + "</p>"); marker.addEventListener("click", function () { this.openInfoWindow(infoWindow); }); // marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳動的動畫 }); localSearch.search(keyword); } </script> </html>