【GIS】Cesium绘制轨迹线
1、代码
<!DOCTYPE html> <html lang="en"> <head> <script> </script> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <title>流线</title> <!-- 定义变量--> <script type="text/javascript"> </script> <script type="text/javascript" src="../js/lib/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="../js/lib/echarts/echarts.js"></script> <!-- 三维 --> <link href="../js/lib/supermap/Build/Cesium/Widgets/widgets.css" rel="stylesheet"> <link href="../js/lib/supermap/css/pretty.css" rel="stylesheet"> <link href="../js/lib/supermap/css/info-window.css" rel="stylesheet"> <link href="../js/lib/layer/theme/default/layer.css" rel="stylesheet" /> <link href="../js/lib/layer/theme/retina/retina.css" rel="stylesheet" /> <link href="../js/lib/layer/theme/mars/layer.css" rel="stylesheet" /> <script src="../js/lib/layer/layer.js"></script> <style> html, body, #cesiumContainer { width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden; } #menu { position: absolute; top: 80px; left: 10px; z-index: 999; } /**隐藏超图logo*/ .cesium-credit-image, .cesium-credit-expand-link { display: none !important; } .cesium-widget-credits { display: none !important; } </style> </head> <body> <!-- 三维场景--> <div id="cesiumContainer" style="width: 100%; height: 100%;"></div> <script type="text/javascript" src="../js/lib/supermap10/examples/js/supermap/SuperMap-7.1-11828.js"></script> <script type="text/javascript" src="../js/lib/supermap10/examples/js/Convert.js"></script> <script type="text/javascript" src="../js/lib/supermap10/examples/js/require.min.js" data-main="../js/lib/supermap10/examples/js/main.js"></script> <script type="text/javascript" src="../js/lib/supermap10/examples/js/config.js"></script> <script type="text/javascript" src="../js/lib/supermap10/examples/js/traffic.js"></script> <script type="text/javascript" src="../js/lib/supermap10/examples/js/curve.js"></script> <!-- <script type="text/javascript" src="../js/lib/supermap10/build/Cesium/Cesium.js"></script> --> <script src="../js/lib/cesiumplugins/ImageryProvider-WebExtend.js"></script> <script src="../js/gis/gps.js"></script> <script> function loadDynamicLine() { $.getJSON('../data/XXX.json', function(rs) { var animationObj = { stepsRange: { start: 0, end: 50 }, trails: 20, duration: 175 }; var _range = animationObj.stepsRange.end - animationObj.stepsRange.start; var entityArray = []; var curLineArray = []; var linecolor = new Cesium.Color(53 / 255, 57 / 255, 255 / 255, 0.8); // 线颜色 var outline = new Cesium.Color(65 / 255, 105 / 255, 225 / 255, 0.8); // 线框颜色 var color = new Cesium.Color(255 / 255, 250 / 255, 250 / 255, 0.2); // 点颜色 var maxLength = 0; var proj = new Cesium.WebMercatorProjection(); var fRatio = 180 / Math.PI; var height = 0; for (var i = 0; i < rs.features.length; i++) { var item = rs.features[i].geometry.coordinates; if (item.length > maxLength) { maxLength = item.length; } var linePos = []; for (j = 0; j < item.length; j++) { var cartographic = Cesium.Cartographic.fromDegrees(item[j][0], item[j][1], 0); var lat = cartographic.latitude * fRatio; var lon = cartographic.longitude * fRatio; var posReal = {}; linePos.push(posReal.lon); linePos.push(posReal.lat); linePos.push(height); var entity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(posReal.lon, posReal.lat, height), nameID: j, billboard: { image: '../img/gis/car.png', width: 5, height: 5, color: color } }); entity.isAvailable = function(obj) { return function(currentTime) { if (!Cesium.defined(currentTime)) { throw new Cesium.DeveloperError('time is required.'); } var nMS = Cesium.JulianDate.toDate(currentTime).getTime() / animationObj.duration; var time = (nMS % _range + animationObj.stepsRange.start); var trails = trails || 10; if (time && obj.nameID > time - trails && obj.nameID < time) { obj.billboard.color._value.alpha = 0.8 * (obj.nameID - time + trails) / trails; return true; } else { return false; } } }(entity); entityArray.push(entity); } curLineArray[i] = viewer.entities.add({ polyline: { positions: Cesium.Cartesian3.fromDegreesArrayHeights(linePos), width: 2, material: new Cesium.PolylineOutlineMaterialProperty({ color: linecolor, outlineWidth: 0.1, outlineColor: outline }) } }); } }) } </script> <script desc="页面加载"> var lat = XX; var lon = YY; var viewer = null; var scene = null; var widget = null; var camera = null; function onload() { var GoogleMap = ImageryProviderWebExtendTool.createGoogleMapsByUrl(Cesium, { url: "http://mt1.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}" }); viewer = new Cesium.Viewer('cesiumContainer', { imageryProvider: GoogleMap, selectionIndicator: true, animation: false, baseLayerPicker: false, geocoder: false, timeline: false, sceneModePicker: true, navigationHelpButton: false, infoBox: true, fullscreenButton: true }); // 三维图形对象和状态的容器 scene = viewer.scene; viewer.scene.fxaa = false; widget = viewer.cesiumWidget; // 相机类 camera = scene.camera; //关闭深度检测 scene.globe.depthTestAgainstTerrain = false; //取消双击事件 viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK); //设置homebutton的位置 Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(lon - 1, lat - 1, lon + 1, lat + 1); //Rectangle(west, south, east, north) //设置初始位置 viewer.camera.setView({ destination: Cesium.Cartesian3.fromDegrees(lon, lat, 10000) }); viewer.imageryLayers.get(0).brightness = 0.4; loadDynamicLine(); } </script> </html>
2、效果
博客地址: http://www.cnblogs.com/defineconst/
博客版权: 本文以学习、研究和分享为主,欢迎转载和各类爬虫,但必须在文章页面明显位置给出原文链接。 如果文中有不妥或者错误的地方还望高手的您指出,以免误人子弟。如果您有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。
博客版权: 本文以学习、研究和分享为主,欢迎转载和各类爬虫,但必须在文章页面明显位置给出原文链接。 如果文中有不妥或者错误的地方还望高手的您指出,以免误人子弟。如果您有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。