| name: '波纹雷达', | name: '波纹雷达', | ||||
| page: 'radar_wave.html', | page: 'radar_wave.html', | ||||
| }, | }, | ||||
| { | |||||
| name: '雷达脉冲', | |||||
| page: 'radar_outer.html', | |||||
| }, | |||||
| { | { | ||||
| name: '墙', | name: '墙', | ||||
| page: 'wall.html', | page: 'wall.html', | ||||
| name: '3dtiles-osgb', | name: '3dtiles-osgb', | ||||
| page: '3dtiles_osgb.html', | page: '3dtiles_osgb.html', | ||||
| }, | }, | ||||
| { | |||||
| name: '3dtiles-3dgs', | |||||
| page: '3dtiles_3dgs.html', | |||||
| }, | |||||
| { | { | ||||
| name: '3dtiles-shp', | name: '3dtiles-shp', | ||||
| page: '3dtiles_shp.html', | page: '3dtiles_shp.html', |
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0" /> | |||||
| <title>dc-example</title> | |||||
| <script src="/libs/dc-sdk/dc.min.js"></script> | |||||
| <link href="/libs/dc-sdk/dc.min.css" type="text/css" rel="stylesheet" /> | |||||
| <link href="../index.css" type="text/css" rel="stylesheet" /> | |||||
| </head> | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| DC.config.baseUrl = '../libs/dc-sdk/resources/' | |||||
| let viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createImageryLayer( | |||||
| DC.ImageryType.AMAP, | |||||
| { | |||||
| style: 'img', | |||||
| crs: 'WGS84' | |||||
| } | |||||
| ) | |||||
| viewer.addBaseLayer(baseLayer) | |||||
| let layer = new DC.TilesetLayer('layer') | |||||
| viewer.addLayer(layer) | |||||
| let tileset = new DC.Tileset('//resource.dvgis.cn/data/3dtiles/cesium-gs/tileset.json') | |||||
| layer.addOverlay(tileset) | |||||
| viewer.flyTo(tileset) | |||||
| </script> | |||||
| </body> | |||||
| </html> |
| <!DOCTYPE html> | |||||
| <html lang="en"> | |||||
| <head> | |||||
| <meta charset="utf-8" /> | |||||
| <meta name="viewport" content="width=device-width,initial-scale=1.0" /> | |||||
| <title>dc-example</title> | |||||
| <script src="/libs/dc-sdk/dc.min.js"></script> | |||||
| <link href="/libs/dc-sdk/dc.min.css" type="text/css" rel="stylesheet" /> | |||||
| <link href="../index.css" type="text/css" rel="stylesheet" /> | |||||
| </head> | |||||
| <body> | |||||
| <div id="viewer-container" class="viewer-container"></div> | |||||
| <script> | |||||
| DC.config.baseUrl = '../libs/dc-sdk/resources/' | |||||
| let viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createAMapImageryLayer({ | |||||
| style: 'img', | |||||
| crs: 'WGS84' | |||||
| }) | |||||
| viewer.addBaseLayer(baseLayer) | |||||
| let layer = new DC.VectorLayer('layer') | |||||
| viewer.addLayer(layer) | |||||
| let redCylinder = new DC.Cylinder('120.1,32,10000', 20000, 5000, 0) | |||||
| redCylinder.setStyle({ | |||||
| material: new DC.RadarOuterMaterialProperty({ | |||||
| color: DC.Color.RED | |||||
| }) | |||||
| }) | |||||
| let greenCylinder = new DC.Cylinder('120.3, 32.0,10000', 20000, 0, 5000) | |||||
| greenCylinder.setStyle({ | |||||
| material: new DC.RadarOuterMaterialProperty({ | |||||
| color: DC.Color.GREEN | |||||
| }) | |||||
| }) | |||||
| let blueCylinder = new DC.Cylinder('120.5, 32.0,10000', 20000, 5000, 0) | |||||
| blueCylinder.setStyle({ | |||||
| material: new DC.RadarOuterMaterialProperty( | |||||
| { | |||||
| color: DC.Color.BLUE | |||||
| } | |||||
| ) | |||||
| }) | |||||
| layer | |||||
| .addOverlay(redCylinder) | |||||
| .addOverlay(greenCylinder) | |||||
| .addOverlay(blueCylinder) | |||||
| viewer.flyTo(layer) | |||||
| </script> | |||||
| </body> | |||||
| </html> |
| <div id="viewer-container" class="viewer-container"></div> | <div id="viewer-container" class="viewer-container"></div> | ||||
| <script> | <script> | ||||
| DC.config.baseUrl = '../libs/dc-sdk/resources/' | |||||
| let viewer = new DC.Viewer('viewer-container') | |||||
| DC.config.baseUrl = '../libs/dc-sdk/resources/' | |||||
| let viewer = new DC.Viewer('viewer-container') | |||||
| let baseLayer = DC.ImageryLayerFactory.createImageryLayer(DC.ImageryType.AMAP,{ | let baseLayer = DC.ImageryLayerFactory.createImageryLayer(DC.ImageryType.AMAP,{ | ||||
| style:'img', | style:'img', | ||||
| crs:'WGS84', | crs:'WGS84', | ||||
| material: DC.Color.RED, | material: DC.Color.RED, | ||||
| outline: true | outline: true | ||||
| }) | }) | ||||
| layer.addOverlay(wall) | |||||
| viewer.flyTo(layer) | viewer.flyTo(layer) | ||||
| </script> | </script> | ||||
| </body> | </body> | ||||
| </html> | </html> |
| "dist" | "dist" | ||||
| ], | ], | ||||
| "dependencies": { | "dependencies": { | ||||
| "cesium": "^1.132.0", | |||||
| "cesium": "^1.133.1", | |||||
| "supercluster": "^8.0.1" | "supercluster": "^8.0.1" | ||||
| } | } | ||||
| } | } |
| REMOVE: 'remove', | REMOVE: 'remove', | ||||
| } | } | ||||
| const MouseEventType = { | |||||
| const BaseMouseEventType = { | |||||
| LEFT_DOWN: Cesium.ScreenSpaceEventType.LEFT_DOWN, | LEFT_DOWN: Cesium.ScreenSpaceEventType.LEFT_DOWN, | ||||
| LEFT_UP: Cesium.ScreenSpaceEventType.LEFT_UP, | LEFT_UP: Cesium.ScreenSpaceEventType.LEFT_UP, | ||||
| CLICK: Cesium.ScreenSpaceEventType.LEFT_CLICK, | CLICK: Cesium.ScreenSpaceEventType.LEFT_CLICK, | ||||
| RIGHT_UP: Cesium.ScreenSpaceEventType.RIGHT_UP, | RIGHT_UP: Cesium.ScreenSpaceEventType.RIGHT_UP, | ||||
| RIGHT_CLICK: Cesium.ScreenSpaceEventType.RIGHT_CLICK, | RIGHT_CLICK: Cesium.ScreenSpaceEventType.RIGHT_CLICK, | ||||
| DB_CLICK: Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK, | DB_CLICK: Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK, | ||||
| } | |||||
| const MouseEventType = { | |||||
| ...BaseMouseEventType, | |||||
| MOUSE_MOVE: Cesium.ScreenSpaceEventType.MOUSE_MOVE, | MOUSE_MOVE: Cesium.ScreenSpaceEventType.MOUSE_MOVE, | ||||
| WHEEL: Cesium.ScreenSpaceEventType.WHEEL, | WHEEL: Cesium.ScreenSpaceEventType.WHEEL, | ||||
| MOUSE_OVER: 'mouseover', | MOUSE_OVER: 'mouseover', | ||||
| } | } | ||||
| const ViewerEventType = { | const ViewerEventType = { | ||||
| ...BaseMouseEventType, | |||||
| MOUSE_MOVE: Cesium.ScreenSpaceEventType.MOUSE_MOVE, | |||||
| WHEEL: Cesium.ScreenSpaceEventType.WHEEL, | |||||
| ADD_LAYER: 'addLayer', | ADD_LAYER: 'addLayer', | ||||
| REMOVE_LAYER: 'removeLayer', | REMOVE_LAYER: 'removeLayer', | ||||
| ADD_EFFECT: 'addEffect', | ADD_EFFECT: 'addEffect', | ||||
| REMOVE_EFFECT: 'removeEffect', | REMOVE_EFFECT: 'removeEffect', | ||||
| LEFT_DOWN: Cesium.ScreenSpaceEventType.LEFT_DOWN, | |||||
| LEFT_UP: Cesium.ScreenSpaceEventType.LEFT_UP, | |||||
| CLICK: Cesium.ScreenSpaceEventType.LEFT_CLICK, | |||||
| RIGHT_DOWN: Cesium.ScreenSpaceEventType.RIGHT_DOWN, | |||||
| RIGHT_UP: Cesium.ScreenSpaceEventType.RIGHT_UP, | |||||
| RIGHT_CLICK: Cesium.ScreenSpaceEventType.RIGHT_CLICK, | |||||
| DB_CLICK: Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK, | |||||
| MOUSE_MOVE: Cesium.ScreenSpaceEventType.MOUSE_MOVE, | |||||
| WHEEL: Cesium.ScreenSpaceEventType.WHEEL, | |||||
| } | } | ||||
| const SceneEventType = { | const SceneEventType = { | ||||
| const OverlayEventType = { | const OverlayEventType = { | ||||
| ...BaseEventType, | ...BaseEventType, | ||||
| LEFT_DOWN: Cesium.ScreenSpaceEventType.LEFT_DOWN, | |||||
| LEFT_UP: Cesium.ScreenSpaceEventType.LEFT_UP, | |||||
| CLICK: Cesium.ScreenSpaceEventType.LEFT_CLICK, | |||||
| RIGHT_DOWN: Cesium.ScreenSpaceEventType.RIGHT_DOWN, | |||||
| RIGHT_UP: Cesium.ScreenSpaceEventType.RIGHT_UP, | |||||
| RIGHT_CLICK: Cesium.ScreenSpaceEventType.RIGHT_CLICK, | |||||
| DB_CLICK: Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK, | |||||
| MOUSE_MOVE: Cesium.ScreenSpaceEventType.MOUSE_MOVE, | |||||
| ...BaseMouseEventType, | |||||
| MOUSE_OVER: 'mouseover', | MOUSE_OVER: 'mouseover', | ||||
| MOUSE_OUT: 'mouseout', | MOUSE_OUT: 'mouseout', | ||||
| POSITION_UPDATE: 'positionUpdate', | POSITION_UPDATE: 'positionUpdate', | ||||
| const LayerEventType = { | const LayerEventType = { | ||||
| ...BaseEventType, | ...BaseEventType, | ||||
| LEFT_DOWN: Cesium.ScreenSpaceEventType.LEFT_DOWN, | |||||
| LEFT_UP: Cesium.ScreenSpaceEventType.LEFT_UP, | |||||
| CLICK: Cesium.ScreenSpaceEventType.LEFT_CLICK, | |||||
| RIGHT_DOWN: Cesium.ScreenSpaceEventType.RIGHT_DOWN, | |||||
| RIGHT_UP: Cesium.ScreenSpaceEventType.RIGHT_UP, | |||||
| RIGHT_CLICK: Cesium.ScreenSpaceEventType.RIGHT_CLICK, | |||||
| DB_CLICK: Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK, | |||||
| ...BaseMouseEventType, | |||||
| } | } | ||||
| const TrackEventType = { | const TrackEventType = { |
| this._addDefaultEvent() | this._addDefaultEvent() | ||||
| } | } | ||||
| set enableEventPropagation(enableEventPropagation) { | |||||
| this._enableEventPropagation = enableEventPropagation | |||||
| } | |||||
| get enableEventPropagation() { | |||||
| return this._enableEventPropagation | |||||
| } | |||||
| set enableMouseOver(enableMouseOver) { | |||||
| this._enableMouseOver = enableMouseOver | |||||
| } | |||||
| get enableMouseOver() { | |||||
| return this._enableMouseOver | |||||
| } | |||||
| set enableMouseMovePick(enableMouseMovePick) { | |||||
| this._enableMouseMovePick = enableMouseMovePick | |||||
| } | |||||
| get enableMouseMovePick() { | |||||
| return this._enableMouseMovePick | |||||
| } | |||||
| /** | /** | ||||
| * | * | ||||
| * @private | * @private | ||||
| /** | /** | ||||
| * | * | ||||
| * @param {*} position | |||||
| * @param {*} windowPosition | |||||
| * @returns | * @returns | ||||
| */ | */ | ||||
| _getMousePosition(position) { | |||||
| _getMousePosition(windowPosition) { | |||||
| let scene = this._viewer.scene | let scene = this._viewer.scene | ||||
| let cartesian = undefined | |||||
| let surfaceCartesian = undefined | |||||
| let position = undefined | |||||
| let wgs84Position = undefined | let wgs84Position = undefined | ||||
| let surfacePosition = undefined | |||||
| let wgs84SurfacePosition = undefined | let wgs84SurfacePosition = undefined | ||||
| if (scene.pickPositionSupported) { | |||||
| cartesian = scene.pickPosition(position) | |||||
| } | |||||
| if (cartesian) { | |||||
| const cartesianToWGS84 = (cartesian) => { | |||||
| if (!cartesian) { | |||||
| return undefined | |||||
| } | |||||
| let c = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian) | let c = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian) | ||||
| if (c) { | |||||
| wgs84Position = { | |||||
| lng: Cesium.Math.toDegrees(c.longitude), | |||||
| lat: Cesium.Math.toDegrees(c.latitude), | |||||
| alt: c.height, | |||||
| } | |||||
| if (!c) { | |||||
| return undefined | |||||
| } | |||||
| return { | |||||
| lng: Cesium.Math.toDegrees(c.longitude), | |||||
| lat: Cesium.Math.toDegrees(c.latitude), | |||||
| alt: c.height, | |||||
| } | } | ||||
| } | } | ||||
| if (scene.pickPositionSupported) { | |||||
| position = scene.pickPosition(windowPosition) | |||||
| wgs84Position = cartesianToWGS84(position) | |||||
| } | |||||
| if ( | if ( | ||||
| scene.mode === Cesium.SceneMode.SCENE3D && | scene.mode === Cesium.SceneMode.SCENE3D && | ||||
| !(this._viewer.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) | !(this._viewer.terrainProvider instanceof Cesium.EllipsoidTerrainProvider) | ||||
| ) { | ) { | ||||
| let ray = scene.camera.getPickRay(position) | |||||
| surfaceCartesian = scene.globe.pick(ray, scene) | |||||
| let ray = scene.camera.getPickRay(windowPosition) | |||||
| surfacePosition = scene.globe.pick(ray, scene) | |||||
| } else { | } else { | ||||
| surfaceCartesian = scene.camera.pickEllipsoid( | |||||
| position, | |||||
| surfacePosition = scene.camera.pickEllipsoid( | |||||
| windowPosition, | |||||
| Cesium.Ellipsoid.WGS84 | Cesium.Ellipsoid.WGS84 | ||||
| ) | ) | ||||
| } | } | ||||
| if (surfaceCartesian) { | |||||
| let c = Cesium.Ellipsoid.WGS84.cartesianToCartographic(surfaceCartesian) | |||||
| if (c) { | |||||
| wgs84SurfacePosition = { | |||||
| lng: Cesium.Math.toDegrees(c.longitude), | |||||
| lat: Cesium.Math.toDegrees(c.latitude), | |||||
| alt: c.height, | |||||
| } | |||||
| } | |||||
| } | |||||
| wgs84SurfacePosition = cartesianToWGS84(surfacePosition) | |||||
| return { | return { | ||||
| windowPosition: position, | |||||
| position: cartesian, | |||||
| wgs84Position: wgs84Position, | |||||
| surfacePosition: surfaceCartesian, | |||||
| wgs84SurfacePosition: wgs84SurfacePosition, | |||||
| windowPosition, | |||||
| position, | |||||
| wgs84Position, | |||||
| surfacePosition, | |||||
| wgs84SurfacePosition, | |||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Gets the drill pick overlays for the mouse event | * Gets the drill pick overlays for the mouse event | ||||
| * @param position | |||||
| * @returns {[]} | |||||
| * @param windowPosition | |||||
| * @param exclude | |||||
| * @returns {*[]} | |||||
| * @private | * @private | ||||
| */ | */ | ||||
| _getDrillInfos(position) { | |||||
| _getDrillInfos(windowPosition, exclude) { | |||||
| let drillInfos = [] | let drillInfos = [] | ||||
| let scene = this._viewer.scene | |||||
| let targets = scene.drillPick(position) | |||||
| if (targets && targets.length) { | |||||
| targets.forEach((target) => { | |||||
| drillInfos.push(this._getTargetInfo(target)) | |||||
| }) | |||||
| const scene = this._viewer.scene | |||||
| const targets = scene.drillPick(windowPosition) || [] | |||||
| for (const target of targets) { | |||||
| const targetInfo = this._getTargetInfo(target) | |||||
| if (targetInfo?.overlay?.overlayId !== exclude.overlayId) { | |||||
| drillInfos.push(targetInfo) | |||||
| } | |||||
| } | } | ||||
| return drillInfos | return drillInfos | ||||
| } | } | ||||
| /** | /** | ||||
| * Return the Overlay id | |||||
| * | |||||
| * @param target | * @param target | ||||
| * @returns {any} | |||||
| * @returns {{overlayId: (function(): Overlay._id)|*, layerId: (function(): Layer._id)|string|*, object: undefined, feature: undefined}} | |||||
| * @private | * @private | ||||
| */ | */ | ||||
| _getOverlayId(target) { | |||||
| let overlayId = undefined | |||||
| // for Entity | |||||
| _getTargetObject(target) { | |||||
| let feature = null | |||||
| let object = null | |||||
| if (target?.id instanceof Cesium.Entity) { | if (target?.id instanceof Cesium.Entity) { | ||||
| overlayId = target.id.overlayId | |||||
| } | |||||
| // for Cesium3DTileFeature | |||||
| else if (target instanceof Cesium.Cesium3DTileFeature) { | |||||
| overlayId = target.tileset.overlayId | |||||
| } | |||||
| // for Cesium3DTileset | |||||
| else if (target?.primitive instanceof Cesium.Cesium3DTileset) { | |||||
| overlayId = target.primitive.overlayId | |||||
| object = target.id | |||||
| } else if (target instanceof Cesium.Cesium3DTileFeature) { | |||||
| object = target.tileset | |||||
| feature = target | |||||
| } else if (target?.primitive instanceof Cesium.Cesium3DTileset) { | |||||
| object = target.primitive | |||||
| } else if (target?.primitive) { | |||||
| object = target.primitive | |||||
| } | } | ||||
| // for Primitive | |||||
| else if (target?.primitive) { | |||||
| overlayId = target.primitive.overlayId | |||||
| return { | |||||
| overlayId: object?.overlayId, | |||||
| layerId: object?.layerId, | |||||
| object, | |||||
| feature, | |||||
| } | } | ||||
| return overlayId | |||||
| } | } | ||||
| /** | /** | ||||
| * @private | * @private | ||||
| */ | */ | ||||
| _getTargetInfo(target) { | _getTargetInfo(target) { | ||||
| let overlay = undefined | |||||
| let layer = undefined | |||||
| let feature = undefined | |||||
| // for Entity | |||||
| if (target?.id instanceof Cesium.Entity) { | |||||
| layer = this._viewer | |||||
| .getLayers() | |||||
| .filter((item) => item.layerId === target.id.layerId)[0] | |||||
| if (layer?.getOverlay) { | |||||
| overlay = layer.getOverlay(target.id.overlayId) | |||||
| const { overlayId, layerId, feature } = this._getTargetObject(target) | |||||
| const layers = this._viewer.getLayers() | |||||
| const layer = layerId | |||||
| ? layers.find((item) => item.layerId === layerId) | |||||
| : null | |||||
| const overlay = | |||||
| overlayId && layer?.getOverlay ? layer.getOverlay(overlayId) : null | |||||
| if (overlay && feature?.getPropertyNames) { | |||||
| let propertyNames = feature.getPropertyNames() || [] | |||||
| for (const propertyName of propertyNames) { | |||||
| overlay.attr[propertyName] = feature.getProperty(propertyName) | |||||
| } | } | ||||
| } | } | ||||
| // for Cesium3DTileFeature | |||||
| else if (target instanceof Cesium.Cesium3DTileFeature) { | |||||
| layer = this._viewer | |||||
| .getLayers() | |||||
| .filter((item) => item.layerId === target.tileset.layerId)[0] | |||||
| feature = target | |||||
| if (layer?.getOverlay) { | |||||
| overlay = layer.getOverlay(target.tileset.overlayId) | |||||
| if (feature && feature.getPropertyNames) { | |||||
| let propertyNames = feature.getPropertyNames() | |||||
| propertyNames.forEach((item) => { | |||||
| overlay.attr[item] = feature.getProperty(item) | |||||
| }) | |||||
| } | |||||
| } | |||||
| } | |||||
| // for Cesium3DTileset | |||||
| else if (target?.primitive instanceof Cesium.Cesium3DTileset) { | |||||
| layer = this._viewer | |||||
| .getLayers() | |||||
| .filter((item) => item.layerId === target.primitive.layerId)[0] | |||||
| if (layer?.getOverlay) { | |||||
| overlay = layer.getOverlay(target.primitive.overlayId) | |||||
| } | |||||
| } | |||||
| // for Primitive | |||||
| else if (target?.primitive) { | |||||
| layer = this._viewer | |||||
| .getLayers() | |||||
| .filter((item) => item.layerId === target.primitive.layerId)[0] | |||||
| if (layer?.getOverlay) { | |||||
| overlay = layer.getOverlay(target.primitive.overlayId) | |||||
| } | |||||
| } | |||||
| return { | return { | ||||
| layer: layer, | layer: layer, | ||||
| overlay: overlay, | overlay: overlay, | ||||
| * @private | * @private | ||||
| */ | */ | ||||
| _raiseEvent(type, mouseInfo = {}) { | _raiseEvent(type, mouseInfo = {}) { | ||||
| let event = undefined | |||||
| let targetInfo = this._getTargetInfo(mouseInfo.target) | |||||
| let overlay = targetInfo?.overlay | |||||
| let layer = targetInfo?.layer | |||||
| // get Overlay Event | |||||
| if (overlay?.overlayEvent) { | |||||
| event = overlay.overlayEvent.getEvent(type) | |||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...targetInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| const targetInfo = this._getTargetInfo(mouseInfo.target) || {} | |||||
| const { overlay, layer } = targetInfo | |||||
| const doRaise = (eventHost, payload) => { | |||||
| if (!eventHost || typeof eventHost.getEvent !== 'function') return false | |||||
| const event = eventHost.getEvent(type) | |||||
| if (!event || event.numberOfListeners <= 0) return false | |||||
| event.raiseEvent(payload) | |||||
| return true | |||||
| } | } | ||||
| // get Layer Event | |||||
| if ( | |||||
| (!event || event.numberOfListeners === 0 || this._eventPropagation) && | |||||
| layer?.layerEvent | |||||
| ) { | |||||
| event = layer.layerEvent.getEvent(type) | |||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...targetInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| // raise event for overlay | |||||
| const eventParams = { ...targetInfo, ...mouseInfo } | |||||
| let handled = doRaise(overlay?.overlayEvent, eventParams) | |||||
| if (overlay?.allowDrillPicking) { | |||||
| const drillInfos = | |||||
| this._getDrillInfos(mouseInfo.windowPosition, overlay) || [] | |||||
| for (const drillInfo of drillInfos) { | |||||
| const dOverlay = drillInfo?.overlay | |||||
| const dLayer = drillInfo?.layer | |||||
| const drillEventParams = { ...drillInfo, ...mouseInfo } | |||||
| let dHandled = doRaise(dOverlay.overlayEvent, drillEventParams) | |||||
| if (!dHandled) { | |||||
| doRaise(dLayer?.layerEvent, drillEventParams) | |||||
| } | |||||
| } | |||||
| } | } | ||||
| // get Viewer Event | |||||
| if ( | |||||
| (!event || | |||||
| event.numberOfListeners === 0 || | |||||
| this._enableEventPropagation) && | |||||
| this._viewer?.viewerEvent | |||||
| ) { | |||||
| event = this._viewer.viewerEvent.getEvent(type) | |||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...targetInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| // raise event for layer | |||||
| if (!handled || this._enableEventPropagation) { | |||||
| handled = doRaise(layer?.layerEvent, eventParams) | |||||
| } | } | ||||
| // get Drill Pick Event | |||||
| if (overlay?.allowDrillPicking) { | |||||
| let drillInfos = this._getDrillInfos(mouseInfo.windowPosition) | |||||
| drillInfos.forEach((drillInfo) => { | |||||
| let dillOverlay = drillInfo?.overlay | |||||
| let dillLayer = drillInfo?.layer | |||||
| if ( | |||||
| dillOverlay?.overlayId !== overlay.overlayId && | |||||
| dillOverlay?.overlayEvent | |||||
| ) { | |||||
| // get Overlay Event | |||||
| event = dillOverlay.overlayEvent.getEvent(type) | |||||
| // get Layer Event | |||||
| if ( | |||||
| (!event || event.numberOfListeners === 0) && | |||||
| dillLayer?.layerEvent | |||||
| ) { | |||||
| event = dillLayer.layerEvent.getEvent(type) | |||||
| } | |||||
| event && | |||||
| event.numberOfListeners > 0 && | |||||
| event.raiseEvent({ | |||||
| ...drillInfo, | |||||
| ...mouseInfo, | |||||
| }) | |||||
| } | |||||
| }) | |||||
| // raise event for viewer | |||||
| if (!handled || this._enableEventPropagation) { | |||||
| doRaise(this._viewer?.viewerEvent, eventParams) | |||||
| } | } | ||||
| } | } | ||||
| ? 'pointer' | ? 'pointer' | ||||
| : 'default' | : 'default' | ||||
| this._raiseEvent(MouseEventType.MOUSE_MOVE, mouseInfo) | this._raiseEvent(MouseEventType.MOUSE_MOVE, mouseInfo) | ||||
| // add event for overlay | |||||
| if (this._enableMouseOver) { | if (this._enableMouseOver) { | ||||
| if ( | if ( | ||||
| !this._selected || | !this._selected || | ||||
| this._getOverlayId(this._selected.target) !== | |||||
| this._getOverlayId(mouseInfo.target) | |||||
| this._getTargetObject(this._selected.target).overlayId !== | |||||
| this._getTargetObject(mouseInfo.target).overlayId | |||||
| ) { | ) { | ||||
| // add event for overlay | |||||
| this._raiseEvent(MouseEventType.MOUSE_OUT, this._selected) | this._raiseEvent(MouseEventType.MOUSE_OUT, this._selected) | ||||
| this._raiseEvent(MouseEventType.MOUSE_OVER, mouseInfo) | this._raiseEvent(MouseEventType.MOUSE_OVER, mouseInfo) | ||||
| this._selected = mouseInfo | this._selected = mouseInfo | ||||
| * @private | * @private | ||||
| */ | */ | ||||
| _leftUpHandler(movement) { | _leftUpHandler(movement) { | ||||
| if (!movement?.position) { | |||||
| return false | |||||
| } | |||||
| this._raiseEvent( | this._raiseEvent( | ||||
| MouseEventType.LEFT_UP, | MouseEventType.LEFT_UP, | ||||
| this._getMouseInfo(movement.position) | this._getMouseInfo(movement.position) | ||||
| * @private | * @private | ||||
| */ | */ | ||||
| _rightUpHandler(movement) { | _rightUpHandler(movement) { | ||||
| if (!movement?.position) { | |||||
| return false | |||||
| } | |||||
| this._raiseEvent( | this._raiseEvent( | ||||
| MouseEventType.RIGHT_UP, | MouseEventType.RIGHT_UP, | ||||
| this._getMouseInfo(movement.position) | this._getMouseInfo(movement.position) |
| export { default as Viewer } from './viewer/Viewer' | export { default as Viewer } from './viewer/Viewer' | ||||
| export { | |||||
| MouseEventType, | |||||
| SceneEventType, | |||||
| TileSetEventType, | |||||
| ModelEventType, | |||||
| } from './event' | |||||
| export * from './event' | |||||
| export { MouseMode } from './option' | export { MouseMode } from './option' | ||||
| export { default as Parse, default as P } from './parse/Parse' | export { default as Parse, default as P } from './parse/Parse' | ||||
| export { | |||||
| ImageryType, | |||||
| ImageryLayerFactory, | |||||
| CustomGeographicTilingScheme, | |||||
| CustomMercatorTilingScheme, | |||||
| } from './imagery' | |||||
| export { TerrainType, TerrainFactory } from './terrain' | |||||
| export { GroundSkyBox } from './exts' | |||||
| export { | |||||
| LayerType, | |||||
| Layer, | |||||
| LayerGroup, | |||||
| ClusterLayer, | |||||
| CzmlLayer, | |||||
| DynamicLayer, | |||||
| FeatureGridLayer, | |||||
| GeoJsonLayer, | |||||
| GpxLayer, | |||||
| GraticuleLayer, | |||||
| GroundPrimitiveLayer, | |||||
| HtmlLayer, | |||||
| I3SLayer, | |||||
| KmlLayer, | |||||
| LabelLayer, | |||||
| PrimitiveLayer, | |||||
| RasterTileLayer, | |||||
| TilesetLayer, | |||||
| VectorLayer, | |||||
| } from './layer' | |||||
| export * from './imagery' | |||||
| export * from './terrain' | |||||
| export * from './exts' | |||||
| export * from './layer' | |||||
| export { default as HeatMapLayer } from './heat-map/HeatMapLayer' | export { default as HeatMapLayer } from './heat-map/HeatMapLayer' | ||||
| export { default as ChartLayer } from './chart/ChartLayer' | export { default as ChartLayer } from './chart/ChartLayer' | ||||
| export { | |||||
| Overlay, | |||||
| OverlayType, | |||||
| CustomBillboard, | |||||
| CustomLabel, | |||||
| DynamicBillboard, | |||||
| DynamicModel, | |||||
| DivIcon, | |||||
| Model, | |||||
| Tileset, | |||||
| I3S, | |||||
| AttackArrow, | |||||
| DoubleArrow, | |||||
| FineArrow, | |||||
| GatheringPlace, | |||||
| TailedAttackArrow, | |||||
| BillboardPrimitive, | |||||
| BounceBillboardPrimitive, | |||||
| BounceLabelPrimitive, | |||||
| CloudPrimitive, | |||||
| DiffuseWallPrimitive, | |||||
| ElecEllipsoidPrimitive, | |||||
| FlowLinePrimitive, | |||||
| LabelPrimitive, | |||||
| LightCylinderPrimitive, | |||||
| ModelPrimitive, | |||||
| PointPrimitive, | |||||
| PolylinePrimitive, | |||||
| ScanCirclePrimitive, | |||||
| TrailLinePrimitive, | |||||
| VideoPrimitive, | |||||
| WaterPrimitive, | |||||
| Billboard, | |||||
| Box, | |||||
| Circle, | |||||
| Corridor, | |||||
| Cylinder, | |||||
| Ellipse, | |||||
| Sphere, | |||||
| Label, | |||||
| Plane, | |||||
| Point, | |||||
| Polygon, | |||||
| Polyline, | |||||
| PolylineVolume, | |||||
| Rect, | |||||
| Wall, | |||||
| } from './overlay' | |||||
| export { | |||||
| CircleBlurMaterialProperty, | |||||
| CircleDiffuseMaterialProperty, | |||||
| CircleFadeMaterialProperty, | |||||
| CirclePulseMaterialProperty, | |||||
| CircleScanMaterialProperty, | |||||
| CircleSpiralMaterialProperty, | |||||
| CircleVaryMaterialProperty, | |||||
| CircleWaveMaterialProperty, | |||||
| EllipsoidElectricMaterialProperty, | |||||
| EllipsoidTrailMaterialProperty, | |||||
| PolylineFlickerMaterialProperty, | |||||
| PolylineFlowMaterialProperty, | |||||
| PolylineImageTrailMaterialProperty, | |||||
| PolylineLightingMaterialProperty, | |||||
| PolylineLightingTrailMaterialProperty, | |||||
| PolylineTrailMaterialProperty, | |||||
| RadarLineMaterialProperty, | |||||
| RadarSweepMaterialProperty, | |||||
| RadarWaveMaterialProperty, | |||||
| WallImageTrailMaterialProperty, | |||||
| WallLineTrailMaterialProperty, | |||||
| WallTrailMaterialProperty, | |||||
| WaterMaterialProperty, | |||||
| } from './material' | |||||
| export * from './overlay' | |||||
| export * from './material' | |||||
| export { default as Plot } from './plot/Plot' | export { default as Plot } from './plot/Plot' | ||||
| export { | |||||
| AnimationType, | |||||
| AroundPoint, | |||||
| AroundView, | |||||
| CircleScan, | |||||
| Flying, | |||||
| GlobeRotate, | |||||
| RadarScan, | |||||
| } from './animation' | |||||
| export * from './animation' | |||||
| export { default as Effect } from './effect/Effect' | export { default as Effect } from './effect/Effect' | ||||
| export { default as Weather } from './weather/Weather' | export { default as Weather } from './weather/Weather' | ||||
| export { KeyboardRoaming, RoamingController, RoamingPath } from './roaming' | |||||
| export * from './roaming' | |||||
| export { TrackViewMode, TrackController, Track } from './history-track' | |||||
| export * from './history-track' | |||||
| export { MeasureType, Measure } from './measure' | |||||
| export * from './measure' | |||||
| export { GeoTools } from './geo-tools' | |||||
| export * from './geo-tools' |
| * radar material property | * radar material property | ||||
| */ | */ | ||||
| export { default as RadarLineMaterialProperty } from './property/radar/RadarLineMaterialProperty' | export { default as RadarLineMaterialProperty } from './property/radar/RadarLineMaterialProperty' | ||||
| export { default as RadarOuterMaterialProperty } from './property/radar/RadarOuterMaterialProperty' | |||||
| export { default as RadarSweepMaterialProperty } from './property/radar/RadarSweepMaterialProperty' | export { default as RadarSweepMaterialProperty } from './property/radar/RadarSweepMaterialProperty' | ||||
| export { default as RadarWaveMaterialProperty } from './property/radar/RadarWaveMaterialProperty' | export { default as RadarWaveMaterialProperty } from './property/radar/RadarWaveMaterialProperty' | ||||
| /** | |||||
| * @Author : Caven Chen | |||||
| */ | |||||
| import { Cesium } from '../../../../libs' | |||||
| import MaterialProperty from '../../MaterialProperty' | |||||
| class RadarOuterMaterialProperty extends MaterialProperty { | |||||
| constructor(options = {}) { | |||||
| super(options) | |||||
| this._repeat = undefined | |||||
| this._repeatSubscription = undefined | |||||
| this._thickness = undefined | |||||
| this._thicknessSubscription = undefined | |||||
| this.repeat = options.repeat || 30.0 | |||||
| this.thickness = options.thickness || 0.3 | |||||
| } | |||||
| getType(time) { | |||||
| return Cesium.Material.RadarOuterType | |||||
| } | |||||
| getValue(time, result) { | |||||
| result = Cesium.defaultValue(result, {}) | |||||
| result.color = Cesium.Property.getValueOrUndefined(this._color, time) | |||||
| result.speed = Cesium.Property.getValueOrUndefined(this._speed, time) | |||||
| result.repeat = Cesium.Property.getValueOrUndefined(this._repeat, time) | |||||
| result.thickness = Cesium.Property.getValueOrUndefined( | |||||
| this._thickness, | |||||
| time | |||||
| ) | |||||
| return result | |||||
| } | |||||
| equals(other) { | |||||
| return ( | |||||
| this === other || | |||||
| (other instanceof RadarOuterMaterialProperty && | |||||
| Cesium.Property.equals(this._color, other._color) && | |||||
| Cesium.Property.equals(this._speed, other._speed) && | |||||
| Cesium.Property.equals(this._repeat, other._repeat) && | |||||
| Cesium.Property.equals(this._thickness, other._thickness)) | |||||
| ) | |||||
| } | |||||
| } | |||||
| Object.defineProperties(RadarOuterMaterialProperty.prototype, { | |||||
| color: Cesium.createPropertyDescriptor('color'), | |||||
| repeat: Cesium.createPropertyDescriptor('repeat'), | |||||
| thickness: Cesium.createPropertyDescriptor('thickness'), | |||||
| speed: Cesium.createPropertyDescriptor('speed'), | |||||
| }) | |||||
| export default RadarOuterMaterialProperty |
| uniform vec4 color; | |||||
| uniform float speed; | |||||
| uniform float repeat; | |||||
| uniform float thickness; | |||||
| czm_material czm_getMaterial(czm_materialInput materialInput){ | |||||
| czm_material material = czm_getDefaultMaterial(materialInput); | |||||
| float sp = 1.0 / repeat; | |||||
| vec2 st = materialInput.st; | |||||
| float dis = distance(st, vec2(0.5)); | |||||
| float t = czm_frameNumber * speed / 1000.0; | |||||
| float m = mod(dis - fract(t), sp); | |||||
| float a = step(sp * (1.0 - thickness), m); | |||||
| material.diffuse = color.rgb; | |||||
| material.alpha = a * color.a; | |||||
| return material; | |||||
| } |
| import RadarLineMaterial from '../shader/radar/RadarLineMaterial.glsl' | import RadarLineMaterial from '../shader/radar/RadarLineMaterial.glsl' | ||||
| import RadarSweepMaterial from '../shader/radar/RadarSweepMaterial.glsl' | import RadarSweepMaterial from '../shader/radar/RadarSweepMaterial.glsl' | ||||
| import RadarWaveMaterial from '../shader/radar/RadarWaveMaterial.glsl' | import RadarWaveMaterial from '../shader/radar/RadarWaveMaterial.glsl' | ||||
| import RadarOuterMaterial from '../shader/radar/RadarOuterMaterial.glsl' | |||||
| /** | /** | ||||
| * RadarLine | * RadarLine | ||||
| return true | return true | ||||
| }, | }, | ||||
| }) | }) | ||||
| /** | |||||
| * RadarOuter | |||||
| * @type {string} | |||||
| */ | |||||
| Cesium.Material.RadarOuterType = 'RadarOuter' | |||||
| Cesium.Material._materialCache.addMaterial(Cesium.Material.RadarOuterType, { | |||||
| fabric: { | |||||
| type: Cesium.Material.RadarOuterType, | |||||
| uniforms: { | |||||
| color: new Cesium.Color(1.0, 0.0, 0.0, 0.7), | |||||
| speed: 3.0, | |||||
| repeat: 30.0, | |||||
| thickness: 0.3, | |||||
| }, | |||||
| source: RadarOuterMaterial, | |||||
| }, | |||||
| translucent: function (material) { | |||||
| return true | |||||
| }, | |||||
| }) |
| if (Object.keys(options).length === 0) { | if (Object.keys(options).length === 0) { | ||||
| return this | return this | ||||
| } | } | ||||
| this._options = { | this._options = { | ||||
| ...this._options, | ...this._options, | ||||
| ...options, | ...options, | ||||
| } | } | ||||
| this._setViewerOption() | this._setViewerOption() | ||||
| ._setCanvasOption() | ._setCanvasOption() | ||||
| ._setSceneOption() | ._setSceneOption() |
| constructor(positions) { | constructor(positions) { | ||||
| super() | super() | ||||
| this._positions = Parse.parsePositions(positions) | this._positions = Parse.parsePositions(positions) | ||||
| this._delegate = new Cesium.Entity({ polyline: {} }) | |||||
| this._delegate = new Cesium.Entity({ | |||||
| polyline: { | |||||
| positions: new Cesium.CallbackProperty(() => { | |||||
| return Transform.transformWGS84ArrayToCartesianArray(this._positions) | |||||
| }, false), | |||||
| }, | |||||
| }) | |||||
| this._state = State.INITIALIZED | this._state = State.INITIALIZED | ||||
| } | } | ||||
| set positions(positions) { | set positions(positions) { | ||||
| this._positions = Parse.parsePositions(positions) | this._positions = Parse.parsePositions(positions) | ||||
| this._delegate.polyline.positions = | |||||
| Transform.transformWGS84ArrayToCartesianArray(this._positions) | |||||
| } | } | ||||
| get positions() { | get positions() { |
| ...DEF_OPTS, | ...DEF_OPTS, | ||||
| ...options, | ...options, | ||||
| }) // Initialize the viewer | }) // Initialize the viewer | ||||
| this._delegate.canvas.parentNode.className = 'viewer-canvas' | |||||
| this._delegate.canvas.parentNode.className = 'viewer-canvas' //re-name the default class | |||||
| /** | /** | ||||
| * Registers events | * Registers events | ||||
| */ | */ | ||||
| new MouseEvent(this, options) // Register global mouse events | |||||
| this._mouseEvent = new MouseEvent(this, options) // Register global mouse events | |||||
| this._viewerEvent = new ViewerEvent() // Register viewer events | this._viewerEvent = new ViewerEvent() // Register viewer events | ||||
| this._sceneEvent = new SceneEvent(this) // Register scene events | this._sceneEvent = new SceneEvent(this) // Register scene events | ||||
| this._viewerOption = new ViewerOption(this) // Initialize the viewer option | this._viewerOption = new ViewerOption(this) // Initialize the viewer option | ||||
| this._cameraOption = new CameraOption(this) // Initialize the camera option | this._cameraOption = new CameraOption(this) // Initialize the camera option | ||||
| /** | |||||
| * Registers Container | |||||
| * | |||||
| */ | |||||
| this._widgetContainer = DomUtil.create( | this._widgetContainer = DomUtil.create( | ||||
| 'div', | 'div', | ||||
| 'viewer-widgets', | 'viewer-widgets', | ||||
| return Math.round(D + (A - D) / (1 + Math.pow(height / C, B))) | return Math.round(D + (A - D) / (1 + Math.pow(height / C, B))) | ||||
| } | } | ||||
| set enableEventPropagation(enableEventPropagation) { | |||||
| this._mouseEvent.enableEventPropagation = enableEventPropagation | |||||
| } | |||||
| get enableEventPropagation() { | |||||
| return this._mouseEvent.enableEventPropagation | |||||
| } | |||||
| set enableMouseOver(enableMouseOver) { | |||||
| this._mouseEvent.enableMouseOver = enableMouseOver | |||||
| } | |||||
| get enableMouseOver() { | |||||
| return this._mouseEvent.enableMouseOver | |||||
| } | |||||
| set enableMouseMovePick(enableMouseMovePick) { | |||||
| this._mouseEvent.enableMouseMovePick = enableMouseMovePick | |||||
| } | |||||
| get enableMouseMovePick() { | |||||
| return this._mouseEvent.enableMouseMovePick | |||||
| } | |||||
| /** | /** | ||||
| * Adds a plugin | * Adds a plugin | ||||
| * @param plugin | * @param plugin |