/** * [ONEMAP.M.toolDraw] * @return {[object]} */ define([ 'html!templates/tools/toolDraw', 'css!styles/tools/toolDraw'], function(tplLayout){ /** * 模块数据 用于数据存储和外部调用 * @type {Object} * 数据存放 */ var modValue = { drawGroup:null, markerIcon:[], drawControl:null, recodData:null, drawGroupGuid:null, liHoverMarker:null } /** * 模块界面样式 例如:宽,高 * @type {Object} */ var styles = {} /** * 模块状态,用于存储模块的状态 例如:收起,关闭 * @type {Object} */ var status = { isAddControl:false, initialized:false, isRecod:false, isAddForm:false } /** * 初始化并订阅事件 * @return {[type]} [description] */ function init(){ //if(status.isAddControl){ // return; //} if(!status.initialized){ status.initialized = true; //取消订阅 unSubscribe(); //添加订阅 subscribe(); modValue.drawGroupGuid = map2DViewer.group({ action: 'add' }); modValue.drawGroup = map2DViewer.groups[modValue.drawGroupGuid]; modValue.markerIcon = []; $('
').appendTo($("#map2DWrap")); //解析icon $.get('images/symbols/all.xml',function(data){ $(data).find('group').each(function(index,ele){ var temp = { icon:[] }; temp.gName = $(ele).attr('name'); $(ele).find('symbol').each(function(index,ele){ var item = { name:$(ele).attr('name'), file:'images/symbols/'+(parseInt($(ele).attr('id'))+2000000000)+'.png' } temp.icon.push(item) }); modValue.markerIcon.push(temp); }); if(!status.isAddControl){ buildControl(); } }); }else { if(!status.isAddControl){ buildControl(); } } ONEMAP.C.publisher.publish({ modName: 'toolDraw' }, 'tools:active'); setLayout(); } /** * 设置界面 */ function setLayout(){ layoutResize(); $(window).resize(function() { layoutResize(); }); } function layoutResize(){ var curWindowHeigth = $(window).height(); if(map23DData.display.map2D){ if(curWindowHeigth < 955){ $(".leaflet-draw").css({ "right":109 }) }else{ $(".leaflet-draw").css({ "right":58 }) } }else{ $(".leaflet-draw").css({ "right":58 }) } if(map23DConfig.netType == 1){ $(".leaflet-draw").css({ "top":410 }) }else{ $(".leaflet-draw").css({ "top":410 }) } }; /** * 界面事件绑定 * @return {[type]} [description] */ function bindEvent(){ $(".draw-marker-picker").unbind('mouseleave').bind('mouseleave',function(){ /*map2DViewer.marker({ action:'remove', guid:modValue.liHoverMarker, }); modValue.liHoverMarker = null;*/ $("#yulanContent").hide(); }); $(".draw-marker-picker img").unbind('mousemove').bind('mousemove',function(){ var url = $(this).attr("src"); var center = map2DViewer.map.getCenter(); /*if(modValue.liHoverMarker != null){ modValue.liHoverMarker = map2DViewer.marker({ action:'update', guid:modValue.liHoverMarker, geojson:{ "properties": { iconUrl: url,//当有fontIcon的时候 iconUrl无效 iconSize: [200, 200], iconAnchor: [100, 100], }, "geometry": { "coordinates": [center.lng,center.lat] } } }) }else{ modValue.liHoverMarker = map2DViewer.marker({ action:'add', //add/remove/update/hide/show geojson:{ "properties": { title:'预览', iconUrl: url,//当有fontIcon的时候 iconUrl无效 iconSize: [200, 200], iconAnchor: [100, 100], }, "geometry": { "coordinates": [center.lng,center.lat] } } }) }*/ $("#yulanContent").show(); //$("#yulanContent").empty(); //$('').appendTo($("#yulanContent")); $("#yulanContent img").attr("src",url); }); } function buildControl(){ modValue.drawControl = new L.Control.Draw({ draw: { position: 'topleft', marker:{ shapeOptions:{ icon:modValue.markerIcon } } }, edit: { featureGroup: modValue.drawGroup } }); map2DViewer.map.addControl(modValue.drawControl); status.isAddControl = true; if(ONEMAP.D.user.guest){ $('.leaflet-draw-edit-favorite').remove(); } map2DViewer.map.on('draw:created', drawCreated); map2DViewer.map.on('draw:edit', drawEdit); map2DViewer.map.on('draw:edited', drawEdited); map2DViewer.map.on('favorite',favorite); map2DViewer.map.on('printDraw',printDraw); bindEvent(); layoutResize(); } /** * 打印当前标注 */ function printDraw(){ var drawData = jsonDrawData(); require(['modDir/tools/toolMapShotForMapFish'], function(toolMapShotForMapFish) { toolMapShotForMapFish.init(drawData); }); }; /** * 标注创建 添加到容器 * @param e */ function drawCreated(e){ modValue.isRecod = false; var type = e.layerType, layer = e.layer; modValue.drawGroup.addLayer(layer); if(layer instanceof L.Circle){ layer.centerPoint = new L.Circle(layer._latlng, 1, layer.options).addTo(modValue.drawGroup); } } function drawEdit(e){ var layers = e.layers; layers.eachLayer(function(layer) { if(layer instanceof L.Circle){ layers.removeLayer(layer.centerPoint); } }); } /** * 标注编辑完成后 统计 * @param e */ function drawEdited(e){ modValue.isRecod = false; var layers = e.layers; var countOfEditedLayers = 0; layers.eachLayer(function(layer) { countOfEditedLayers++; if(layer instanceof L.Circle){ layer.centerPoint.setLatLng(layer._latlng).addTo(modValue.drawGroup); } }); } /** * 清空 */ function cleanAllDraw(){ modValue.drawGroup.clearLayers(); } /** * 解析DrawGroup图层信息并返回JSON串 * @returns {*} * @private */ function jsonDrawData(){ var data = []; modValue.drawGroup.eachLayer(function(layer){ var item = {}; item.drawType = layer.drawType; switch (layer.drawType){ case 'label': item.value = layer._content.value; item.drawInfo = { center:[layer.getLatLng().lat,layer.getLatLng().lng], shapeOptions:layer.drawInfo.shapeOptions } break; case 'circle': item.drawInfo = { startLatLng:[layer.getLatLng().lat,layer.getLatLng().lng], radius:layer.getRadius(), shapeOptions:layer.drawInfo.shapeOptions }; break; case 'marker': item.drawInfo = { center:[layer.getLatLng().lat,layer.getLatLng().lng], icon:layer.drawInfo.icon }; break; case 'polyline': item.drawInfo = { LatLngs:layer.getLatLngs(), shapeOptions:layer.drawInfo.shapeOptions } break; case 'painting': item.drawInfo = { LatLngs:layer.getLatLngs(), shapeOptions:layer.drawInfo.shapeOptions } break; case 'polygon': item.drawInfo = { LatLngs:layer.getLatLngs(), shapeOptions:layer.drawInfo.shapeOptions } break; case 'rectangle': item.drawInfo = { bounds:layer.getBounds(), shapeOptions:layer.drawInfo.shapeOptions } break; } data.push(item); }); return JSON.stringify(data); } /** * 显示保存的数据,添加到drawGroup * @param jsonData */ function showDrawRecord(jsonData,isRecod){ if(!status.initialized){ init(); status.initialized = true; } if(isRecod){ modValue.isRecod = isRecod modValue.recodData = jsonData; } var recordAry = JSON.parse(jsonData.draw_data); for(var i= 0,l=recordAry.length;i= 0){ ONEMAP.C.publisher.publish({ type: 'warning', message: '名称不能为空或包含空格' }, 'noteBar::add'); $('#userDrawAddModal .input').focus(); return false; } if((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s]/g).test(name)){ ONEMAP.C.publisher.publish({ type: 'warning', message: '名称只能包含英文、数字、中文' }, 'noteBar::add'); $('#userDrawAddModal .input').focus(); return false; } //构造数据 var ajaxData = {}; ajaxData.name = $('#userDrawAddModal .input').val(); ajaxData.center_lon = map2DViewer.map.getCenter()['lng']; ajaxData.center_lat = map2DViewer.map.getCenter()['lat']; ajaxData.initial_zoom = map2DViewer.map.getZoom(); ajaxData.map_type = 1; ajaxData.draw_data = jsonDrawData(); ajaxData.info = buildInfo(); ONEMAP.V.loading.load(); $.ajax({ type:"post", dataType:'json', url:onemapUrlConfig.userCenterUrl+'/draw/add', data:ajaxData, success:function(data){ ONEMAP.V.loading.loaded(); if(data.code == 4){ ONEMAP.T.noPermission('favorite'); } if(data.code == 3){ ONEMAP.T.logout('favorite'); } if(data.success){ ONEMAP.C.publisher.publish({ type: 'success', message: '保存成功' }, 'noteBar::add'); if(ONEMAP.M.hasOwnProperty('userDraw')){ //ONEMAP.M.userDraw.isFavDataChange = true; ONEMAP.M.userDraw.getFavData(); } //如果保存成功,设置状态为直接打印 //modValue.isRecod = true; //modValue.recodData._id = data.id; //如果成功,回调 if(typeof callbackFunc === 'function'){ callbackFunc(data); } }else { ONEMAP.C.publisher.publish({ type: 'error', message: '保存失败' }, 'noteBar::add'); } }, error:function(errorData){ ONEMAP.V.loading.loaded(); } }); //移除添加框,恢复可添加状态 $('#filterCover').hide(); $('#userDrawAddModal').remove(); status.isAddForm = false; }); } /** * 注册订阅 * @type {Function} * 推送:ONEMAP.C.publisher.publish(options,'moduleName::type'); * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange'); */ function subscribe(){ ONEMAP.C.publisher.subscribe(remove,'cleanMap'); ONEMAP.C.publisher.subscribe(remove, 'tools:active'); ONEMAP.C.publisher.subscribe(remove, 'change23D'); } /** * 取消订阅 * @type {Function} * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange'); */ function unSubscribe(){ ONEMAP.C.publisher.unSubscribe(remove,'cleanMap'); ONEMAP.C.publisher.unSubscribe(remove, 'tools:active'); } /** * 模块移除 * @return {[type]} [description] */ function remove(options){ if(options.modName!="toolDraw"){ $('#toolsBar .tools-painting').removeClass('cur'); ONEMAP.C.publisher.publish({ modName: 'mapfish::hide' }, 'mapfish'); }else{ if($('#toolsBar .tools-painting').hasClass('cur')){ $('#toolsBar .tools-painting').removeClass('cur'); ONEMAP.C.publisher.publish({ modName: 'mapfish::hide' }, 'mapfish'); }else{ $('#toolsBar .tools-painting').addClass('cur'); } } if(status.isAddControl){ map2DViewer.map.removeControl(modValue.drawControl); map2DViewer.map.off('draw:created', drawCreated); map2DViewer.map.off('draw:edited', drawEdited); map2DViewer.map.off('favorite',favorite); map2DViewer.map.off('printDraw',printDraw); modValue.drawGroup.clearLayers(); map2DViewer.map.removeLayer(modValue.drawGroup); status.isAddControl = false; status.initialized = false; } } return ONEMAP.M.toolDraw = { init:init, remove:remove, showDrawRecord:showDrawRecord, modValue:modValue } });