使用高德地图的 PolyEditor addListener 插件在地图上画取多边形;
并获取多边形的坐标传json串传给后端存数据库;
编辑时展示数据库所保存的多边形并保持可拖动编辑状态;
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"> <title>编辑折线、多边形、圆</title> <link rel="stylesheet" href="https://cache.amap.com/lbs/static/main1119.css"/> <script src="https://webapi.amap.com/maps?v=1.4.4&key=您申请的key值&plugin=AMap.PolyEditor"></script> <script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script> <script src="https://lib.sinaapp.com/js/jquery/2.2.4/jquery-2.2.4.min.js" type="text/javascript" charset="utf-8"></script> <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script> <style type="text/css" media="screen"> .button-group {position: absolute;top: 0px;right: 20px;font-size: 12px;padding: 10px;} </style> </head> <body> <div id="container"></div> <div class="button-group"> <input type="button" class="button" value="区域编辑完成" onClick="closeEditPolygon();"/> </div> <script> var storage = window.localStorage; var editorTool, map = new AMap.Map("container", { resizeEnable: true, //center: [116.403322, 39.900255],//地图中心点 zoom: 13 //地图显示的缩放级别 }); var beginNum = 0; var clickListener ; var beginPoints;//存坐标的数组 var beginMarks ; var polygonEditor; var resPolygon = []; var resNum = 0; var editRegion = storage.getItem("FenceRegion"); init(); function init(){ beginPoints = []; beginMarks = []; beginNum = 0; polygonEditor = ''; if(editRegion){ beginPoints = JsonToArray(editRegion); console.log(beginPoints); var polygon = createPolygon(beginPoints); polygonEditor = createEditor(polygon);//如果是要不可编辑状态去掉此行 }else{ clickListener = AMap.event.addListener(map, "click", mapOnClick); } } function mapOnClick(e) { beginMarks.push(addMarker(e.lnglat)); console.log(e.lnglat); beginPoints.push(e.lnglat); beginNum++; if(beginNum == 3){ AMap.event.removeListener(clickListener); var polygon = createPolygon(beginPoints); polygonEditor = createEditor(polygon); clearMarks(); } }; /*创建多边形*/ function createPolygon(arr){ var polygon = new AMap.Polygon({ map: map, path: arr, strokeColor: "#0000ff", strokeOpacity: 1, strokeWeight: 3, fillColor: "#f5deb3", fillOpacity: 0.35 }); return polygon; } function createEditor(polygon){ var polygonEditor = new AMap.PolyEditor(map, polygon); polygonEditor.open(); AMap.event.addListener(polygonEditor,'end',polygonEnd); return polygonEditor; } function closeEditPolygon(){ if(!polygonEditor){ console.log('未获取到地图'); return false; } //polygonEditor.close();//关闭编辑状态 var FenceRegion = []; if(!beginPoints){ console.log('未获取到坐标'); return false; } beginPoints.forEach(function(item,index){ var lng = parseFloat(item['lng']);//经 var lat = parseFloat(item['lat']);//纬 FenceRegion.push([lng,lat]); }); var newRegion = ObjectToJson(FenceRegion); console.log(newRegion); // [ // {"lng":106.468742,"lat":29.543236}, // {"lng":106.470115,"lat":29.522475}, // {"lng":106.499298,"lat":29.533827} // ] /*给父页设置值*/ parent.$('input[name=fence_region]').val(newRegion); storage.setItem("FenceRegion",newRegion); } function polygonEnd(res){ resPolygon.push(res.target); alert(resPolygon[resNum].contains([116.386328, 39.913818])); appendHideHtml(resNum,res.target.getPath()); resNum++; init(); } function appendHideHtml(index,arr){ var strify = JSON.stringify(arr); var html = '<input type="hidden" id="index'+index+'" name="paths[]" value="'+strify+'">'; $('body').append(html); console.log(html); } function clearMarks(){ map.remove(beginMarks); } function JsonToArray(json){ var arr = JSON.parse(json); var res = []; for (var i = 0; i < arr.length; i++) { var line = []; line.push(arr[i].lng); line.push(arr[i].lat); res.push(line); }; return res; } // 实例化点标记 function addMarker(lnglat) { var marker = new AMap.Marker({ icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png", position: lnglat }); marker.setMap(map); return marker; } function ObjectToJson(arr){ if(!arr.length) return null; var i = 0; len = arr.length, array = []; for(;i<len;i++){ array.push({"lng":arr[i][0],"lat":arr[i][1]}); } return JSON.stringify(array); } </script> </body> </html>
转载请注明本文标题和链接:《 高德地图画多边形并获取坐标 》
网友评论 0