define(['html!templates/menu/baseCalc/addressSearch', 'css!styles/tools/toolPublicPopup', 'css!styles/menu/baseCalc/addressSearch', ], function (tplLayout) { /** * 模块状态,用于存储模块的状态 例如:收起,关闭 * @type {Object} */ var status = { initialized: false//是否初始化 }; /** * 模块数据 用于数据存储和外部调用 * @type {Object} * 数据存放 */ var modValue = { data: {}, addressId: "", pointStyle: { color: "#2ecc71", fontFillColor: "#fff000", labelOffset: -15, } }; /** * 初始化并订阅事件 * @return {[type]} [description] */ function open(data) { if (!status.initialized) { setLayout(); bindEvent(); subscribe(); status.initialized = true; } else { // 重置 reset(); } modValue.data = data; $("#addressSearchModal .title").text(data.label); ONEMAP.C.publisher.publish({ modName: 'addressSearch' }, 'baseCalc:active'); }; function setLayout() { $('body').append(tplLayout); //拖拽 $("#addressSearchModal .popup-ct").dragmove($('#addressSearchModal')); }; /** * 事件绑定 */ function bindEvent() { $("#addressSearchModal .close").bind('click', function () { close(); }); $("#addressSearchModal .btn-default.sure").bind('click', function () { execute() }); //回车执行 $('#addressSearchInput, #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 != 'addressSearch') { close(); } else { $("#addressSearchModal").show(); } } function reset() { $("#addressSearchForm .address").val(""); $("#addressSearchForm .outputResult").text("") clearMarker(); } function close() { $("#addressSearchModal").hide(); reset(); } // 执行 function execute() { let text = $("#addressSearchForm .address").val(); getLatLng(text); } /** * 获取并计算经纬度 * @private */ function getLatLng(text) { clearMarker(); $.ajax({ type: "get", dataType: 'json', url: onemapUrlConfig.PROXY_URL + "/searchByName", data: { address: text, proxyToken: localStorage.getItem("systemToken"), }, success: function (data) { if (data.code == 200) { let lon, lat; data.content.streetNumber.location.split(",").map(function (item, index) { if (index == 0) lon = item; if (index == 1) lat = item; }) modValue.addressId = addMarker(lon, lat, modValue.pointStyle, text) // $("#addressSearchForm .outputResult").text() setOutputResult(data.content); map3DViewer.setView({ center: { lng: Number(lon), lat: Number(lat) }, distance: 40, heading: 0,//摄像机平面角度 正北为0 tilt: 0//摄像机倾斜角 }); } }, error: function (error) { console.log(error) } }); return; }; function setOutputResult(data) { $("#addressSearchForm .outputResult").empty() let html = ""; html += "国家:" + data.country + "" html += "省份:" + data.province + "" html += "区:" + data.district + "" html += "所属街镇:" + data.villageSimple.town + "" html += "所属社区:" + data.villageSimple.village + "" html += "所属公路:" + data.streetNumber.street + "" html += "门牌号:" + data.streetNumber.number + "" html += "经纬度:" + data.streetNumber.location + "" $("#addressSearchForm .outputResult").append(html); } 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) } }) return entity._id; } /** * 清除marker * @return {[type]} [description] */ function clearMarker() { if (modValue.addressId) { map3DViewer.map.entities.removeById(modValue.addressId) modValue.addressId = "" } } return ONEMAP.M.addressSearchForm = { open: open, clearMarker: clearMarker }; })