addressSearch.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. define(['html!templates/menu/baseCalc/addressSearch',
  2. 'css!styles/tools/toolPublicPopup',
  3. 'css!styles/menu/baseCalc/addressSearch',
  4. ],
  5. function (tplLayout) {
  6. /**
  7. * 模块状态,用于存储模块的状态 例如:收起,关闭
  8. * @type {Object}
  9. */
  10. var status = {
  11. initialized: false//是否初始化
  12. };
  13. /**
  14. * 模块数据 用于数据存储和外部调用
  15. * @type {Object}
  16. * 数据存放
  17. */
  18. var modValue = {
  19. data: {},
  20. addressId: "",
  21. pointStyle: {
  22. color: "#2ecc71",
  23. fontFillColor: "#fff000",
  24. labelOffset: -15,
  25. }
  26. };
  27. /**
  28. * 初始化并订阅事件
  29. * @return {[type]} [description]
  30. */
  31. function open(data) {
  32. if (!status.initialized) {
  33. setLayout();
  34. bindEvent();
  35. subscribe();
  36. status.initialized = true;
  37. } else {
  38. // 重置
  39. reset();
  40. }
  41. modValue.data = data;
  42. $("#addressSearchModal .title").text(data.label);
  43. ONEMAP.C.publisher.publish({
  44. modName: 'addressSearch'
  45. }, 'baseCalc:active');
  46. };
  47. function setLayout() {
  48. $('body').append(tplLayout);
  49. //拖拽
  50. $("#addressSearchModal .popup-ct").dragmove($('#addressSearchModal'));
  51. };
  52. /**
  53. * 事件绑定
  54. */
  55. function bindEvent() {
  56. $("#addressSearchModal .close").bind('click', function () {
  57. close();
  58. });
  59. $("#addressSearchModal .btn-default.sure").bind('click', function () {
  60. execute()
  61. });
  62. //回车执行
  63. $('#addressSearchInput, #jumpToLatInput').bind('keydown', function (e) {
  64. if (e.keyCode === 13) {
  65. execute();
  66. }
  67. });
  68. };
  69. /**
  70. * 注册监听
  71. * @type {Function}
  72. */
  73. function subscribe() {
  74. ONEMAP.C.publisher.subscribe(remove, 'baseCalc:active');
  75. };
  76. /**
  77. * 关闭模块
  78. * @return {[type]} [description]
  79. */
  80. function remove(options) {
  81. if (options.modName != 'addressSearch') {
  82. close();
  83. } else {
  84. $("#addressSearchModal").show();
  85. }
  86. }
  87. function reset() {
  88. $("#addressSearchForm .address").val("");
  89. $("#addressSearchForm .outputResult").text("")
  90. clearMarker();
  91. }
  92. function close() {
  93. $("#addressSearchModal").hide();
  94. reset();
  95. }
  96. // 执行
  97. function execute() {
  98. let text = $("#addressSearchForm .address").val();
  99. getLatLng(text);
  100. }
  101. /**
  102. * 获取并计算经纬度
  103. * @private
  104. */
  105. function getLatLng(text) {
  106. clearMarker();
  107. $.ajax({
  108. type: "get",
  109. dataType: 'json',
  110. url: onemapUrlConfig.PROXY_URL + "/searchByName",
  111. data: {
  112. address: text,
  113. proxyToken: localStorage.getItem("systemToken"),
  114. },
  115. success: function (data) {
  116. if (data.code == 200) {
  117. let lon, lat;
  118. data.content.streetNumber.location.split(",").map(function (item, index) {
  119. if (index == 0) lon = item;
  120. if (index == 1) lat = item;
  121. })
  122. modValue.addressId = addMarker(lon, lat, modValue.pointStyle, text)
  123. // $("#addressSearchForm .outputResult").text()
  124. setOutputResult(data.content);
  125. map3DViewer.setView({
  126. center: {
  127. lng: Number(lon),
  128. lat: Number(lat)
  129. },
  130. distance: 40,
  131. heading: 0,//摄像机平面角度 正北为0
  132. tilt: 0//摄像机倾斜角
  133. });
  134. }
  135. },
  136. error: function (error) {
  137. console.log(error)
  138. }
  139. });
  140. return;
  141. };
  142. function setOutputResult(data) {
  143. $("#addressSearchForm .outputResult").empty()
  144. let html = "";
  145. html += "<tr><td><span>国家:</span></td><td><span>" + data.country + "</span></td></tr>"
  146. html += "<tr><td><span>省份:</span></td><td><span>" + data.province + "</span></td></tr>"
  147. html += "<tr><td><span>区:</span></td><td><span>" + data.district + "</span></td></tr>"
  148. html += "<tr><td><span>所属街镇:</span></td><td><span>" + data.villageSimple.town + "</span></td></tr>"
  149. html += "<tr><td><span>所属社区:</span></td><td><span>" + data.villageSimple.village + "</span></td></tr>"
  150. html += "<tr><td><span>所属公路:</span></td><td><span>" + data.streetNumber.street + "</span></td></tr>"
  151. html += "<tr><td><span>门牌号:</span></td><td><span>" + data.streetNumber.number + "</span></td></tr>"
  152. html += "<tr><td><span>经纬度:</span></td><td><span>" + data.streetNumber.location + "</span></td></tr>"
  153. $("#addressSearchForm .outputResult").append(html);
  154. }
  155. function addMarker(lon, lat, style, text) {
  156. let entity = map3DViewer.map.entities.add({
  157. name: '添加点',
  158. position: Cesium.Cartesian3.fromDegrees(lon, lat, 0),
  159. point: {
  160. color: Cesium.Color.fromCssColorString(style.color), //颜色
  161. pixelSize: 10, //大小
  162. outlineColor: Cesium.Color.YELLOW, //轮廓颜色
  163. outlineWidth: 1
  164. },
  165. label: {
  166. pixelOffset: new Cesium.Cartesian2(0, style.labelOffset),
  167. text: text,
  168. font: '24px',
  169. fillColor: Cesium.Color.fromCssColorString(style.color)
  170. }
  171. })
  172. return entity._id;
  173. }
  174. /**
  175. * 清除marker
  176. * @return {[type]} [description]
  177. */
  178. function clearMarker() {
  179. if (modValue.addressId) {
  180. map3DViewer.map.entities.removeById(modValue.addressId)
  181. modValue.addressId = ""
  182. }
  183. }
  184. return ONEMAP.M.addressSearchForm = {
  185. open: open,
  186. clearMarker: clearMarker
  187. };
  188. })