附上地图编辑页面代码(包括覆盖物的增删改查)
<!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>
代码分块查看