百度地圖根據輸入地址獲取坐標
首先新建一個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>
如果引用的api版本1.3以上就要加上key:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&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("address").value; localSearch.setSearchCompleteCallback(function (searchResult) { var poi = searchResult.getPoi(0); document.getElementById("coordinate").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("address").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:#f9f9f9; margin:0 auto"> <div style="width:730px;margin:30px auto;"> 要查詢的地址:<input id="address" type="text" value="北京天安門" style="margin-right:50px;"/> 查詢結果(經緯度):<input id="coordinate" 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("address").value; localSearch.setSearchCompleteCallback(function (searchResult) { var poi = searchResult.getPoi(0); document.getElementById("coordinate").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>
百度地圖根據輸入地址獲取坐標