使用AMap.Autocomplete() 自動補全插件,實現搜索功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script> <style> *{margin:0;padding:0;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #setZoomNode{width:400px;height:100px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style> </head> <body> <div id="container"></div> <div id="setZoomNode"> 鼠標點擊的經緯度:<span id="xy"></span> </div> <script> var map=new AMap.Map("container"); //加載AMap.Autocomplete自動補全插件 AMap.plugin("AMap.Autocomplete",function(){ console.log("插件加載完成"); //使用插件的搜索功能 new AMap.Autocomplete().search("寧波",function(status,data){ console.log(data); }) }) </script> </body> </html>
使用自動補全搜索,並展示出來。點擊后可以定位
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #setZoomNode{width:200px;height:500px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} #node li{cursor:pointer;} </style> </head> <body> <div id="container"></div> <div id="setZoomNode"> <input type="text" id="txt"> <ul id="node"></ul> </div> <script> var map=new AMap.Map("container"); //加載AMap.Autocomplete自動補全插件 AMap.plugin("AMap.Autocomplete",function(){ //console.log("插件加載完成"); txt.oninput=function(){ node.innerHTML=""; //console.log(this.value);//輸入框中的文本 if(this.value=="") return; //使用插件的搜索功能 new AMap.Autocomplete().search(this.value,function(status,data){ for(var i=0;i<data.tips.length;i++){ var oli=document.createElement("li"); oli.innerHTML=data.tips[i].name; //將坐標賦值給屬性 oli.r=data.tips[i].location.R; oli.q=data.tips[i].location.Q; node.appendChild(oli); //oli點擊事件 oli.onclick=function(){ console.log(this.r+","+this.q); map.setCenter([this.r,this.q]); } } //console.log(data); }) } }) </script> </body> </html>
點擊之后自動設置中心點
插件還有另一種方式來加載 &plugin=
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete"></script>
調用也有另一種方式(官方提供,自帶下拉樣式)
new AMap.Autocomplete({
input:"txt"
})
完整代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #setZoomNode{width:200px;height:500px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} #node li{cursor:pointer;} </style> </head> <body> <div id="container"></div> <div id="setZoomNode"> <input type="text" id="txt"> </div> <script> var map=new AMap.Map("container"); //官方給出的搜索方式 new AMap.Autocomplete({ input:"txt" }) </script> </body> </html>
輸入提示與POI結合
POI =》 point of interest 興趣點
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #setZoomNode{width:280px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} #node li{cursor:pointer;} </style> </head> <body> <div id="container"></div> <div id="setZoomNode"> </div> <script> var map=new AMap.Map("container"); //興趣點服務 AMap.service(["AMap.PlaceSearch"],function(){ new AMap.PlaceSearch({ pageSize:5,//一頁顯示幾條 pageIndex:1,//默認是1,可不寫 city:"0574",//城市區號 map:map,//地圖名 panel:"setZoomNode"//數據裝載容器 }).search("電影院"); }) </script> </body> </html>
需要注意的是:只有在服務器上才能顯示圖片
通過輸入框搜索
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #setZoomNode{width:280px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:50px;right:20px;position: absolute;} #node li{cursor:pointer;} #searchNode{width:280px;height:30px;background:#fff;position: absolute;top:20px;right:20px;} </style> </head> <body> <div id="container"></div> <div id="searchNode"> <input type="text" id="searchIpt"> <button id="btn">搜索</button> </div> <div id="setZoomNode"> </div> <script> var map=new AMap.Map("container"); btn.onclick=function(){ //興趣點服務 AMap.service(["AMap.PlaceSearch"],function(){ new AMap.PlaceSearch({ pageSize:4,//一頁顯示幾條 pageIndex:1,//默認是1,可不寫 city:"0574",//城市區號 cityLimit:true,//限制城市 map:map,//地圖名 panel:"setZoomNode"//數據裝載容器 }).search(searchIpt.value); }) } </script> </body> </html>
二者結合使用的demo
AMap事件監聽
AMap.event.addListener(searchVal,"select",function(e){
//輸入地址,選中某個具體地址時觸發
console.log(e);
})
全部代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #setZoomNode{width:280px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:50px;right:20px;position: absolute;} #node li{cursor:pointer;} #searchNode{width:280px;height:30px;background:#fff;position: absolute;top:20px;right:20px;} </style> </head> <body> <div id="container"></div> <div id="searchNode"> <input type="text" id="searchIpt"> </div> <div id="setZoomNode"> </div> <script> var map=new AMap.Map("container"); var searchVal=new AMap.Autocomplete({ input:"searchIpt" }); var placeSearch=new AMap.PlaceSearch({ map:map }); //AMap事件監聽 AMap.event.addListener(searchVal,"select",function(e){ //輸入地址,選中某個具體地址時觸發 console.log(e); placeSearch.search(e.poi.name); }) </script> </body> </html>
在給定范圍內搜索(搜索周邊)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style> </head> <body> <div id="container"></div> <div id="searchNode"> <input type="text" id="txt"> <button id="btn">搜索</button> <div id="list"></div> </div> <script> var map=new AMap.Map("container",{ zoom:19, center:[121.54979200000002,29.868388] }); console.log(map.getCenter().toString()); AMap.service(["AMap.PlaceSearch"],function(){ btn.onclick=function(){ new AMap.PlaceSearch({ type:"餐飲",//住宿 pageSize:5, pageIndex:1, city:"0574", cityLimit:true, map:map, panel:"list" }).searchNearBy("寧波",[121.54979200000002,29.868388],1000,function(){}); //搜索距離指定中心點方圓1000米的住宿點 } }) </script> </body> </html>
添加標記點
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style> </head> <body> <div id="container"></div> <script> var map=new AMap.Map("container",{ zoom:19, center:[121.54979200000002,29.868388] }); //添加標記 var marker=new AMap.Marker({ icon:"https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",//官方提供的標記 position:[121.54979200000002,29.868388] }); marker.setMap(map); </script> </body> </html>
點擊地圖添加標記點-多標記
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style> </head> <body> <div id="container"></div> <script> var map=new AMap.Map("container",{ zoom:11, center:[121.54979200000002,29.868388] }); map.on("click",function(e){ console.log(e.lnglat); //添加標記 var marker=new AMap.Marker({ icon:"https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",//官方提供的標記 position:[e.lnglat.R,e.lnglat.Q], offset:new AMap.Pixel(-25,-25) }); marker.setMap(map); }) </script> </body> </html>
通過css修改標記點尺寸
先獲取到樣式名
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} .amap-icon img{width:25px;height:34px;} </style> </head> <body> <div id="container"></div> <script> var map=new AMap.Map("container",{ zoom:11, center:[121.54979200000002,29.868388] }); map.on("click",function(e){ console.log(e.lnglat); //添加標記 var marker=new AMap.Marker({ icon:"https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",//官方提供的標記 position:[e.lnglat.R,e.lnglat.Q], offset:new AMap.Pixel(-25,-25) }); marker.setMap(map); }) </script> </body> </html>
自定義圖標樣式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} .amap-icon img{width:25px;height:34px;} </style> </head> <body> <div id="container"></div> <script> var map=new AMap.Map("container",{ zoom:11, center:[121.54979200000002,29.868388] }); //自定義圖標樣式 var marker1=new AMap.Icon({ size:new AMap.Size(500,500),//告訴地圖圖片尺寸 image:"1.jpg", imageSize:new AMap.Size(100,100)//地圖上顯示的圖片尺寸 }) //創建圖標 var mk1=new AMap.Marker({ position:[121.54979200000002,29.868388],//圖標位置 icon:marker1//指定圖標樣式 }) mk1.setMap(map);//圖標丟入地圖 </script> </body> </html>
自定義標記點-多標記
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} .amap-icon img{width:25px;height:34px;} </style> </head> <body> <div id="container"></div> <script> var map=new AMap.Map("container",{ zoom:11, center:[121.54979200000002,29.868388] }); //自定義圖標樣式 var marker1=new AMap.Icon({ size:new AMap.Size(500,500),//告訴地圖圖片尺寸 image:"1.jpg", imageSize:new AMap.Size(100,100)//地圖上顯示的圖片尺寸 }) //創建圖標 var mk1=new AMap.Marker({ position:[121.54979200000002,29.868388],//圖標位置 icon:marker1//指定圖標樣式 }) //自定義圖標樣式 var marker2=new AMap.Icon({ size:new AMap.Size(500,313),//告訴地圖圖片尺寸 image:"2.jpg", imageSize:new AMap.Size(100,60)//地圖上顯示的圖片尺寸 }) //創建圖標 var mk2=new AMap.Marker({ position:[121.44979200000002,29.68388],//圖標位置 icon:marker2//指定圖標樣式 }) map.add([mk1,mk2]);//圖標批量加入地圖 </script> </body> </html>
刪除標記
方法一:marker.setMap(null)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} .amap-icon img{width:25px;height:34px;} </style> </head> <body> <div id="container"></div> <script> var map=new AMap.Map("container",{ zoom:11, center:[121.54979200000002,29.868388] }); //創建圖標 var mk=new AMap.Marker({ position:[121.54979200000002,29.868388],//圖標位置 icon:"https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png" }) mk.setMap(map); //3秒后清除標記 setTimeout(function(){ mk.setMap(null); },3000); </script> </body> </html>
方法二:
map.remove([marker...])
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>map</title> <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a&plugin=AMap.Autocomplete,AMap.PlaceSearch"></script> <style> *{margin:0;padding:0;list-style: none;} #container {width:100%; height: 100%;top:0;left:0;position: absolute; } #searchNode{width:300px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} .amap-icon img{width:25px;height:34px;} </style> </head> <body> <div id="container"></div> <script> var map=new AMap.Map("container",{ zoom:11, center:[121.54979200000002,29.868388] }); //創建圖標 var mk1=new AMap.Marker({ position:[121.54979200000002,29.868388],//圖標位置 icon:"https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png" }) var mk2=new AMap.Marker({ position:[121.54979200000002,29.668388],//圖標位置 icon:"https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png" }) map.add([mk1,mk2]); //3秒后清除標記 setTimeout(function(){ map.remove([mk1,mk2]); },3000); </script> </body> </html>