define(['html!templates/menu/baseCalc/coorTransform', 'css!styles/tools/toolPublicPopup', 'css!styles/menu/baseCalc/coorTransform', ], function (tplLayout) { /** * 模块状态,用于存储模块的状态 例如:收起,关闭 * @type {Object} */ var status = { initialized: false//是否初始化 }; /** * 模块数据 用于数据存储和外部调用 * @type {Object} * 数据存放 */ var modValue = { data: {}, beforeId: "", afterId: "", beforeStyle: { color: "#2ecc71", fontFillColor: "#fff000", labelOffset: -15, }, afterStyle: { color: "#3498db", fontFillColor: "#fff000", labelOffset: 15, } }; /** * 初始化并订阅事件 * @return {[type]} [description] */ function open(data) { modValue.data = data; if (!status.initialized) { setLayout(); bindEvent(); subscribe(); status.initialized = true; } else { // 重置 reset(); } resetLayout(); $("#coorTransformModal .title").text(data.label); ONEMAP.C.publisher.publish({ modName: 'coorTransform' }, 'baseCalc:active'); }; function setLayout() { $('body').append(tplLayout); //拖拽 $("#coorTransformModal .popup-ct").dragmove($('#coorTransformModal')); }; function resetLayout() { if (modValue.data.coorKey == "sh2000xyToWgs84") { $("#coorTransformModal .beforeLon").text("X:") $("#coorTransformModal .beforeLat").text("Y:") $("#coorTransformModal .afterLonLat").text("经度:") } else if (modValue.data.coorKey == "wgs84ToSh2000xy") { $("#coorTransformModal .beforeLon").text("经度:") $("#coorTransformModal .beforeLat").text("纬度:") $("#coorTransformModal .afterLonLat").text("XY:") } else { $("#coorTransformModal .beforeLon").text("经度:") $("#coorTransformModal .beforeLat").text("纬度:") $("#coorTransformModal .afterLonLat").text("经纬度:") } } /** * 事件绑定 */ function bindEvent() { $("#coorTransformModal .close").bind('click', function () { close(); }); $("#coorTransformModal .btn-default.sure").bind('click', function () { execute() }); //回车执行 $('#coorTransformInput, #jumpToLatInput').bind('keydown', function (e) { if (e.keyCode === 13) { execute(); } }); }; /** * 注册监听 * @type {Function} */ function subscribe() { ONEMAP.C.publisher.subscribe(remove, 'baseCalc:active'); }; /** * 关闭模块 * @return {[type]} [description] */ function remove(options) { if (options.modName != 'coorTransform') { close(); } else { $("#coorTransformModal").show(); } } function reset() { $("#coorTransformForm .lonCoor").val(""); $("#coorTransformForm .latCoor").val(""); // clearMarker(); $("#coorTransformForm .outputCoor").text("") } function close() { $("#coorTransformModal").hide(); reset(); } // 执行 function execute() { // 检测坐标 let lon = $("#coorTransformForm .lonCoor").val() let lat = $("#coorTransformForm .latCoor").val() if (lon == "" || lat == "") { alert("请完善转换参数") throw "请完善转换参数 " } lon = Number(lon) lat = Number(lat) if (isNaN(lon) || isNaN(lat)) { alert("请输入正确的数字格式的坐标") throw "请输入正确的数字格式的坐标" } if (modValue.data.coorKey == "sh2000xyToWgs84") { getLatLng(lon, lat); } else { // 检测坐标范围 if (judge(lon, lat)) { getLatLng(lon, lat); } } } /** * 获取输入信息并跳转到指定的坐标 * @type {Function} * @private */ function judge(lng, lat) { if (!L.Util.verifyLatLng(lat, lng)) { alert('请正确输入经纬范围(经度0-180、纬度0-90)'); return false; } return true; } /** * 获取并计算经纬度 * @private */ function getLatLng(beforeLon, beforeLat) { // clearMarker(); let url = "" // if (modValue.data.coorKey == "wgsThx") url = '/wgs84ToGcj02'; // if (modValue.data.coorKey == "hxTwgs") url = '/gcj02ToWgs84'; // if (modValue.data.coorKey == "wgsTbd") url = '/wgs84ToBD09'; // if (modValue.data.coorKey == "bdTwgs") url = '/bd09ToWgs84'; // if (modValue.data.coorKey == "wgsTsh2000") url = '/wgs84ToSh2000'; // if (modValue.data.coorKey == "sh2000Twgs") url = '/sh2000ToWgs84'; let paramData = {} if (modValue.data.coorKey == "sh2000xyToWgs84") { paramData = { x: beforeLon, y: beforeLat, } } else { paramData = { lon: beforeLon, lat: beforeLat, } } $.ajax({ type: "get", dataType: 'json', url: onemapUrlConfig.PROXY_URL + "/" + modValue.data.coorKey, // + '?lon=' + beforeLon + '&lat=' + beforeLat, data: paramData, success: function (data) { let lon, lat; if (data.x) { lon = data.x lat = data.y } else { lon = data.lon lat = data.lat } // modValue.beforeId = addMarker(beforeLon, beforeLat, modValue.beforeStyle, modValue.data.beforeLabel) // modValue.afterId = addMarker(lon, lat, modValue.afterStyle, modValue.data.afterLabel) $("#coorTransformForm .outputCoor").text(lon + ', ' + lat) // map3DViewer.setView({ // center: { // lng: lon, // lat: lat // }, // distance: 40, // heading: 0,//摄像机平面角度 正北为0 // tilt: 0//摄像机倾斜角 // }); }, error: function (error) { console.log(error) } }); return; }; function addMarker(lon, lat, style, text) { let entity = map3DViewer.map.entities.add({ name: '添加点', position: Cesium.Cartesian3.fromDegrees(lon, lat, 0), point: { color: Cesium.Color.fromCssColorString(style.color), //颜色 pixelSize: 10, //大小 outlineColor: Cesium.Color.YELLOW, //轮廓颜色 outlineWidth: 1 }, label: { pixelOffset: new Cesium.Cartesian2(0, style.labelOffset), text: text, font: '24px', fillColor: Cesium.Color.fromCssColorString(style.color)//Cesium.Color.fromCssColorString(style.fontFillColor) } }) return entity._id; } /** * 清除marker * @return {[type]} [description] */ function clearMarker() { if (modValue.beforeId) { map3DViewer.map.entities.removeById(modValue.beforeId) modValue.beforeId = "" } if (modValue.afterId) { map3DViewer.map.entities.removeById(modValue.afterId) modValue.afterId = "" } } return ONEMAP.M.coorTransformForm = { open: open, clearMarker: clearMarker }; })