百度地图覆盖物编辑(覆盖物的增删改查)

附上地图编辑页面代码(包括覆盖物的增删改查)

<!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:100%; overflow: hidden;}
    #result {width:100%;font-size:12px;}
    dl,dt,dd,ul,li{
        margin:0;
        padding:0;
        list-style:none;
    }
    p{font-size:12px;}
    dt{
        font-size:14px;
        font-family:"微软雅黑";
        font-weight:bold;
        border-bottom:1px dotted #000;
        padding:5px 0 5px 5px;
        margin:5px 0;
    }
    dd{
        padding:5px 0 0 5px;
    }
    li{
        line-height:28px;
    }
    </style>
    
    <script type="text/javascript" src="js/jquery/jquery.min.js"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=FTxuWs3OwyIdo28v38WoVqLUnizILv3h"></script>
    <!--加载鼠标绘制工具-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
    <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />
    
    <!--加载检索信息窗口-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
    <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />
    <title>地图展示</title>
    <style type="text/css">
    .icon {
       width: 1em; height: 1em;
       vertical-align: -0.15em;
       fill: currentColor;
       overflow: hidden;
    }
    button{
        width: 68px;
        height: 48px;
        margin-top: 10px;
        margin-left: 5px;
        border-radius:10px;
        color: #2378b4;

    }
    </style>
</head>
<body>
    
        
    <div id="allmap" style="overflow:hidden;zoom:1;position:relative;">    
        <div id="map" style="height:100%;-webkit-transition: all 0.5s ease-in-out;transition: all 0.5s ease-in-out;"></div>
    </div>
<div id="result" style="position: absolute; z-index: 1; text-size-adjust: none; bottom: auto; right: auto; top: 5px; ">
        <button  class="but" id="open" onclick="update()  ">保存</button>
        <button  class="but" id="close" onclick="edit()">刷新</button>
    </div>
<!--      <div id="result">
    <input type="button" value="获取绘制的覆盖物个数" onclick="alert(overlays)"/>
    <input type="button" value="清除所有覆盖物" onclick="clearAll()"/>
</div>  -->
    <script type="text/javascript">

    // 百度地图API功能
    var map = new BMap.Map('map');
    var poi = new BMap.Point(116.404, 39.915);
    map.centerAndZoom(poi, 11);
    map.enableScrollWheelZoom();
    
   <!-- var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});// 左上角,添加比例尺 -->
    <!-- var top_left_navigation = new BMap.NavigationControl();  //左上角,添加默认缩放平移控件 -->
    <!-- var top_right_navigation = new BMap.NavigationControl({anchor: BMAP_ANCHOR_TOP_RIGHT, type: BMAP_NAVIGATION_CONTROL_SMALL}); //右上角,仅包含平移和缩放按钮 -->
    <!-- map.addControl(top_left_control);         -->
        <!-- map.addControl(top_left_navigation);      -->
        <!-- map.addControl(top_right_navigation); -->
        
        
     var projectId=2;//项目id
    var sql="select ID,COTYPE,COORD from OU_MAP where PROJECTID="+projectId;
    var prr="";//坐标
    var coType="";//覆盖物类型

    var overlays = [];
    var overlaycomplete = function(e){
        overlays.push(e.overlay);
         // 设置可编辑
        e.overlay instanceof BMap.Marker == true ? e.overlay.enableDragging() : e.overlay.enableEditing();
    };

        
    var styleOptions = {
        strokeColor:"red",    //边线颜色。
        fillColor:"red",      //填充颜色。当参数为空时,圆形将没有填充效果。
        strokeWeight: 3,       //边线的宽度,以像素为单位。
        strokeOpacity: 0.8,       //边线透明度,取值范围0 - 1。
        fillOpacity: 0.6,      //填充的透明度,取值范围0 - 1。
        strokeStyle: 'solid' //边线的样式,solid或dashed。
    }
    //实例化鼠标绘制工具
    var drawingManager = new BMapLib.DrawingManager(map, {
        isOpen: false, //是否开启绘制模式
        enableDrawingTool: true, //是否显示工具栏
        drawingToolOptions: {
            anchor: BMAP_ANCHOR_BOTTOM_LEFT, //位置
            offset: new BMap.Size(5, 40), //偏离值
        },
        circleOptions: styleOptions, //圆的样式
        polylineOptions: styleOptions, //线的样式
        polygonOptions: styleOptions, //多边形的样式
        rectangleOptions: styleOptions //矩形的样式
    });  
     
    drawingManager.addEventListener('overlaycomplete', overlaycomplete);

    //页面加载获取地图数据
    $( function() {
    //alert("执行ajax");
        $.ajax({
            url : "test/jsonAction.action",  //访问路径
            type : "post", //数据传输方式
            data : {"sql":sql,"actionType":"query"}, //发送到服务器的数据,属性:值
            async : true,  //是否异步处理;默认是true
            dataType : "json", //预期服务器传回的数据格式
            success : function(data) {  //请求成功调用的函数;data:后台反馈的数据;eval(data):将后台反馈的数据解析成json数组
               map.clearOverlays();    
               showMap(data);
            },
            error : function(data) {  //请求失败调用函数
                alert("后台接收数据失败");
            }
        });

    });



    //地图展示
    function showMap(data){
        var coord=new Array();
        var Poly=new Array();
        var point=new Array();
        var data=data.listResponseJson;//获取属性
        for(var i=0;i<data.length;i++){
            switch(data[i].COTYPE) {
                 case "Marker":
                    coord=data[i].COORD.split("#");
                    var marker = new BMap.Marker(new BMap.Point(coord[0], coord[1]));        // 创建标注    
                        RightClickDelete(data[i].ID,marker);
                    marker.id =data[i].ID;  //标记id便于删除和更新
                    map.addOverlay(marker);
                    marker.enableDragging();                    
                    coord=[];//清空数组
                    break;
                 case "Circle":
                    coord=data[i].COORD.split("#");
                    var circle = new BMap.Circle(new BMap.Point(coord[0], coord[1]),coord[2],styleOptions);
                    RightClickDelete(data[i].ID,circle);
                    circle.id =data[i].ID;
                    map.addOverlay(circle);
                    circle.enableEditing();
                    coord=[];//清空数组
                    break;
                case "Polyline":
                    coord=data[i].COORD.split(",");
                    for(var j=0;j<coord.length;j++){
                            Poly=coord[j].split("#");
                            point.push(new BMap.Point(Poly[0],Poly[1]));
                            
                    }
                    var polyline = new BMap.Polyline(point, styleOptions); //创建折线覆盖物
                    polyline.id =data[i].ID;
                    RightClickDelete(data[i].ID,polyline);
                    map.addOverlay(polyline); //增加折线    
                    polyline.enableEditing();
                    coord=[];//清空数组
                    point=[];
                    break;
                case "Polygon":
                    coord=data[i].COORD.split(",");
                    for(var j=0;j<coord.length;j++){
                            Poly=coord[j].split("#");
                            point.push(new BMap.Point(Poly[0],Poly[1]));
                            
                    }
                    var Polygon = new BMap.Polygon(point, styleOptions); //创建折线覆盖物
                    Polygon.id =data[i].ID;
                    RightClickDelete(data[i].ID,Polygon);
                    map.addOverlay(Polygon); //增加折线    
                    Polygon.enableEditing();
                    coord=[];//清空数组
                    point=[];
                    break;
                  default:
                    alert("没有地图数据");
            }
        }

    }

        
    <!-- 编辑新增覆盖物 -->
    function update(){
            var sqlArr=new Array();
            var newOverlay=new Array();
            var oldOverlay=new Array();
            //获取地图上所有的覆盖物,判断是否有id属性;没有就是新增的覆盖物,有就是编辑的覆盖物
            var allOverlay=map.getOverlays();
            for(var i=0;i<allOverlay.length;i++){
            //alert(allOverlay[i].id);
                    if(allOverlay[i].id != undefined){ //覆盖物编辑
                        oldOverlay.push(allOverlay[i]);    
                        //alert("数据库已有的"+allOverlay[i]);
                    }
            }            
            sqlArr=add(overlays).length >0 ?    edit(oldOverlay).concat(add(overlays)) : edit(oldOverlay);
            
            $.ajax({
                    url : "test/jsonAction.action ",  //访问路径
                    type : "post", //数据传输方式
                    data : {"sqlArr": sqlArr,"actionType":"excute"}, //发送到服务器的数据,属性:值
                    async : true,  //是否异步处理;默认是true
                    dataType : "json", //预期服务器传回的数据格式
                    success : function(data) {
                            alert("编辑成功!");
                        },
                            error : function(data) {  //请求失败调用函数
                            alert("编辑失败");
                        }                    
                    });
    }
    
    
    
    
    function edit(overlays){
        var sqlArr=new Array();
        var sql="";
        for(var i = 0; i < overlays.length; i++){
                if(overlays[i] instanceof BMap.Marker){//标注物点    
                    coord=overlays[i].point.lng +"#"+overlays[i].point.lat;
                    coType="Marker";
                    sql="update OU_MAP set coord='"+coord+"' where id="+overlays[i].id;
                    sqlArr.push(sql);
                }

                if (overlays[i] instanceof BMap.Circle) {//标注物圆
                    coType="Circle";
                    coord=overlays[i].point.lng +"#"+overlays[i].point.lat+"#"+overlays[i].getRadius();
                    sql="update OU_MAP set coord='"+coord+"' where id="+overlays[i].id;
                    sqlArr.push(sql);
                }
                
        }
        
        
        var linelnglatArr="";
            if(overlays[i] instanceof BMap.Polyline == true ){
             for(var j = 0; j < overlays[i].getPath().length; j++){//循环每一个连线上的点个数
                    var object = new Object();
                    object.lnglatX = overlays[i].getPath()[j].lng;
                    object.lnglatY = overlays[i].getPath()[j].lat;
                    linelnglatArr=linelnglatArr+object.lnglatX.toString()+"#"+ object.lnglatY.toString() +",";

                }  
                    coType="Polyline";
                coord=linelnglatArr.substring(0,linelnglatArr.length-1);
                  sql="update OU_MAP set coord='"+coord+"' where id="+overlays[i].id;
                sqlArr.push(sql);
               }


               if (overlays[i] instanceof BMap.Polygon==true &&  overlays[i] instanceof BMap.Circle ==false) {
                    for(var j = 0; j < overlays[i].getPath().length; j++){//循环每一个连线上的点个数
                    var object = new Object();
                    object.lnglatX = overlays[i].getPath()[j].lng;
                    object.lnglatY = overlays[i].getPath()[j].lat;
                    linelnglatArr=linelnglatArr+object.lnglatX.toString()+"#"+ object.lnglatY.toString() +",";

                }  
                    coType="Polygon";
                coord=linelnglatArr.substring(0,linelnglatArr.length-1);;
                  sql="update OU_MAP set coord='"+coord+"' where id="+overlays[i].id;
                sqlArr.push(sql);


               }
            return sqlArr;
    }
    
    
    function add(overlays){
        var sqlArr=new Array();
        var sql="";
        for(var i = 0; i < overlays.length; i++){
                if(overlays[i] instanceof BMap.Marker){//标注物点    
                    coord=overlays[i].point.lng +"#"+overlays[i].point.lat;
                    coType="Marker";
                    sql="insert into OU_MAP (projectId,coType,coord) values ('"+projectId+"','"+coType+"','"+ coord+"')";
                    sqlArr.push(sql);
                }

                if (overlays[i] instanceof BMap.Circle) {//标注物圆
                    //alert(overlays[i].getRadius() +"---"+overlays[i].point.lng +"--"+overlays[i].point.lat);
                    coType="Circle";
                    coord=overlays[i].point.lng +"#"+overlays[i].point.lat+"#"+overlays[i].getRadius();
                    sql="insert into OU_MAP (projectId,coType,coord) values ('"+projectId+"','"+coType+"','"+ coord+"')";
                    sqlArr.push(sql);
                }
                
        
        
        
        var linelnglatArr="";
            if(overlays[i] instanceof BMap.Polyline == true ){
             for(var j = 0; j < overlays[i].getPath().length; j++){//循环每一个连线上的点个数
                    var object = new Object();
                    object.lnglatX = overlays[i].getPath()[j].lng;
                    object.lnglatY = overlays[i].getPath()[j].lat;
                    linelnglatArr=linelnglatArr+object.lnglatX.toString()+"#"+ object.lnglatY.toString() +",";

                }  
                    coType="Polyline";
                coord=linelnglatArr.substring(0,linelnglatArr.length-1);
                  sql="insert into OU_MAP (projectId,coType,coord) values ('"+projectId+"','"+coType+"','"+ coord+"')";
                sqlArr.push(sql);
               }


               if (overlays[i] instanceof BMap.Polygon==true &&  overlays[i] instanceof BMap.Circle ==false) {
                    for(var j = 0; j < overlays[i].getPath().length; j++){//循环每一个连线上的点个数
                    var object = new Object();
                    object.lnglatX = overlays[i].getPath()[j].lng;
                    object.lnglatY = overlays[i].getPath()[j].lat;
                    linelnglatArr=linelnglatArr+object.lnglatX.toString()+"#"+ object.lnglatY.toString() +",";

                }  
                    coType="Polygon";
                coord=linelnglatArr.substring(0,linelnglatArr.length-1);;
                  sql="insert into OU_MAP (projectId,coType,coord) values ('"+projectId+"','"+coType+"','"+ coord+"')";
                sqlArr.push(sql);


               }
        }
            return sqlArr;
    }
    
    
    
    
    <!-- 鼠标右击删除地图数据 -->
    function RightClickDelete(id,marker){
        var sqlArr=new Array();
        var sql="delete from OU_MAP where id="+id;
        sqlArr.push(sql);
        var removeMarker = function(e,ee,marker){//右键删除站点   
                //ajax向后台传递sql语句,从数据库删除数据
                if (confirm("要删除站点吗?")){
                    if(true){
                        $.ajax({
                                    url : "test/jsonAction.action ",  //访问路径
                                    type : "post", //数据传输方式
                                    data : {"sqlArr": sqlArr,"actionType":"excute"}, //发送到服务器的数据,属性:值
                                    async : true,  //是否异步处理;默认是true
                                    dataType : "json", //预期服务器传回的数据格式
                                    success : function(data) {
                                        map.removeOverlay(marker);               //将地图中的标记删除
                                         alert("删除成功!");
                                    },
                                    error : function(data) {  //请求失败调用函数
                                        alert("删除失败");
                                    }
                        
                                });
                
                                    
                             };
                        }
                }
                     var markerMenu=new BMap.ContextMenu();
                     markerMenu.addItem(new BMap.MenuItem('删除站点',removeMarker.bind(marker)));
                     marker.addContextMenu(markerMenu);//给标记添加右键菜单
     };
</script>
</body>
</html>

代码分块查看

关于百度地图的使用(地图数据的增删改查涉及数据库)_少侠好刀法的博客-CSDN博客_百度地图数据库

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值