基于 MVT 矢量切片的网格渲染图层,该图层只提供瓦片加载、缓存和解析功能,不提供网格数据
const grid = new GridVTLayer({ viewer, url: 'https://els-yunjing.amap.com/data/weather/mvt?z={z}&x={x}&y={y}&size=256&key=高德开放平台Key', cacheSize: 200, dataZooms: [8, 20], customPrimitive: { createPrimitives: (tileNum, renderData) => { const colors = ['#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4'].reverse(); const features = renderData.default; const s = 2 ** (10 - (tileNum.level - 10)) * 2; const color = colors[(tileNum.level) % colors.length]; const instances = []; for (let i = 0; i < features.length; i++) { const feature = features[i]; const lnglat = [feature.geometry.coordinates[0], feature.geometry.coordinates[1], 0]; const modelMatrix = Cesium.Matrix4.multiplyByTranslation( Cesium.Transforms.eastNorthUpToFixedFrame( Cesium.Cartesian3.fromDegrees(lnglat[0], lnglat[1], lnglat[2]) ), new Cesium.Cartesian3(0.0, 0.0, 0), new Cesium.Matrix4() ); const instance = new Cesium.GeometryInstance({ geometry: Cesium.BoxGeometry.fromDimensions({ vertexFormat: Cesium.VertexFormat.POSITION_AND_NORMAL, dimensions: new Cesium.Cartesian3(s, s, s), }), modelMatrix: modelMatrix, attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( Cesium.Color.fromCssColorString(color) ), }, }); instances.push(instance); } const primitive = new Cesium.Primitive({ geometryInstances: instances, appearance: new Cesium.PerInstanceColorAppearance({ translucent: true, closed: true, }), }); viewer.scene.primitives.add(primitive); return [primitive] }, destroyPrimitives: (tileNum, primitives) => { primitives.forEach(primitive => { primitive.show = false; viewer.scene.primitives.remove(primitive); primitive.destroy(); }); primitives.length = 0; }, showPrimitives: (tileNum, primitives) => { primitives.forEach(primitive => { primitive.show = true; }); }, hidePrimitives: (tileNum, primitives) => { primitives.forEach(primitive => { primitive.show = false; }); }, updatePrimitives: (tileNums, primitives) => { } }}); Copy
const grid = new GridVTLayer({ viewer, url: 'https://els-yunjing.amap.com/data/weather/mvt?z={z}&x={x}&y={y}&size=256&key=高德开放平台Key', cacheSize: 200, dataZooms: [8, 20], customPrimitive: { createPrimitives: (tileNum, renderData) => { const colors = ['#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4'].reverse(); const features = renderData.default; const s = 2 ** (10 - (tileNum.level - 10)) * 2; const color = colors[(tileNum.level) % colors.length]; const instances = []; for (let i = 0; i < features.length; i++) { const feature = features[i]; const lnglat = [feature.geometry.coordinates[0], feature.geometry.coordinates[1], 0]; const modelMatrix = Cesium.Matrix4.multiplyByTranslation( Cesium.Transforms.eastNorthUpToFixedFrame( Cesium.Cartesian3.fromDegrees(lnglat[0], lnglat[1], lnglat[2]) ), new Cesium.Cartesian3(0.0, 0.0, 0), new Cesium.Matrix4() ); const instance = new Cesium.GeometryInstance({ geometry: Cesium.BoxGeometry.fromDimensions({ vertexFormat: Cesium.VertexFormat.POSITION_AND_NORMAL, dimensions: new Cesium.Cartesian3(s, s, s), }), modelMatrix: modelMatrix, attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor( Cesium.Color.fromCssColorString(color) ), }, }); instances.push(instance); } const primitive = new Cesium.Primitive({ geometryInstances: instances, appearance: new Cesium.PerInstanceColorAppearance({ translucent: true, closed: true, }), }); viewer.scene.primitives.add(primitive); return [primitive] }, destroyPrimitives: (tileNum, primitives) => { primitives.forEach(primitive => { primitive.show = false; viewer.scene.primitives.remove(primitive); primitive.destroy(); }); primitives.length = 0; }, showPrimitives: (tileNum, primitives) => { primitives.forEach(primitive => { primitive.show = true; }); }, hidePrimitives: (tileNum, primitives) => { primitives.forEach(primitive => { primitive.show = false; }); }, updatePrimitives: (tileNums, primitives) => { } }});
彻底销毁图层,释放内存显存
隐藏图层
显示图层
基于 MVT 矢量切片的网格渲染图层,该图层只提供瓦片加载、缓存和解析功能,不提供网格数据
Example