gcmsMapMarker.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /**
  2. * [ONEMAP.M.gcmsMapMarker]
  3. * @return {[object]}
  4. */
  5. define(
  6. function(){
  7. //参数
  8. var modValue = {
  9. options:{},
  10. markersGroup:null,
  11. markers:{},
  12. };
  13. //地图层
  14. //var _map = ONEMAP.M.mapHolder.map;
  15. /**
  16. * 模块初始化
  17. * @return {[type]} [description]
  18. */
  19. function init(options){
  20. remove();
  21. modValue.options = {};
  22. modValue.markers = {};
  23. for(var op in options){
  24. modValue.options[op] = options[op];
  25. }
  26. //注册监听
  27. subscribe();
  28. //是否聚合
  29. if(ONEMAP.D.gcmsCurColumnModelData['field_list'][options['field_name']]['marker_cluster']){
  30. modValue.markersGroup = map23DControl.group({
  31. action: 'add',
  32. clustering: true, //关键 开启聚合
  33. clusterOptions:{
  34. maxClusterRadius:120,//多少像素距离的点会聚合 默认小于120像素内的点会聚合
  35. polygonOptions: {weight: 1, opacity: 0.5}, //聚合范围面样式
  36. showCoverageOnHover: true, //是否显示聚合范围
  37. disableClusteringAtZoom: null, //设置到达指定缩放等级后禁用聚合
  38. }//2D聚合参数
  39. })
  40. }else {
  41. modValue.markersGroup = map23DControl.group({
  42. action: 'add'
  43. })
  44. }
  45. //modValue.markersGroup.addTo(_map);
  46. //获取内容数据
  47. getDetailData({callback:function(){
  48. showMarker();
  49. }});
  50. }
  51. function getDetailData(options){
  52. ONEMAP.V.loading.load();
  53. $.ajax({
  54. url: onemapUrlConfig.gcmsServiceUrl+'/show/'+modValue.options['column_name']+'/'+modValue.options['article_id'],
  55. type:"GET",
  56. dataType: 'json'
  57. })
  58. .done(function(data) {
  59. ONEMAP.V.loading.loaded();
  60. if(data.code == 4){
  61. ONEMAP.C.noPermission('getDetailData');
  62. return false;
  63. }
  64. if(data.code == 3){
  65. ONEMAP.C.logout('getDetailData');
  66. }
  67. ONEMAP.D.gcmsCurArticleData = data['data'];
  68. options.callback();
  69. })
  70. .fail(function() {
  71. ONEMAP.V.loading.loaded();
  72. });
  73. }
  74. /**
  75. * 坐标反转
  76. * @param {[type]} latlngsAry [description]
  77. * @return {[type]} [description]
  78. */
  79. function latLngsToReverse(latlngsAry){
  80. var tempLatlngsAry = JSON.parse(JSON.stringify(latlngsAry));
  81. if(!$.isArray(tempLatlngsAry[0])){
  82. return tempLatlngsAry.reverse();
  83. }else {
  84. $(tempLatlngsAry).each(function(index, el) {
  85. tempLatlngsAry[index] = latLngsToReverse(el);
  86. });
  87. }
  88. return tempLatlngsAry;
  89. };
  90. function showMarker(){
  91. var mapMarkerData = JSON.parse(ONEMAP.D.gcmsCurArticleData['record'][modValue.options['field_name']]);
  92. if(mapMarkerData['features'].length>0){
  93. var marker;
  94. $(mapMarkerData['features']).each(function(index, el) {
  95. marker = map2DViewer.markers[buildMarker(el)];
  96. });
  97. if(mapMarkerData['features'].length == 1){
  98. map23DControl.setView({
  99. center: {
  100. lat: marker.getLatLng().lat,
  101. lng: marker.getLatLng().lng
  102. },
  103. zoom: map23DData.view.zoom
  104. })
  105. marker.openPopup();
  106. }else {
  107. if(map23DData.display.map2D){
  108. map2DViewer.fitBounds(map2DViewer.groups[modValue.markersGroup].getBounds());
  109. }
  110. }
  111. }else {
  112. ONEMAP.C.publisher.publish({ type: 'warning', message: '没有地图标记数据' }, 'noteBar::add');
  113. }
  114. }
  115. function buildMarker(options){
  116. var markerId = map23DControl.marker({
  117. action:'add',
  118. groupId:modValue.markersGroup,
  119. geojson:{
  120. "type": "Feature",
  121. "properties": {
  122. iconUrl: onemapUrlConfig.gcmsServiceUrl+'/file'+options['properties']['style']['iconUrl']+'?jwt='+ONEMAP.D.user.ticket || "",
  123. iconSize: options['properties']['style']['iconSize'],
  124. iconAnchor: options['properties']['style']['iconAnchor'],
  125. popupAnchor: [0,-options['properties']['style']['iconAnchor'][1]],
  126. altitude:0,
  127. altitudeMode:1,
  128. },
  129. "geometry": {
  130. "type": "Point",
  131. "coordinates": options['geometry']['coordinates']
  132. }
  133. }
  134. })
  135. var options_popup = {
  136. name:options['properties']['name'],
  137. content:options['properties']['popupContent']
  138. };
  139. var new_popupHtml = ONEMAP.M.gcmsNav.creatPopupHtml(options_popup);
  140. map2DViewer.markers[markerId].bindPopup(new_popupHtml,{title:options['properties']['name']});
  141. modValue.markers[markerId] = map2DViewer.markers[markerId];
  142. return markerId;
  143. }
  144. /**
  145. * 注册监听
  146. * @type {Function}
  147. */
  148. function subscribe(){
  149. ONEMAP.C.publisher.subscribe(remove,'gcmsArticleShowRemove');
  150. ONEMAP.C.publisher.subscribe(remove, 'cleanMap');
  151. }
  152. /**
  153. * 取消监听
  154. * @type {Function}
  155. */
  156. function unSubscribe() {
  157. ONEMAP.C.publisher.unSubscribe(remove,'gcmsArticleShowRemove');
  158. ONEMAP.C.publisher.unSubscribe(remove, 'cleanMap');
  159. ONEMAP.C.publisher.subscribe(GroupControl, 'gcmsGroupControl');
  160. }
  161. function GroupControl(type) {
  162. if (type == "show") {
  163. map23DControl.group({
  164. action: 'show',
  165. guid: modValue.markersGroup
  166. })
  167. map23DControl.group({
  168. action: 'show',
  169. guid: modValue.markersGroup
  170. })
  171. } else if (type == "hide") {
  172. map23DControl.group({
  173. action: 'hide',
  174. guid: modValue.markersGroup
  175. })
  176. map23DControl.group({
  177. action: 'hide',
  178. guid: modValue.markersGroup
  179. })
  180. }
  181. }
  182. /**
  183. * 模块移除
  184. * @return {[type]} [description]
  185. */
  186. function remove(){
  187. map23DControl.group({
  188. action:'cleanAll',
  189. guid:modValue.markersGroup
  190. });
  191. map23DControl.group({
  192. action:'remove',
  193. guid:modValue.markersGroup
  194. })
  195. unSubscribe();
  196. }
  197. return ONEMAP.M.gcmsMapMarker = {
  198. init:init,
  199. remove:remove
  200. }
  201. });