赞
踩
1.扩展类PolylineTrailMaterialProperty (Cesium 1.67-1.68)
创建PolylineTrailMaterialProperty .js文件
- import * as Cesium from "cesium";
- export class PolylineTrailMaterialProperty {
- constructor(options) {
- options = Cesium.defaultValue(options, Cesium.defaultValue.EMPTY_OBJECT);
-
- this._definitionChanged = new Cesium.Event();
-
- this._color = undefined;
-
- this._colorSubscription = undefined;
-
- this.color = options.color;
-
- this.duration = options.duration;
-
- this.trailImage = options.trailImage;
-
- this._time = performance.now();
- }
- }
-
- Object.defineProperties(PolylineTrailMaterialProperty.prototype, {
- isConstant: {
- get: function () {
- return false;
- },
- },
-
- definitionChanged: {
- get: function () {
- return this._definitionChanged;
- },
- },
-
- color: Cesium.createPropertyDescriptor("color"),
- });
-
- PolylineTrailMaterialProperty.prototype.getType = function (time) {
- return "PolylineTrail";
- };
-
- PolylineTrailMaterialProperty.prototype.getValue = function (time, result) {
- if (!Cesium.defined(result)) {
- result = {};
- }
-
- result.color = Cesium.Property.getValueOrClonedDefault(
- this._color,
- time,
- Cesium.Color.WHITE,
- result.color
- ); //result.image = Cesium.Material.PolylineTrailImage;
-
- result.image = this.trailImage;
-
- result.time =
- ((performance.now() - this._time) % this.duration) / this.duration;
-
- return result;
- };
-
- PolylineTrailMaterialProperty.prototype.equals = function (other) {
- return (
- this === other ||
- (other instanceof PolylineTrailMaterialProperty &&
- Cesium.Property.equals(this._color, other._color))
- );
- };
-
- Cesium.Material.PolylineTrailType = "PolylineTrail";
-
- Cesium.Material.PolylineTrailImage = "/images/fire.png";
- // Cesium.Material.PolylineTrailSource =
- // "czm_material czm_getMaterial(czm_materialInput materialInput)\n" +
- // "{\n" +
- // "czm_material material = czm_getDefaultMaterial(materialInput);\n" +
- // "vec2 st = materialInput.st;\n" +
- // "vec4 colorImage = texture2D(image, vec2(fract(st.s - time), st.t));\n" +
- // "material.alpha = colorImage.a * color.a;\n" +
- // "material.diffuse = (colorImage.rgb+color.rgb)/2.0;\n" +
- // "return material;\n" +
- // "}";
-
- Cesium.Material.PolylineTrailSource =
- "czm_material czm_getMaterial(czm_materialInput materialInput)\n\
- {\n\
- czm_material material = czm_getDefaultMaterial(materialInput);\n\
- vec2 st = materialInput.st;\n\
- vec4 colorImage = texture(image, vec2(fract(st.t - time), st.t));\n\
- vec4 fragColor;\n\
- fragColor.rgb = color.rgb / 1.0;\n\
- fragColor = czm_gammaCorrect(fragColor);\n\
- material.alpha = colorImage.a * color.a;\n\
- material.diffuse = color.rgb;\n\
- material.emission = fragColor.rgb;\n\
- return material;\n\
- }";
-
- Cesium.Material._materialCache.addMaterial(Cesium.Material.PolylineTrailType, {
- fabric: {
- type: Cesium.Material.PolylineTrailType,
-
- uniforms: {
- color: new Cesium.Color(1.0, 0.0, 0.0, 0.5),
-
- image: Cesium.Material.PolylineTrailImage,
-
- time: 0,
- },
-
- source: Cesium.Material.PolylineTrailSource,
- },
-
- translucent: function (material) {
- return true;
- },
- });
-
- Cesium.PolylineTrailMaterialProperty = PolylineTrailMaterialProperty;
2:在vue中引用
import PolylineTrailMaterialProperty from "@/utils/PolylineTrailLinkMaterialProperty";
3:调用
- const createFlyLines = (data, viewer) => {
- const center = data.center;
- const cities = data.points;
- const startPoint = Cesium.Cartesian3.fromDegrees(
- center.lon,
- center.lat,
- 0
-
- );
- //中心点
-
- viewer.entities.add({
-
- position: startPoint,
-
- point: {
-
- pixelSize: center.size,
-
- color: Cesium.Color.YELLOWGREEN
-
- }
-
- });
-
- //大批量操作时,临时禁用事件可以提高性能
-
- // viewer.entities.suspendEvents();
-
- //散点
-
- cities.map(city => {
- let material = new Cesium.PolylineTrailMaterialProperty({ //创建材质1
- color: Cesium.Color.GREEN.withAlpha(0.5),
- duration: 3000,
- trailImage: '/images/fire.png'
-
- });
- const endPoint = Cesium.Cartesian3.fromDegrees(city.lon, city.lat, 0);
- viewer.entities.add({
- position: endPoint,
- point: {
- pixelSize: city.size - 10,
- color: city.color
- }
- });
- viewer.entities.add({
- polyline: {
-
- positions: generateCurve(startPoint, endPoint), // 格式为世界坐标的线位置数组
- width: 2, // 线的宽度
- material: material, // 线的颜色
- clampToGround: true, // 线是否固定在地面
- }
-
- });
- });
- };
- /**
-
- * 生成流动曲线
-
- * @param startPoint 起点
-
- * @param endPoint 终点
-
- * @returns {Array}
-
- */
- const generateCurve = (startPoint, endPoint) => {
-
- let addPointCartesian = new Cesium.Cartesian3();
-
- Cesium.Cartesian3.add(startPoint, endPoint, addPointCartesian);
-
- let midPointCartesian = new Cesium.Cartesian3();
-
- Cesium.Cartesian3.divideByScalar(addPointCartesian, 2, midPointCartesian);
-
- let midPointCartographic = Cesium.Cartographic.fromCartesian(
-
- midPointCartesian
-
- );
-
- midPointCartographic.height =
-
- Cesium.Cartesian3.distance(startPoint, endPoint) / 5;
-
- let midPoint = new Cesium.Cartesian3();
-
- Cesium.Ellipsoid.WGS84.cartographicToCartesian(
-
- midPointCartographic,
-
- midPoint
-
- );
-
- let spline = new Cesium.CatmullRomSpline({
-
- times: [0.0, 0.5, 1.0],
-
- points: [startPoint, midPoint, endPoint]
-
- });
-
- let curvePoints = [];
-
- for (let i = 0, len = 200; i < len; i++) {
-
- curvePoints.push(spline.evaluate(i / len));
-
- }
-
- return curvePoints;
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。