最近在作的有關於北京海淀智慧旅遊的一個項目,既然是旅遊項目,那麼涉及到地圖的操做也就是必然的事情了。前幾篇文章,主要是分享了在地圖上標記多個景點及其景點信息的技術。其實跟項目中仍是有一些不同的。項目中要求實時顯示景點的信息,根據實時數據,更新Marker的顏色(綠、橙、紅),以及實時更新景點Brand上的景點信息(遊客流量、溫馨度)。這些都沒有出如今文章中,文章只是從技術的角度來驗證的。javascript
今天主要要作的是地圖上的一個基本功能——交互搜索。css
其實官網上搜索的例子並非不少,並且真的不怎麼滴。不過做爲參考,仍是能夠的。點擊這裏查看「範圍查詢-指定分類id,關鍵字」代碼示例。若是沒有你想要的功能,那你就去官方API文檔中找吧,點擊這裏看搜索類API。html
先貼出個人搜索也代碼,很簡單,一個輸入框,一個搜索按鈕:java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>搜狗地圖交互搜索</title> <style type="text/css"> #map{position:absolute;width:1064px; height:550px;} #result{position:absolute;top:30px;left:1064px;width:300px;} </style> <script type="text/javascript" src="http://api.go2map.com/maps/js/api_v2.5.1.js"></script> <script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.1-rc2/jquery.min.js"></script></script> </head> <body onload="initialize()"> <input type="text" class="kw" onkeydown="if(event.keyCode == '13') search_center();"/> <input type="button" onclick="search_center()" value="搜索" /> <div id="map" class="map_map"></div> <div id="result"></div> </body> </html>既然是地圖,確定缺乏不了初始化地圖的代碼:
var map;//地圖 var markers;//數組:結果標記 var sRender;//搜索渲染對象 //初始化 function initialize(){ var myLatLng = new sogou.maps.Point(12939000,4840250); var myOptions = { zoom: 10, center: myLatLng, mapControlType:5 }; map = new sogou.maps.Map(document.getElementById("map"), myOptions);//建立地圖 sRender=new sogou.maps.SearchRenderer();//建立搜索渲染對象 }既然是搜索,必須得有搜索的方法:
//搜索 function search_center(){ var kw = $(".kw").val(); search(null,kw); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //如下內容是根據指定內容,進行搜索定位 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //搜索位置(如酒店) function search(classid,kw){ clearMarker(sRender);//清除定位標記 var request={ 'map':map, 'what':{}, 'range':{'city':'北京'} }; if(classid) request.what.classid=classid; if(kw) request.what.keyword=kw+","; var search=new sogou.maps.Search();//建立搜索實例 sRender=new sogou.maps.SearchRenderer();//({'panel':document.getElementById('result')});//建立搜索渲染對象 search.search(request,callback); //執行搜索 search.setRenderer(sRender);//渲染搜索結果 }每次搜索,都須要先清理原先的搜索記錄:
//清除標記 function clearMarker(sRender){ $("#result").children().remove();//清空查詢列表 sRender.clearResultFeatures(); var m=sRender.getMarkers(); if(m){ //動態改變了數組的值,因此必須是倒着操做 for(var i=m.length-1;m && i>=0;i--){ m[i].setMap(null); m.pop();//將最後一個對象彈出 } } }每次搜索完畢,從新定位中心點,我這裏是獲取第一個搜索結果,做爲新的中心點:
//搜索完畢後的回調,這裏從新設定中心點 function callback(result){ setTimeout(getMarkers,500); } //獲取中心節點 function getMarkers(){ markers = sRender.getMarkers(); if(markers && markers.length>0){ center = markers[0].options.feature.points[0]; toCenter();//從新定位地圖中心點 } } //定位中心 function toCenter(){ map.setCenter(center) }
js就這麼多,值得注意的是,這一串兒的js,都要放到</body>後面。先來看看效果圖吧:jquery
sRender=new sogou.maps.SearchRenderer({'panel':document.getElementById('result')});這個result就是頁面上一個div的id。這樣就會自動把結果放入到這個div中了。
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。api