谷歌相关功能

  1 var map = null;
  2 var MAP_CENTER_LAT = 51.518345;
  3 var MAP_CENTER_LNG = 8.4208345;
  4 var StationMarkerArr = new Array();
  5 var OrderMarkerArr = new Array();
  6 
  7 var service;
  8 var directionsDisplayArray =new Array() ;
  9 var directionsDisplay ;
 10 var table1 ;
 11 var staffTable = null;
 12 
 13 var staionMarker=new Object();
 14 var staffMarkers=new Array();
 15 var staffMarkerStaffs = new Array();
 16 
 17 
 18 var stationPostion;
 19 
 20 $(function() {
 21     // 初始化地图
 22     try{
 23         var defaultZoom = 10;
 24         var mapProp = {
 25             center : new google.maps.LatLng(MAP_CENTER_LAT, MAP_CENTER_LNG),
 26             zoom : defaultZoom,
 27             mapTypeId : google.maps.MapTypeId.ROADMAP
 28         };
 29         map = new google.maps.Map(document.getElementById("wfm_gmap"), mapProp);
 30         
 31         directionsDisplay = new google.maps.DirectionsRenderer({ 'draggable': true ,suppressInfoWindows:true,suppressMarkers:true});
 32         
 33         google.maps.event.addListener(map, 'zoom_changed', function () {
 34             if (map.getZoom() > defaultZoom){
 35                 map.setZoom(defaultZoom);
 36             }
 37         });
 38     }catch(err){
 39         alert("google map initialize failed: <br>"+err);
 40     }
 41     
 42     table1 =  $('#example').DataTable({
 43         "bPaginate": true, //翻页功能
 44         "bLengthChange": true, //改变每页显示数据数量
 45         "bSort": false, //排序功能
 46         "bInfo": true,//页脚信息
 47         "autoWidth": false,
 48         "sScrollY":"450px",
 49         "sScrollX": "100%",
 50         "aoColumns": [
 51             {"mData": "ROW_SEQ","sTitle":"SEQ"},
 52               {"mData": "WORK_ITEM","sTitle":"workitem"},
 53               {"mData": "ORD_NO","sTitle":"ord_no"},
 54               {"mData": "TASK_TITLE","sTitle":"task_title","defaultContent":""},
 55               {"mData": "WORKORDER_NO","sTitle":"WORKORDER_NO","defaultContent":""},
 56               {"mData": "STATION_ID","sTitle":"STATION_ID","defaultContent":""},
 57               {"mData": "NE_ID","sTitle":"NE_ID","defaultContent":""}
 58         ],
 59         "bProcessing": true,
 60         "paging": true,
 61         "searching": true,
 62           "ordering": true,
 63           "bScrollInfinite": true,
 64           "bScrollCollapse": true,
 65           "renderer": "bootstrap",
 66           "deferRender": true,
 67           "showRowNumber": true,
 68           "pagingType": "simple",
 69           "aLengthMenu": [50,100,150],
 70           "sAjaxSource": ctx+"/gisDispatch/searchWorkOrder.do",
 71           "fnServerData": function ( sSource, aoData, fnCallback ) {
 72           $.ajax( {
 73               "dataType": 'json',
 74               "type": "POST",
 75               "url": sSource,
 76               "data": aoData,
 77               "success": function(data){
 78                   var aaData = data;
 79                   initMapData(data);
 80                   fnCallback(aaData);
 81               }
 82           });
 83        }
 84     });
 85     
 86     staffTable = $('#example2').DataTable({
 87         "bSort": false, //排序功能
 88         "bInfo": false,//页脚信息
 89         "paging": false,
 90         "autoWidth": false,
 91         "sScrollY":"450px",
 92         "sScrollX": "100%",
 93         "aoColumns": [
 94             {"mData": "ROW_SEQ","sTitle":"SEQ"},
 95               {"mData": "STAFF_NAME","sTitle":"STAFFNAME"},
 96               {"mData": "DISTANCE","sTitle":"DISTANCES"},
 97               {"mData": "ORD_NUM","sTitle":"ORDER_NUMBER"},
 98               {"mData": "STAFF_ID","sTitle":"STAFF_ID","visible":false}
 99               
100         ],
101         "searching": false,
102           "ordering": true,
103           "bScrollCollapse": true,
104           "renderer": "bootstrap",
105           "deferRender": true,
106           "sAjaxSource": ctx+"/gisDispatch/searchTeamStaff.do",
107           "fnServerData": function ( sSource, aoData, fnCallback ) {
108               var paramData = table1.row().data();
109               if(!paramData){
110                   return;
111               }
112               aoData.push({name:"NE_ID",value:paramData.NE_ID});
113               aoData.push({name:"LATITUDE",value:paramData.LATITUDE});
114               aoData.push({name:"LONGITUDE",value:paramData.LONGITUDE});
115               $.ajax( {
116                   "dataType": 'json',
117                   "type": "POST",
118                   "url": sSource,
119                   "data": aoData,
120                   "success": function(data){
121                       
122                       if(!!staionMarker.marker){
123                           staionMarker.marker.setMap(null);
124                       }
125                       if(!!staionMarker.markerlabel){
126                           staionMarker.markerlabel.clear();
127                       }
128                       staionMarker = new Object();
129                       
130                       func_cleanMarkers(staffMarkers);
131                       staffMarkers = new Array();
132                       
133                       var markerPos = new google.maps.LatLng(StationMarkerArr[paramData.STATION_ID].lati, StationMarkerArr[paramData.STATION_ID].lngi);
134                       stationPostion = markerPos;
135                       var marker = new google.maps.Marker({
136                           position : markerPos,
137                           animation : google.maps.Animation.DROP,
138                           draggable : false,
139                           cursor : 'hand',
140                           title:paramData.WORKORDER_NO,
141                           icon:ctx+'/google/cabin.png'
142                       });
143                       
144                       staionMarker.marker=marker;
145                       staionMarker.markerlabel = new MarkerLable(marker.position, marker.title, map);
146                       staionMarker.marker.setMap(map);
147                       staionMarker.markerlabel.show();
148                       var bounds = new google.maps.LatLngBounds();
149                       bounds.extend(markerPos);
150                       map.panToBounds(bounds);
151                       map.setCenter(markerPos);
152                       
153                       for(var i in data.aaData){
154                           var staffmarkerPos = new google.maps.LatLng(data.aaData[i].LATITUDE,data.aaData[i].LONGITUDE);
155                           var staffmarkId = data.aaData[i].STAFF_ID;
156                           var staffmarker = new google.maps.Marker({
157                               position : staffmarkerPos,
158                               animation : google.maps.Animation.DROP,
159                               draggable : false,
160                               cursor : 'hand',
161                               title:data.aaData[i].STAFF_NAME,
162                               icon:ctx+'/google/normal-staff.png',
163                               
164                           });
165                           var sm = new Object();
166                           sm.marker=staffmarker;
167                           sm.markerlabel = new MarkerLable(staffmarker.position, staffmarker.title, map);
168                           sm.marker.setMap(map);
169                           sm.markerlabel.show();
170                           //重新添加标记就将分派按钮置为不可用
171                           disabledAssginBtn();
172                           (function (staffmarker,markerlable,staffmarkId) {
173                               google.maps.event.addListener(staffmarker, 'click', function() {
174                                   //将分派按钮置为可用
175                                   undisabledAssginBtn();
176                                   //规划路线图
177                                   getRoute(staffmarker.position,marker.position,map);
178                                   //得到详情
179                                   getDetailsRoutes(staffmarker.position,marker.position,map);
180                                   //显示对话框
181                                   $('#siteinfo_modal').modal('show');
182                                   //改变颜色 变红
183                                   markerlable.changeColor('red');
184                                   //把其他颜色改为蓝色
185                                   changeColorBlue(staffMarkers,staffmarker);
186                                   //表格联动
187                                   changeTableSelect(staffmarkId);
188                               });
189                           })(sm.marker,sm.markerlabel,staffmarkId);
190                           
191                           staffMarkerStaffs[data.aaData[i].STAFF_ID]=sm;
192                           staffMarkers.push(sm);
193                           var bounds = new google.maps.LatLngBounds();
194                           bounds.extend(staffmarkerPos);
195                           map.panToBounds(bounds);
196                       }
197                       fnCallback(data);
198                   }
199               });
200        }
201     });
202     
203     $('#example tbody').on('mousedown', 'tr', function (e) {
204         if(3 == e.which){
205           if ( $(this).hasClass('selected') ) {
206           }else {
207             table1.$('tr.selected').removeClass('selected');
208             $(this).addClass('selected');
209           }
210         }else if(1 == e.which){
211           if ( $(this).hasClass('selected') ) {
212           } else {
213             table1.$('tr.selected').removeClass('selected');
214             $(this).addClass('selected');
215           }
216         }
217     });
218     
219     
220     //staffTable的选中改变颜色
221     $('#example2 tbody').on('mousedown', 'tr', function (e) {
222         if(3 == e.which){
223           if ( $(this).hasClass('selected') ) {
224           }else {
225               staffTable.$('tr.selected').removeClass('selected');
226               $(this).addClass('selected');
227           }
228         }else if(1 == e.which){
229           if ( $(this).hasClass('selected') ) {
230           } else {
231               staffTable.$('tr.selected').removeClass('selected');
232               $(this).addClass('selected');
233           }
234         }
235     });
236     
237     //表格和图标联动
238     function changeTableSelect(staffId){
239         var data = $('#example2').DataTable().rows().nodes();
240         var data2 = $('#example2').DataTable().rows().data();
241         $(data).each(function(index,item){
242             if(data2[index].STAFF_ID==staffId){
243                 $(item).addClass('selected');
244             }else{
245                 $(item).removeClass('selected');
246             }
247           });
248     }
249     
250     //工单表点击事件
251     $('#example tbody').on('dblclick', 'tr', function(e){
252         var obj = table1.row($(this)).data();
253         loadStaffTable();
254         //清除原来规划的路径
255         clearRoute();
256     });
257     
258     //staffTable点击事件
259     $('#example2 tbody').on('click', 'tr', function(e){
260         var objstaff = staffTable.row($(this)).data();
261         var staffPostion = new google.maps.LatLng(objstaff.LATITUDE, objstaff.LONGITUDE);
262         var staffId = objstaff.STAFF_ID;
263         getRoute(staffPostion,stationPostion,map);
264         getDetailsRoutes(staffPostion,stationPostion,map);
265         $('#siteinfo_modal').modal('show');
266         staffMarkerStaffs[staffId].markerlabel.changeColor('red');
267         changeColorBlue(staffMarkers,staffMarkerStaffs[staffId].marker);
268     });
269     
270     
271     $("#tbar_btn_stationscan").click(function() {
272         stationScan();
273     });
274     
275     var mapdiv = document.getElementById("wfm_gmap");
276     mapdiv.style.height = (screen.availHeight - 300) + "px";
277 });
278 
279 function initMapData(data){
280     var aaData = data.aaData;
281     StationMarkerArr = new Array();
282     for(var i=0;i<aaData.length;i++){
283         if(!StationMarkerArr[aaData[i].STATION_ID]){
284             StationMarkerArr[aaData[i].STATION_ID] = new Array();
285             StationMarkerArr[aaData[i].STATION_ID].name = aaData[i].STATION_NAME;
286             StationMarkerArr[aaData[i].STATION_ID].id = aaData[i].STATION_ID;
287             StationMarkerArr[aaData[i].STATION_ID].lati = aaData[i].LATITUDE;
288             StationMarkerArr[aaData[i].STATION_ID].lngi = aaData[i].LONGITUDE;
289             StationMarkerArr[aaData[i].STATION_ID].orderArr = new Array(); 
290         }
291         StationMarkerArr[aaData[i].STATION_ID].orderArr[aaData[i].WORKORDER_NO] = aaData[i];
292     }
293 }
294 
295 function showMarkers(){
296     
297 }
298 var stationMarkers=[];
299 // 站点查看
300 function stationScan() {
301     // first clear old markers 
302     func_cleanMarkers();
303     stationMarkers=[];
304     var marker = null;
305     var infoWindow = new google.maps.InfoWindow(); 
306     for ( var i in StationMarkerArr) {
307         var markerPos = new google.maps.LatLng(StationMarkerArr[i].lati, StationMarkerArr[i].lngi);
308         
309         var length = StationMarkerArr[i].orderArr.length;
310         var iconpath = '<%=path%>/google/cabin.png';
311         if(length > 0){
312             if(length <= 10){
313                 iconpath = '<%=path%>/plugins/google-map/img/m1.png';
314             } else if(length > 10 && length <= 50){
315                 iconpath = '<%=path%>/plugins/google-map/img/m2.png';
316             } else if(length > 50 && length <= 100){
317                 iconpath = '<%=path%>/plugins/google-map/img/m3.png';
318             } else if(length > 100 && length <= 200){
319                 iconpath = '<%=path%>/plugins/google-map/img/m4.png';
320             } else {
321                 iconpath = '<%=path%>/plugins/google-map/img/m5.png';
322             }
323         }
324         
325         marker = new google.maps.Marker({
326             position : markerPos,
327             animation : google.maps.Animation.DROP,
328             draggable : false,
329             cursor : 'hand',
330             _id:i,
331             title:StationMarkerArr[i].name,
332             icon:iconpath,
333             ordernum:length
334         });
335         stationMarkers[i] = new Array();
336         stationMarkers[i].marker=marker;
337         stationMarkers[i].markerlable=new MarkerLable(marker.position, marker.title, map);
338         marker.setMap(map);
339         stationMarkers[i].markerlable.show();
340         
341         (function (marker) {  
342             google.maps.event.addListener(marker, "click", function (e) {  
343                 infoWindow.setContent("<div style = '200px;min-height:40px'> has" + marker.ordernum+ " records </div>");
344                 infoWindow.open(map, marker); 
345             });  
346         })(marker);
347     }
348     // 调整视阈
349     setAutoZoom(map,stationMarkers);
350 }
351 
352 
353 function setAutoZoom(gmap,markers){
354     var bounds = new google.maps.LatLngBounds();
355     for ( var i in stationMarkers) {
356         bounds.extend(new google.maps.LatLng(markers[i].marker.getPosition().lat(),markers[i].marker.getPosition().lng()));
357     }
358     gmap.fitBounds(bounds);
359 }
360 
361 // 清理掉站点marker
362 function func_cleanMarkers(markers) {
363     var arrSize = markers.length;
364     for ( var i in markers) {
365         var marker = markers[i].marker;
366         if (marker && marker != null) {
367             if(!!markers[i].markerlabel){
368                 markers[i].markerlabel.clear();
369                 markers[i].markerlabel = null;
370             }
371             marker.setMap(null);
372         }
373     }
374 }
375 
376 
377 
378 function reloadWorkOrder(){
379     table1.ajax.reload();
380     table1.draw();
381 }
382 
383 
384 function loadStaffTable(){
385     staffTable.ajax.reload();
386     staffTable.draw();
387 }
388 
389 //分派按钮变灰
390 function disabledAssginBtn(){
391     $("#tbar_btn_assgin").attr("disabled",true);
392     $("#i_assgin").attr("class","fa fa-flag-o text-gray");
393 }
394 
395 //分派按钮可用
396 function undisabledAssginBtn(){
397     $("#tbar_btn_assgin").attr("disabled",false);
398     $("#i_assgin").attr("class","fa fa-flag-o text-blue");
399 }
400 
401 //得到规划路线
402 function getRoute(source,destination,map){
403     var directionsService = new google.maps.DirectionsService();
404     directionsDisplay.setMap(map);
405     var request = {
406         origin: source,
407         destination: destination,
408         travelMode: google.maps.TravelMode.DRIVING
409     };
410     directionsService.route(request, function (response, status) {
411         if (status == google.maps.DirectionsStatus.OK) {
412             directionsDisplay.setDirections(response);
413         }
414     });
415 }
416 
417 //得到规划路径的详细些信息
418 function getDetailsRoutes(source,destination,map){
419     service = new google.maps.DistanceMatrixService();
420     service.getDistanceMatrix({
421         origins: [source],
422         destinations: [destination],
423         travelMode: google.maps.TravelMode.DRIVING,
424         unitSystem: google.maps.UnitSystem.METRIC,
425         avoidHighways: false,
426         avoidTolls: false
427     }, function (response, status) {
428         if (status == google.maps.DistanceMatrixStatus.OK && response.rows[0].elements[0].status != "ZERO_RESULTS") {
429             var distance = response.rows[0].elements[0].distance.text;
430             var duration = response.rows[0].elements[0].duration.text;
431             var dvDistance = document.getElementById("siteinfo_modal_label");
432             dvDistance.innerHTML = "";
433             dvDistance.innerHTML += "Distance: " + distance + "<br />";
434             dvDistance.innerHTML += "Duration:" + duration;
435 
436         } else {
437             alert("Unable to find the distance via road.");
438         }
439     });
440     
441     
442 }
443 //把不是本mark的颜色置为蓝色
444 function changeColorBlue(staffMarkers,staffmarker){
445     for(var i =0;i<staffMarkers.length;i++){
446         if(staffMarkers[i].marker!=staffmarker){
447             staffMarkers[i].markerlabel.changeColor('blue');
448         }
449     }
450 }
451 //清除掉规划的路径
452 function clearRoute(){
453      directionsDisplay.setMap(null);
454 }
原文地址:https://www.cnblogs.com/wudi521/p/6052123.html