|
59 | 59 | </form>
|
60 | 60 | <div id="log" class="log">
|
61 | 61 | </div>
|
| 62 | + <div id="lineGroupControl"></div> |
62 | 63 | </div>
|
63 | 64 | <div class="container" id="baiduMapCtn"></div>
|
64 | 65 | <script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=XwGhtOZnTOQk7lFssFiI1GR3"></script>
|
|
224 | 225 | var $searchButton = $('searchButton');
|
225 | 226 | var $searchForm = $('searchForm');
|
226 | 227 | var $log = $('log');
|
| 228 | + var $lineGroupControl = $('lineGroupControl'); |
227 | 229 | $searchForm.onsubmit = function(e){
|
228 | 230 | e.preventDefault();
|
229 | 231 | }
|
|
252 | 254 | }
|
253 | 255 | var splitedPoints = convertPoints(res.data.datastreams[0].datapoints);
|
254 | 256 | $log.innerHTML = '当前第1页,本次共渲染' + splitedPoints.count + '个点';
|
255 |
| - pageControl.baiduMap.resetMarker(splitedPoints); |
| 257 | + pageControl.renderLineGroup(splitedPoints); |
256 | 258 | _this.pointsCache[1] = splitedPoints;
|
257 | 259 | });
|
258 | 260 | }
|
|
264 | 266 | }
|
265 | 267 | var splitedPoints = this.pointsCache[cursor];
|
266 | 268 | if(splitedPoints){
|
267 |
| - pageControl.baiduMap.resetMarker(splitedPoints); |
| 269 | + pageControl.renderLineGroup(splitedPoints); |
268 | 270 | $log.innerHTML = '当前第' + (pageIndex + 1) + '页,本次共渲染' + splitedPoints.count + '个点';
|
269 | 271 | return;
|
270 | 272 | }
|
|
275 | 277 | }
|
276 | 278 | //var pointsTimeGroup = splitDatapointsByTime(res.data.datastreams[0].datapoints);
|
277 | 279 | var splitedPoints = convertPoints(res.data.datastreams[0].datapoints);
|
278 |
| - pageControl.baiduMap.resetMarker(splitedPoints); |
| 280 | + pageControl.renderLineGroup(splitedPoints); |
279 | 281 | _this.pointsCache[cursor] = splitedPoints;
|
280 | 282 | $log.innerHTML = '当前第' + (pageIndex + 1) + '页,本次共渲染' + splitedPoints.count + '个点';
|
281 | 283 | });
|
|
336 | 338 | $nextPageButton.onclick = function(){
|
337 | 339 | _this.carMarker.renderNextPage();
|
338 | 340 | }
|
| 341 | + $lineGroupControl.onclick = function(e){ |
| 342 | + //console.log(e,e.target.nodeName,e.target.checked,e.target.getAttribute('data-index')); |
| 343 | + var target = e.target; |
| 344 | + var currentLineGroup; |
| 345 | + if(target.nodeName.toUpperCase() == 'INPUT'){ |
| 346 | + var index = parseInt(target.getAttribute('data-index')); |
| 347 | + var showCurrent = target.checked; |
| 348 | + currentLineGroup = _this.lineGroupArr[index]; |
| 349 | + currentLineGroup[showCurrent ? 'show' : 'hide'](); |
| 350 | + } |
| 351 | + } |
339 | 352 | },
|
340 | 353 | initTimeRound: function(date){
|
341 | 354 | var dateNow = new Date(date);
|
|
350 | 363 | // 创建点坐标
|
351 | 364 | map.centerAndZoom(point, 15);
|
352 | 365 | // 初始化地图,设置中心点坐标和地图级别
|
353 |
| - var marker = new BMap.Marker(point); // 创建点 |
354 | 366 | map.enableScrollWheelZoom(true);
|
355 |
| - map.addOverlay(marker); |
356 |
| - this.marker = marker; |
357 | 367 | this.map = map;
|
358 |
| - }, |
359 |
| - generateMarker: function(point){ |
360 |
| - // 初始化地图,设置中心点坐标和地图级别 |
361 |
| - var marker = new BMap.Marker(point); // 创建点 |
362 |
| - this.map.addOverlay(marker); |
363 |
| - return marker; |
364 |
| - }, |
365 |
| - resetMarker: function(splitedPoints){ |
366 |
| - this.map.clearOverlays(); |
367 |
| - var _this = this; |
368 |
| - var edgePoints = []; |
369 |
| - splitedPoints.forEach(pointsGroup => { |
370 |
| - edgePoints = edgePoints.concat(_this.drawGroup(pointsGroup)); |
371 |
| - }); |
372 |
| - this.map.setViewport(edgePoints); |
373 |
| - }, |
374 |
| - drawGroup: function(pointsGroup){ |
375 |
| - var _this = this; |
376 |
| - var count = 0; |
377 |
| - console.log(pointsGroup); |
378 |
| - pointsGroup.forEach(item => { |
379 |
| - count+= item.points.length; |
380 |
| - _this.drawLine(item.points, VelocityGroupColor[item.velocityGroup]); |
381 |
| - }); |
382 |
| - console.log('实际渲染',count); |
383 |
| - //加入marker |
384 |
| - var iconStart = new BMap.Icon('/resource/2019/markers_bg.png', new BMap.Size(25,40), { |
385 |
| - imageSize: new BMap.Size(50, 40), |
386 |
| - anchor: new BMap.Size(12, 40) |
387 |
| - }); |
388 |
| - var markerStart = new BMap.Marker(pointsGroup[0].points[0], {icon:iconStart}); |
389 |
| - var iconEnd = new BMap.Icon('/resource/2019/markers_bg.png', new BMap.Size(25,40), { |
390 |
| - imageOffset: new BMap.Size(-25,0), |
391 |
| - imageSize: new BMap.Size(50, 40), |
392 |
| - anchor: new BMap.Size(12, 40) |
393 |
| - }); |
394 |
| - var endPoints = pointsGroup[pointsGroup.length - 1].points; |
395 |
| - var markerEnd = new BMap.Marker(endPoints[endPoints.length - 1], {icon:iconEnd}); |
396 |
| - markerStart.setLabel(new BMap.Label(pointsGroup.startTime, {offset: new BMap.Size(-20,-20)})); |
397 |
| - markerEnd.setLabel(new BMap.Label(pointsGroup.endTime, {offset: new BMap.Size(-20,-20)})); |
398 |
| - this.map.addOverlay(markerStart); |
399 |
| - this.map.addOverlay(markerEnd); |
400 |
| - return [pointsGroup[0].points[0], endPoints[endPoints.length - 1]]; |
401 |
| - }, |
402 |
| - drawLine: function(pointsArr, color){ |
403 |
| - var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, { |
404 |
| - scale: 0.6,//图标缩放大小 |
405 |
| - strokeColor:'#fff',//设置矢量图标的线填充颜色 |
406 |
| - strokeWeight: '2',//设置线宽 |
407 |
| - }); |
408 |
| - var icons = new BMap.IconSequence(sy, '10', '30'); |
409 |
| - var polyline =new BMap.Polyline(pointsArr, { |
410 |
| - enableEditing: false,//是否启用线编辑,默认为false |
411 |
| - enableClicking: false,//是否响应点击事件,默认为true |
412 |
| - //icons:[icons], |
413 |
| - strokeWeight:'7',//折线的宽度,以像素为单位 |
414 |
| - strokeOpacity: 1,//折线的透明度,取值范围0 - 1 |
415 |
| - strokeColor: color //折线颜色 |
416 |
| - }); |
417 |
| - this.map.addOverlay(polyline); |
418 | 368 | }
|
419 |
| - } |
| 369 | + }, |
| 370 | + renderLineGroup: function(splitedPoints){ |
| 371 | + var map = this.baiduMap.map; |
| 372 | + map.clearOverlays(); |
| 373 | + var _this = this; |
| 374 | + var edgePoints = []; |
| 375 | + var lineGroupArr = []; |
| 376 | + splitedPoints.forEach(pointsGroup => { |
| 377 | + let lineGroup = new LineGroup(map, pointsGroup); |
| 378 | + edgePoints = edgePoints.concat([lineGroup.startPoint, lineGroup.endPoint]); |
| 379 | + lineGroupArr.push(lineGroup); |
| 380 | + }); |
| 381 | + map.setViewport(edgePoints); |
| 382 | + this.lineGroupArr = lineGroupArr; |
| 383 | + this.renderLineGroupController(lineGroupArr); |
| 384 | + }, |
| 385 | + renderLineGroupController: function(lineGroupArr){ |
| 386 | + var html = ''; |
| 387 | + lineGroupArr.forEach((i, index) => { |
| 388 | + html += `<label><input type="checkbox" data-index="${index}" checked />第${index + 1}段</label>`; |
| 389 | + }); |
| 390 | + $lineGroupControl.innerHTML = html; |
| 391 | + } |
420 | 392 | };
|
421 | 393 | pageControl.init();
|
422 |
| - /* new CarMarker(517341974); |
423 |
| - new CarMarker(517341975); |
424 |
| - new CarMarker(517341976); |
425 |
| - new CarMarker(517341977); |
426 |
| - new CarMarker(517341978); */ |
427 |
| -</script> |
| 394 | + function LineGroup(baiduMap, pointsGroup){ |
| 395 | + this.baiduMap = baiduMap; |
| 396 | + this.startPoint = pointsGroup[0].points[0]; |
| 397 | + var endPoints = pointsGroup[pointsGroup.length - 1].points; |
| 398 | + this.endPoint = endPoints[endPoints.length - 1]; |
| 399 | + this.overlayGroup = []; |
| 400 | + this.draw(pointsGroup); |
| 401 | + } |
| 402 | + LineGroup.prototype.draw = function(pointsGroup){ |
| 403 | + var _this = this; |
| 404 | + var count = 0; |
| 405 | + pointsGroup.forEach(item => { |
| 406 | + count += item.points.length; |
| 407 | + var polyline = _this.drawLine(item.points, VelocityGroupColor[item.velocityGroup]); |
| 408 | + this.overlayGroup.push(polyline); |
| 409 | + }); |
| 410 | + //起始点 |
| 411 | + var startIcon = new BMap.Icon('/resource/2019/markers_bg.png', new BMap.Size(25,40), { |
| 412 | + imageSize: new BMap.Size(50, 40), |
| 413 | + anchor: new BMap.Size(12, 40) |
| 414 | + }); |
| 415 | + var startMarker = new BMap.Marker(this.startPoint, {icon: startIcon}); |
| 416 | + startMarker.setLabel(new BMap.Label(pointsGroup.startTime, {offset: new BMap.Size(-20,-20)})); |
| 417 | + //结束点 |
| 418 | + var endIcon = new BMap.Icon('/resource/2019/markers_bg.png', new BMap.Size(25,40), { |
| 419 | + imageOffset: new BMap.Size(-25,0), |
| 420 | + imageSize: new BMap.Size(50, 40), |
| 421 | + anchor: new BMap.Size(12, 40) |
| 422 | + }); |
| 423 | + var endMarker = new BMap.Marker(this.endPoint, {icon: endIcon}); |
| 424 | + endMarker.setLabel(new BMap.Label(pointsGroup.endTime, {offset: new BMap.Size(-20,-20)})); |
| 425 | + this.baiduMap.addOverlay(startMarker); |
| 426 | + this.baiduMap.addOverlay(endMarker); |
| 427 | + this.overlayGroup.push(startMarker); |
| 428 | + this.overlayGroup.push(endMarker); |
| 429 | + } |
| 430 | + LineGroup.prototype.drawLine = function(pointsArr, color){ |
| 431 | + var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, { |
| 432 | + scale: 0.6,//图标缩放大小 |
| 433 | + strokeColor:'#fff',//设置矢量图标的线填充颜色 |
| 434 | + strokeWeight: '2',//设置线宽 |
| 435 | + }); |
| 436 | + var icons = new BMap.IconSequence(sy, '10', '30'); |
| 437 | + var polyline = new BMap.Polyline(pointsArr, { |
| 438 | + enableEditing: false,//是否启用线编辑,默认为false |
| 439 | + enableClicking: false,//是否响应点击事件,默认为true |
| 440 | + //icons:[icons], |
| 441 | + strokeWeight:'7',//折线的宽度,以像素为单位 |
| 442 | + strokeOpacity: 1,//折线的透明度,取值范围0 - 1 |
| 443 | + strokeColor: color //折线颜色 |
| 444 | + }); |
| 445 | + this.baiduMap.addOverlay(polyline); |
| 446 | + return polyline; |
| 447 | + } |
| 448 | + LineGroup.prototype.show = function(){ |
| 449 | + this._setVisible(1); |
| 450 | + } |
| 451 | + LineGroup.prototype.hide = function(){ |
| 452 | + this._setVisible(0); |
| 453 | + } |
| 454 | + LineGroup.prototype._setVisible = function(visible){ |
| 455 | + var map = this.baiduMap; |
| 456 | + this.overlayGroup.forEach(overlay => overlay[visible ? 'show' : 'hide']()); |
| 457 | + } |
| 458 | +</script> |
0 commit comments