
如圖需求:
需要實現a與b的聯動,且圓形覆蓋物的半徑可拖拽改變,a也可以設置圓形覆蓋物的半徑值;
代碼如下:(經供參考)
<!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:"微軟雅黑";}
#allmap{width:100%;height:500px;}
p{margin-left:5px; font-size:14px;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=CHZaA3XBlwaD4pUsgV85pGQ5gpQbyhqC"></script>
<script type="text/javascript" src="js/jquery-1.9.1.min.js">
</script>
<title>圓形區域搜索</title>
</head>
<body>
<div><input type="number" name="" class="setRadio" value="" /></div>
<div id="allmap"></div>
<!--<div class="radioTip" style="position: absolute;left:0;top:0;background: #fff;font-size:13px;border: 1px solid blue;padding:3px;">半徑 米</div>-->
<p>返回北京市地圖上圓形覆蓋范圍內的“餐館”檢索結果,並展示在地圖上</p>
</body>
</html>
<script type="text/javascript">
// 百度地圖API功能
var map = new BMap.Map("allmap"); // 創建Map實例
var mPoint = new BMap.Point(116.404, 39.915); // 初始化地圖中心點
var circleArr=[]; //存儲circle覆蓋物的數組
var labelArr=[]; //存儲文本標記的數組
var setRadio=document.querySelector(".setRadio")
map.enableScrollWheelZoom();
map.centerAndZoom(mPoint,15);
var circle = new BMap.Circle(mPoint,1000,{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.3, strokeOpacity: 0.3,enableEditing:true});
map.addOverlay(circle);
circleArr.push(circle);
function showRadius(obj){
//清除全部的文本標記
for(var i=0;i<labelArr.length;i++){
map.removeOverlay(labelArr[i]);
}
var opts = {
position :obj.point, // 指定文本標注所在的地理位置
offset : new BMap.Size(10, -10) //設置文本偏移量
}
if(obj.radius){
var label = new BMap.Label(obj.radius+'米', opts); // 創建文本標注對象
$(setRadio).val(obj.radius); //顯示
}else{
var label = new BMap.Label(circle.getRadius()+'米', opts); // 創建文本標注對象
$(setRadio).val(circle.getRadius());
}
label.setStyle({
fontSize : "12px",
height : "20px",
lineHeight : "20px",
fontFamily:"微軟雅黑",
borderColor:"blue"
});
map.addOverlay(label);
labelArr.push(label);
}
if (mPoint != null){
circle.addEventListener("lineupdate", function (e) {
circle.oc[1].ondragging=showRadius(e);
showRadius({
point:circle.oc[1].point
});
});
}
setRadio.onkeyup=setRadio.onchange=function(){
//清除圓形覆蓋物
for(var i=0;i<circleArr.length;i++){
map.removeOverlay(circleArr[i]);
}
//清除文本標記
for(var i=0;i<labelArr.length;i++){
map.removeOverlay(labelArr[i]);
}
//清除完畢后重新制作圓形覆蓋物
var circle = new BMap.Circle(mPoint,circleRadius,{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.3, strokeOpacity: 0.3});
var circleRadius=parseInt(this.value); //獲取用戶設置的半徑值
circle.setRadius(circleRadius) //設置圓形覆蓋物的半徑
map.addOverlay(circle); //將圓形覆蓋物添加到地圖上
circle.enableEditing(); //設置圓形覆蓋物可編輯
circleArr.push(circle); //將該園形覆蓋物存於數組中,以便再次設置之前進行清除
//調用showRadius方法展示文本標記
showRadius({
point:circle.oc[1].point,
radius:circleRadius
});
if (mPoint != null){
//為圓行覆蓋物添加監聽事件
circle.addEventListener("lineupdate", function (e) {
//為圓上點添加拖拽事件
circle.oc[1].ondragging=function(e){
for(var i=0;i<labelArr.length;i++){
map.removeOverlay(labelArr[i]);
}
var opts = {
position : e.point, // 指定文本標注所在的地理位置
offset : new BMap.Size(10, -10) //設置文本偏移量
}
var label = new BMap.Label(circle.getRadius()+'米', opts); // 創建文本標注對象
$(setRadio).val(circle.getRadius());
label.setStyle({
fontSize : "12px",
height : "20px",
lineHeight : "20px",
fontFamily:"微軟雅黑",
borderColor:"blue"
});
map.addOverlay(label);
labelArr.push(label);
}
});
}
}
var local = new BMap.LocalSearch(map, {renderOptions: {map: map, autoViewport: false}});
local.searchNearby('餐館',mPoint,1000);
</script>
