@iweather-js/iweather-gl 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/config/colorPalette.d.ts +115 -0
- package/dist/config/colorPalette.d.ts.map +1 -0
- package/dist/config/map.d.ts +15 -0
- package/dist/config/map.d.ts.map +1 -0
- package/dist/config/product.d.ts +42 -0
- package/dist/config/product.d.ts.map +1 -0
- package/dist/core/dataFindMgr.d.ts +24 -0
- package/dist/core/dataFindMgr.d.ts.map +1 -0
- package/dist/core/dataLoaderMgr.d.ts +19 -0
- package/dist/core/dataLoaderMgr.d.ts.map +1 -0
- package/dist/core/hub.layerMgr.d.ts +11 -0
- package/dist/core/hub.layerMgr.d.ts.map +1 -0
- package/dist/core/hub.timeMgr.d.ts +12 -0
- package/dist/core/hub.timeMgr.d.ts.map +1 -0
- package/dist/core/layerMgr.d.ts +69 -0
- package/dist/core/layerMgr.d.ts.map +1 -0
- package/dist/core/product.d.ts +56 -0
- package/dist/core/product.d.ts.map +1 -0
- package/dist/fns/createColorPalette.d.ts +8 -0
- package/dist/fns/createColorPalette.d.ts.map +1 -0
- package/dist/fns/createGridMesh.d.ts +14 -0
- package/dist/fns/createGridMesh.d.ts.map +1 -0
- package/dist/fns/geojson/getChina.d.ts +15 -0
- package/dist/fns/geojson/getChina.d.ts.map +1 -0
- package/dist/fns/geojson/getCity.d.ts +15 -0
- package/dist/fns/geojson/getCity.d.ts.map +1 -0
- package/dist/fns/geojson/getCounty.d.ts +9 -0
- package/dist/fns/geojson/getCounty.d.ts.map +1 -0
- package/dist/fns/geojson/getLand.d.ts +3 -0
- package/dist/fns/geojson/getLand.d.ts.map +1 -0
- package/dist/fns/geojson/getProvince.d.ts +16 -0
- package/dist/fns/geojson/getProvince.d.ts.map +1 -0
- package/dist/fns/geojson/getProvinceNames.d.ts +8 -0
- package/dist/fns/geojson/getProvinceNames.d.ts.map +1 -0
- package/dist/fns/geojson/toAdcodeInfoVo.d.ts +13 -0
- package/dist/fns/geojson/toAdcodeInfoVo.d.ts.map +1 -0
- package/dist/fns/geojson/types.d.ts +14 -0
- package/dist/fns/geojson/types.d.ts.map +1 -0
- package/dist/fns/getVisibleWraps.d.ts +3 -0
- package/dist/fns/getVisibleWraps.d.ts.map +1 -0
- package/dist/fns/glsl/contourFns.d.ts +2 -0
- package/dist/fns/glsl/contourFns.d.ts.map +1 -0
- package/dist/fns/glsl/defComputeFs.d.ts +2 -0
- package/dist/fns/glsl/defComputeFs.d.ts.map +1 -0
- package/dist/fns/glsl/mercatorFuns.d.ts +2 -0
- package/dist/fns/glsl/mercatorFuns.d.ts.map +1 -0
- package/dist/fns/glsl/normalizeTo.d.ts +2 -0
- package/dist/fns/glsl/normalizeTo.d.ts.map +1 -0
- package/dist/fns/glsl/positionInFuns.d.ts +2 -0
- package/dist/fns/glsl/positionInFuns.d.ts.map +1 -0
- package/dist/fns/glsl/texture_bicubic.d.ts +2 -0
- package/dist/fns/glsl/texture_bicubic.d.ts.map +1 -0
- package/dist/fns/index.d.ts +17 -0
- package/dist/fns/index.d.ts.map +1 -0
- package/dist/fns/outdated/getMeshInfo.d.ts +19 -0
- package/dist/fns/outdated/getMeshInfo.d.ts.map +1 -0
- package/dist/fns/outdated/getWorldOffsets.d.ts +3 -0
- package/dist/fns/outdated/getWorldOffsets.d.ts.map +1 -0
- package/dist/fns/outdated/readImagBitmap.d.ts +2 -0
- package/dist/fns/outdated/readImagBitmap.d.ts.map +1 -0
- package/dist/fns/outdated/readImageWithExif/worker-load.d.ts +1 -0
- package/dist/fns/outdated/readImageWithExif/worker-load.d.ts.map +1 -0
- package/dist/fns/readImageWithExif/index.d.ts +25 -0
- package/dist/fns/readImageWithExif/index.d.ts.map +1 -0
- package/dist/fns/readImageWithExif/parseExif.d.ts +40 -0
- package/dist/fns/readImageWithExif/parseExif.d.ts.map +1 -0
- package/dist/fns/readImageWithExif/readExif.d.ts +12 -0
- package/dist/fns/readImageWithExif/readExif.d.ts.map +1 -0
- package/dist/fns/readImageWithExif/readImagWithExif.d.ts +9 -0
- package/dist/fns/readImageWithExif/readImagWithExif.d.ts.map +1 -0
- package/dist/fns/scaleColorPaletteConfig.d.ts +3 -0
- package/dist/fns/scaleColorPaletteConfig.d.ts.map +1 -0
- package/dist/fns/toColorPaletteFns.d.ts +9 -0
- package/dist/fns/toColorPaletteFns.d.ts.map +1 -0
- package/dist/fns/toGlColor.d.ts +2 -0
- package/dist/fns/toGlColor.d.ts.map +1 -0
- package/dist/fns/wrapBounds.d.ts +14 -0
- package/dist/fns/wrapBounds.d.ts.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1986 -0
- package/dist/index.js.map +131 -0
- package/dist/interfaces/ICityConfig.d.ts +28 -0
- package/dist/interfaces/ICityConfig.d.ts.map +1 -0
- package/dist/interfaces/IDataFetchConfig.d.ts +10 -0
- package/dist/interfaces/IDataFetchConfig.d.ts.map +1 -0
- package/dist/interfaces/IDataReqOptionsConfig.d.ts +16 -0
- package/dist/interfaces/IDataReqOptionsConfig.d.ts.map +1 -0
- package/dist/interfaces/ILayerMgrConfig.d.ts +13 -0
- package/dist/interfaces/ILayerMgrConfig.d.ts.map +1 -0
- package/dist/interfaces/IProductConfig.d.ts +16 -0
- package/dist/interfaces/IProductConfig.d.ts.map +1 -0
- package/dist/interfaces/index.d.ts +7 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/layers/base/ExCustomLayer.d.ts +40 -0
- package/dist/layers/base/ExCustomLayer.d.ts.map +1 -0
- package/dist/layers/base/ExTimingLayer.d.ts +30 -0
- package/dist/layers/base/ExTimingLayer.d.ts.map +1 -0
- package/dist/layers/index.d.ts +18 -0
- package/dist/layers/index.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile/Maplibre3DProfileLayer.d.ts +43 -0
- package/dist/layers/maplibre-3dProfile/Maplibre3DProfileLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile/box.vs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile/box.vs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile/lib/getMatrix.d.ts +11 -0
- package/dist/layers/maplibre-3dProfile/lib/getMatrix.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile/line.fs.d.ts +6 -0
- package/dist/layers/maplibre-3dProfile/line.fs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile/slice.fs copy.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile/slice.fs copy.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile/slice.fs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile/slice.fs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile/volume.fs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile/volume.fs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v0/Maplibre3DProfileLayerV0.d.ts +37 -0
- package/dist/layers/maplibre-3dProfile-v0/Maplibre3DProfileLayerV0.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v0/common.vs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile-v0/common.vs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v0/lib/getMatrix.d.ts +11 -0
- package/dist/layers/maplibre-3dProfile-v0/lib/getMatrix.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v0/line.fs.d.ts +6 -0
- package/dist/layers/maplibre-3dProfile-v0/line.fs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v0/slice.fs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile-v0/slice.fs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v0/volume.fs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile-v0/volume.fs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/Maplibre3DProfileLayerV3.d.ts +44 -0
- package/dist/layers/maplibre-3dProfile-v3/Maplibre3DProfileLayerV3.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/common.vs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile-v3/common.vs.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/calculateLightPositions.d.ts +12 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/calculateLightPositions.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/calculateSubdivisions.d.ts +10 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/calculateSubdivisions.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/createCubeGeometry.d.ts +11 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/createCubeGeometry.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/prepareLightUniforms.d.ts +12 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/prepareLightUniforms.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/prepareProjectionUniforms.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/prepareProjectionUniforms.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/validateGeometry.d.ts +11 -0
- package/dist/layers/maplibre-3dProfile-v3/lib/validateGeometry.d.ts.map +1 -0
- package/dist/layers/maplibre-3dProfile-v3/volume.fs.d.ts +7 -0
- package/dist/layers/maplibre-3dProfile-v3/volume.fs.d.ts.map +1 -0
- package/dist/layers/maplibre-color/ColorLayer.d.ts +23 -0
- package/dist/layers/maplibre-color/ColorLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-color/CommonColorLayer.d.ts +12 -0
- package/dist/layers/maplibre-color/CommonColorLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-color/WindColorLayer.d.ts +10 -0
- package/dist/layers/maplibre-color/WindColorLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-color/getTiles.d.ts +10 -0
- package/dist/layers/maplibre-color/getTiles.d.ts.map +1 -0
- package/dist/layers/maplibre-color/globe-image-test/ColorLayer2.d.ts +24 -0
- package/dist/layers/maplibre-color/globe-image-test/ColorLayer2.d.ts.map +1 -0
- package/dist/layers/maplibre-color/globe-image-test/CommonColorLayer2.d.ts +12 -0
- package/dist/layers/maplibre-color/globe-image-test/CommonColorLayer2.d.ts.map +1 -0
- package/dist/layers/maplibre-contour/ContourLayer.d.ts +20 -0
- package/dist/layers/maplibre-contour/ContourLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-contour/ContourLayerByValue.d.ts +20 -0
- package/dist/layers/maplibre-contour/ContourLayerByValue.d.ts.map +1 -0
- package/dist/layers/maplibre-contour/ContourValueLayer.d.ts +26 -0
- package/dist/layers/maplibre-contour/ContourValueLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-contour/lib.d.ts +38 -0
- package/dist/layers/maplibre-contour/lib.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/BaseGridValueLayer.d.ts +28 -0
- package/dist/layers/maplibre-gridValue/BaseGridValueLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/GridValueLayer.d.ts +7 -0
- package/dist/layers/maplibre-gridValue/GridValueLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/GridWindValueLayer.d.ts +7 -0
- package/dist/layers/maplibre-gridValue/GridWindValueLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/computeVsByColor.d.ts +2 -0
- package/dist/layers/maplibre-gridValue/computeVsByColor.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/computeVsByWind.d.ts +2 -0
- package/dist/layers/maplibre-gridValue/computeVsByWind.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/drawFs.d.ts +3 -0
- package/dist/layers/maplibre-gridValue/drawFs.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/drawVs.d.ts +3 -0
- package/dist/layers/maplibre-gridValue/drawVs.d.ts.map +1 -0
- package/dist/layers/maplibre-gridValue/lib/createNumberTextureInfo.d.ts +20 -0
- package/dist/layers/maplibre-gridValue/lib/createNumberTextureInfo.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/GridWindLayer.d.ts +25 -0
- package/dist/layers/maplibre-gridWind/GridWindLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/computeVs.d.ts +2 -0
- package/dist/layers/maplibre-gridWind/computeVs.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/drawFs.d.ts +3 -0
- package/dist/layers/maplibre-gridWind/drawFs.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/drawVs.d.ts +3 -0
- package/dist/layers/maplibre-gridWind/drawVs.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/utils/calculateGridInfo.d.ts +7 -0
- package/dist/layers/maplibre-gridWind/utils/calculateGridInfo.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/utils/calculateViewportGridUv.d.ts +9 -0
- package/dist/layers/maplibre-gridWind/utils/calculateViewportGridUv.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/utils/toBoundsCoords.d.ts +3 -0
- package/dist/layers/maplibre-gridWind/utils/toBoundsCoords.d.ts.map +1 -0
- package/dist/layers/maplibre-gridWind/utils/toWebGlSizeByPixel.d.ts +3 -0
- package/dist/layers/maplibre-gridWind/utils/toWebGlSizeByPixel.d.ts.map +1 -0
- package/dist/layers/maplibre-wind-particle/MapLibreWindParticleLayer.d.ts +48 -0
- package/dist/layers/maplibre-wind-particle/MapLibreWindParticleLayer.d.ts.map +1 -0
- package/dist/layers/maplibre-wind-particle/computeVs.d.ts +3 -0
- package/dist/layers/maplibre-wind-particle/computeVs.d.ts.map +1 -0
- package/dist/layers/maplibre-wind-particle/drawFs.d.ts +3 -0
- package/dist/layers/maplibre-wind-particle/drawFs.d.ts.map +1 -0
- package/dist/layers/maplibre-wind-particle/drawVs.d.ts +3 -0
- package/dist/layers/maplibre-wind-particle/drawVs.d.ts.map +1 -0
- package/dist/layers/maplibre-wind-particle/utils/bounds.d.ts +3 -0
- package/dist/layers/maplibre-wind-particle/utils/bounds.d.ts.map +1 -0
- package/dist/layers/mask/fns/calculateRenderBounds.d.ts +6 -0
- package/dist/layers/mask/fns/calculateRenderBounds.d.ts.map +1 -0
- package/dist/layers/mask/fns/createProjectionMatrix.d.ts +5 -0
- package/dist/layers/mask/fns/createProjectionMatrix.d.ts.map +1 -0
- package/dist/layers/mask/fns/hasViewportChanged.d.ts +13 -0
- package/dist/layers/mask/fns/hasViewportChanged.d.ts.map +1 -0
- package/dist/layers/mask/fns/lngLatToMercator.d.ts +3 -0
- package/dist/layers/mask/fns/lngLatToMercator.d.ts.map +1 -0
- package/dist/layers/mask/fns/processGeoJSON.d.ts +10 -0
- package/dist/layers/mask/fns/processGeoJSON.d.ts.map +1 -0
- package/dist/layers/mask/mask-layer.d.ts +36 -0
- package/dist/layers/mask/mask-layer.d.ts.map +1 -0
- package/dist/layers/mask/masked-data-layer.d.ts +22 -0
- package/dist/layers/mask/masked-data-layer.d.ts.map +1 -0
- package/dist/map/getMapState.d.ts +3 -0
- package/dist/map/getMapState.d.ts.map +1 -0
- package/dist/map/mapAction.d.ts +34 -0
- package/dist/map/mapAction.d.ts.map +1 -0
- package/dist/map/mapAutoRotation.d.ts +3 -0
- package/dist/map/mapAutoRotation.d.ts.map +1 -0
- package/dist/map/mapCreate.d.ts +4 -0
- package/dist/map/mapCreate.d.ts.map +1 -0
- package/dist/map/mapEvent.d.ts +16 -0
- package/dist/map/mapEvent.d.ts.map +1 -0
- package/dist/map/mapInitState.d.ts +4 -0
- package/dist/map/mapInitState.d.ts.map +1 -0
- package/dist/map/mapScreenshotHandler.d.ts +8 -0
- package/dist/map/mapScreenshotHandler.d.ts.map +1 -0
- package/dist/map/mapSyncMoveHandler.d.ts +8 -0
- package/dist/map/mapSyncMoveHandler.d.ts.map +1 -0
- package/dist/map/mapSyncTimeHandler.d.ts +8 -0
- package/dist/map/mapSyncTimeHandler.d.ts.map +1 -0
- package/dist/map/markerHover.d.ts +13 -0
- package/dist/map/markerHover.d.ts.map +1 -0
- package/dist/map/markerMgr.d.ts +15 -0
- package/dist/map/markerMgr.d.ts.map +1 -0
- package/dist/map/syncMapStateToStoreHandler.d.ts +8 -0
- package/dist/map/syncMapStateToStoreHandler.d.ts.map +1 -0
- package/dist/map/syncStoreStateToMapHandler.d.ts +8 -0
- package/dist/map/syncStoreStateToMapHandler.d.ts.map +1 -0
- package/dist/store/configStore.d.ts +24 -0
- package/dist/store/configStore.d.ts.map +1 -0
- package/dist/store/defValue.d.ts +14 -0
- package/dist/store/defValue.d.ts.map +1 -0
- package/dist/store/gisStore.d.ts +158 -0
- package/dist/store/gisStore.d.ts.map +1 -0
- package/dist/store/multiMapStatusStore.d.ts +35 -0
- package/dist/store/multiMapStatusStore.d.ts.map +1 -0
- package/dist/store/toGisValue.d.ts +4 -0
- package/dist/store/toGisValue.d.ts.map +1 -0
- package/dist/types/colorPalette.d.ts +19 -0
- package/dist/types/colorPalette.d.ts.map +1 -0
- package/dist/types/ctx.d.ts +13 -0
- package/dist/types/ctx.d.ts.map +1 -0
- package/dist/types/gl.d.ts +40 -0
- package/dist/types/gl.d.ts.map +1 -0
- package/dist/types/layerOptions.d.ts +124 -0
- package/dist/types/layerOptions.d.ts.map +1 -0
- package/dist/types/map.d.ts +19 -0
- package/dist/types/map.d.ts.map +1 -0
- package/dist/types/product.d.ts +27 -0
- package/dist/types/product.d.ts.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FeatureCollection, Geometry } from 'geojson';
|
|
2
|
+
import maplibregl from 'maplibre-gl';
|
|
3
|
+
import { AreaGeoJsonProperties, IAdcodeInfoVo } from '../fns';
|
|
4
|
+
import { Bounds } from '../types/map';
|
|
5
|
+
export type ICityOption = {
|
|
6
|
+
type: 'province' | 'city' | 'county';
|
|
7
|
+
adcode: string;
|
|
8
|
+
region: number;
|
|
9
|
+
maskTextureOptions: {
|
|
10
|
+
viewportBounds: Bounds;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export type ICityInfo = ICityOption & {
|
|
14
|
+
maskGeoJson?: FeatureCollection<Geometry, AreaGeoJsonProperties>;
|
|
15
|
+
};
|
|
16
|
+
export declare abstract class ICityConfig {
|
|
17
|
+
cityList: ICityOption[];
|
|
18
|
+
boundsPadding: maplibregl.PaddingOptions;
|
|
19
|
+
isAddCityMask: boolean;
|
|
20
|
+
customCityCoordinate: Record<string, [number, number]>;
|
|
21
|
+
constructor(params: {
|
|
22
|
+
cityListOptions: ICityOption[];
|
|
23
|
+
boundsPadding?: maplibregl.PaddingOptions;
|
|
24
|
+
isAddCityMask?: boolean;
|
|
25
|
+
});
|
|
26
|
+
findCityInfo(adcodeInfoVo: IAdcodeInfoVo): ICityInfo;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ICityConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ICityConfig.d.ts","sourceRoot":"","sources":["../../src/interfaces/ICityConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,WAAW,CAAC,EAAE,iBAAiB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;CAClE,CAAC;AAEF,8BAAsB,WAAW;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,EAAE,UAAU,CAAC,cAAc,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAM;gBAEvD,MAAM,EAAE;QAAE,eAAe,EAAE,WAAW,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE;IAW1H,YAAY,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS;CAkBrD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IFetcher } from 'iweather-lib';
|
|
2
|
+
export declare abstract class IDataFetchConfig<T extends string = string> {
|
|
3
|
+
fetchers: Record<T, IFetcher>;
|
|
4
|
+
mock?: boolean;
|
|
5
|
+
constructor(params: {
|
|
6
|
+
fetchers: Record<T, IFetcher>;
|
|
7
|
+
mock?: boolean;
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=IDataFetchConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IDataFetchConfig.d.ts","sourceRoot":"","sources":["../../src/interfaces/IDataFetchConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,8BAAsB,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACvD,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;gBAEV,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;CAItE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ITimeBarInfoVo {
|
|
2
|
+
startTime: number;
|
|
3
|
+
endTime: number;
|
|
4
|
+
intervalMinute: number;
|
|
5
|
+
currTime: number;
|
|
6
|
+
}
|
|
7
|
+
export interface IBaseDataReq {
|
|
8
|
+
enable: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class IDataReqOptionsConfig<T = {}, DataReqT = Record<string, IBaseDataReq>, DataResT = Record<string, any>> {
|
|
11
|
+
abstract enableTimeSync(options: T): boolean;
|
|
12
|
+
abstract getDataReqOptions(options: T): DataReqT;
|
|
13
|
+
abstract getDataResOptions(options: T): DataResT;
|
|
14
|
+
getDefOptions(): Record<string, IBaseDataReq>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=IDataReqOptionsConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IDataReqOptionsConfig.d.ts","sourceRoot":"","sources":["../../src/interfaces/IDataReqOptionsConfig.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,8BAAsB,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;aACzG,cAAc,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO;aAEnC,iBAAiB,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ;aAEvC,iBAAiB,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ;IAEhD,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;CAmBrD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ILayerMgr } from '../core/layerMgr';
|
|
2
|
+
import { IBaseLayerOptions } from '../types/layerOptions';
|
|
3
|
+
export declare abstract class ILayerMgrConfig {
|
|
4
|
+
params: {
|
|
5
|
+
createLayers: () => Record<string, ILayerMgr>;
|
|
6
|
+
};
|
|
7
|
+
private layerMgrMap;
|
|
8
|
+
constructor(params: {
|
|
9
|
+
createLayers: () => Record<string, ILayerMgr>;
|
|
10
|
+
});
|
|
11
|
+
getDefLayerOptions(): Record<string, IBaseLayerOptions>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ILayerMgrConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILayerMgrConfig.d.ts","sourceRoot":"","sources":["../../src/interfaces/ILayerMgrConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,8BAAsB,eAAe;IAGhB,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAAE;IAF5E,OAAO,CAAC,WAAW,CAAoD;gBAEpD,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAAE;IAErE,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;CAQ/D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IProduct } from '../core/product';
|
|
2
|
+
import { ProductCtx } from '../types/ctx';
|
|
3
|
+
import { IProductGroupConfig } from '../types/product';
|
|
4
|
+
export declare abstract class IProductConfig<LayerT = object, ProductTypeT = string, ModelTypeT = string, DataReqT = object> {
|
|
5
|
+
productMap: Record<string, IProduct<LayerT, ProductTypeT, ModelTypeT, DataReqT>>;
|
|
6
|
+
products: IProduct<LayerT, ProductTypeT, ModelTypeT, DataReqT>[];
|
|
7
|
+
groupConfig: IProductGroupConfig[];
|
|
8
|
+
constructor(params: {
|
|
9
|
+
products: IProduct<LayerT, ProductTypeT, ModelTypeT, DataReqT>[];
|
|
10
|
+
groupConfig: IProductGroupConfig[];
|
|
11
|
+
});
|
|
12
|
+
initCtx(ctx: ProductCtx<LayerT, ProductTypeT, ModelTypeT, DataReqT>): void;
|
|
13
|
+
findProduct<P = IProduct<LayerT, ProductTypeT, ModelTypeT, DataReqT>>(type: ProductTypeT): P;
|
|
14
|
+
get firstProduct(): IProduct<LayerT, ProductTypeT, ModelTypeT, DataReqT>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=IProductConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IProductConfig.d.ts","sourceRoot":"","sources":["../../src/interfaces/IProductConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,8BAAsB,cAAc,CAAC,MAAM,GAAG,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,QAAQ,GAAG,MAAM;IAC1G,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAM;IACtF,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAM;IACtE,WAAW,EAAE,mBAAmB,EAAE,CAAC;gBAE9B,MAAM,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QAAC,WAAW,EAAE,mBAAmB,EAAE,CAAA;KAAE;IAWrH,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC;IAMnE,WAAW,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC;IAInG,IAAW,YAAY,yDAEtB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CustomRenderMethodInput } from 'maplibre-gl';
|
|
2
|
+
import * as twgl from 'twgl.js';
|
|
3
|
+
import { Bounds, ICustomLayerInterface, IMap } from '../../types/map';
|
|
4
|
+
export declare abstract class ExCustomLayer implements ICustomLayerInterface {
|
|
5
|
+
abstract onMount(): void;
|
|
6
|
+
abstract onUnMount(): void;
|
|
7
|
+
abstract onRender(options: CustomRenderMethodInput, wraps: number[]): boolean | void;
|
|
8
|
+
id: string;
|
|
9
|
+
type: 'custom';
|
|
10
|
+
map: IMap;
|
|
11
|
+
gl: WebGLRenderingContext | WebGL2RenderingContext;
|
|
12
|
+
protected textureOptions: {
|
|
13
|
+
[key: string]: twgl.TextureOptions;
|
|
14
|
+
};
|
|
15
|
+
protected textures: {
|
|
16
|
+
[key: string]: WebGLTexture;
|
|
17
|
+
};
|
|
18
|
+
private programInfoCache;
|
|
19
|
+
constructor(props: {
|
|
20
|
+
id: string;
|
|
21
|
+
});
|
|
22
|
+
protected createProgramInfo(name: string, options: maplibregl.CustomRenderMethodInput, onVertShader: () => string, onFragShader: () => string): twgl.ProgramInfo;
|
|
23
|
+
protected get gl2(): WebGL2RenderingContext;
|
|
24
|
+
onAdd(map: IMap, gl: WebGLRenderingContext | WebGL2RenderingContext): void;
|
|
25
|
+
onRemove(map: IMap, gl: WebGLRenderingContext | WebGL2RenderingContext): void;
|
|
26
|
+
render(gl: WebGLRenderingContext | WebGL2RenderingContext, options: CustomRenderMethodInput): void;
|
|
27
|
+
rerender(): void;
|
|
28
|
+
protected animationFrameId?: number;
|
|
29
|
+
protected isStop: boolean;
|
|
30
|
+
protected time: number;
|
|
31
|
+
run(fn: (now: number) => void): void;
|
|
32
|
+
stop(): void;
|
|
33
|
+
protected setTextureOptions(gl: WebGLRenderingContext | WebGL2RenderingContext, options: {
|
|
34
|
+
[key: string]: twgl.TextureOptions | WebGLTexture;
|
|
35
|
+
}): void;
|
|
36
|
+
protected readBufferToArray(gl: WebGL2RenderingContext, buffer: WebGLBuffer, bufferSize: number): number[];
|
|
37
|
+
private gridMeshBufferInfo;
|
|
38
|
+
protected getGridMeshBufferInfo(gl: WebGLRenderingContext, bounds: Bounds): twgl.BufferInfo;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ExCustomLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExCustomLayer.d.ts","sourceRoot":"","sources":["../../../src/layers/base/ExCustomLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEtE,8BAAsB,aAAc,YAAW,qBAAqB;IAClE,QAAQ,CAAC,OAAO,IAAI,IAAI;IACxB,QAAQ,CAAC,SAAS,IAAI,IAAI;IAC1B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI;IAE7E,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAY;IAC1B,GAAG,EAAG,IAAI,CAAC;IACX,EAAE,EAAG,qBAAqB,GAAG,sBAAsB,CAAC;IAC3D,SAAS,CAAC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAA;KAAE,CAAM;IACtE,SAAS,CAAC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAM;IACzD,OAAO,CAAC,gBAAgB,CAAuC;gBAEnD,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAIjC,SAAS,CAAC,iBAAiB,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,CAAC,uBAAuB,EAC3C,YAAY,EAAE,MAAM,MAAM,EAC1B,YAAY,EAAE,MAAM,MAAM,GACzB,IAAI,CAAC,WAAW;IAWnB,SAAS,KAAK,GAAG,2BAIhB;IAEM,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,qBAAqB,GAAG,sBAAsB,GAAG,IAAI;IAM1E,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,qBAAqB,GAAG,sBAAsB,GAAG,IAAI;IAI7E,MAAM,CAAC,EAAE,EAAE,qBAAqB,GAAG,sBAAsB,EAAE,OAAO,EAAE,uBAAuB;IAK3F,QAAQ;IAQf,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAa;IAChD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAQ;IACjC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAK;IAE3B,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAetB,IAAI;IAKX,SAAS,CAAC,iBAAiB,CACzB,EAAE,EAAE,qBAAqB,GAAG,sBAAsB,EAClD,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,YAAY,CAAA;KAAE;IAmBhE,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM;IAO/F,OAAO,CAAC,kBAAkB,CAAuC;IAEjE,SAAS,CAAC,qBAAqB,CAAC,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU;CAa5F"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IBaseRenderVo, ICommonRenderVo } from '../../types/gl';
|
|
2
|
+
import { Bounds } from '../../types/map';
|
|
3
|
+
import { MaskLayer } from '../mask/mask-layer';
|
|
4
|
+
import { ExCustomLayer } from './ExCustomLayer';
|
|
5
|
+
export interface IExTimingLayerProps {
|
|
6
|
+
id: string;
|
|
7
|
+
bounds?: Bounds;
|
|
8
|
+
maskLayer?: MaskLayer;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class ExTimingLayer<T extends IBaseRenderVo = ICommonRenderVo> extends ExCustomLayer {
|
|
11
|
+
protected bounds?: Bounds;
|
|
12
|
+
protected isAnimation: boolean;
|
|
13
|
+
protected t: number;
|
|
14
|
+
protected data?: T;
|
|
15
|
+
protected nextData?: T;
|
|
16
|
+
private maskLayer?;
|
|
17
|
+
constructor(props: IExTimingLayerProps);
|
|
18
|
+
setIsAnimation(isAnimation?: boolean): void;
|
|
19
|
+
setBounds(bounds: Bounds): void;
|
|
20
|
+
onMount(): void;
|
|
21
|
+
setMaskLayer(maskLayer: MaskLayer): void;
|
|
22
|
+
updateData(data: T | undefined, nextData: T | undefined, t: number): void;
|
|
23
|
+
clear(): void;
|
|
24
|
+
get maskShaderData(): {
|
|
25
|
+
vs: string;
|
|
26
|
+
fs: string;
|
|
27
|
+
};
|
|
28
|
+
get maskUniforms(): Record<string, any> | undefined;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ExTimingLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExTimingLayer.d.ts","sourceRoot":"","sources":["../../../src/layers/base/ExTimingLayer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,8BAAsB,aAAa,CAAC,CAAC,SAAS,aAAa,GAAG,eAAe,CAAE,SAAQ,aAAa;IAClG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,OAAO,CAAQ;IACtC,SAAS,CAAC,CAAC,SAAK;IAChB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvB,OAAO,CAAC,SAAS,CAAC,CAAY;gBAElB,KAAK,EAAE,mBAAmB;IAMtC,cAAc,CAAC,WAAW,GAAE,OAAc;IAI1C,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,OAAO;IAEP,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM;IA2BlE,KAAK;IAOL,IAAI,cAAc;;;MAEjB;IAED,IAAI,YAAY,oCAEf;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from './base/ExCustomLayer';
|
|
2
|
+
export * from './base/ExTimingLayer';
|
|
3
|
+
export * from './maplibre-color/ColorLayer';
|
|
4
|
+
export * from './maplibre-color/CommonColorLayer';
|
|
5
|
+
export * from './maplibre-color/WindColorLayer';
|
|
6
|
+
export * from './maplibre-contour/ContourLayer';
|
|
7
|
+
export * from './maplibre-contour/ContourValueLayer';
|
|
8
|
+
export * from './maplibre-contour/ContourLayerByValue';
|
|
9
|
+
export * from './maplibre-gridWind/GridWindLayer';
|
|
10
|
+
export * from './maplibre-wind-particle/MapLibreWindParticleLayer';
|
|
11
|
+
export * from './maplibre-3dProfile/Maplibre3DProfileLayer';
|
|
12
|
+
export * from './maplibre-3dProfile-v0/Maplibre3DProfileLayerV0';
|
|
13
|
+
export * from './maplibre-3dProfile-v3/Maplibre3DProfileLayerV3';
|
|
14
|
+
export * from './maplibre-gridValue/GridValueLayer';
|
|
15
|
+
export * from './maplibre-gridValue/GridWindValueLayer';
|
|
16
|
+
export * from './mask/mask-layer';
|
|
17
|
+
export * from './mask/masked-data-layer';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layers/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oDAAoD,CAAC;AACnE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kDAAkD,CAAC;AACjE,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as maplibregl from 'maplibre-gl';
|
|
2
|
+
import * as twgl from 'twgl.js';
|
|
3
|
+
import { IColorPaletteVo } from '../../types/colorPalette';
|
|
4
|
+
import { I3dRenderVo } from '../../types/gl';
|
|
5
|
+
import { ExTimingLayer } from '../base/ExTimingLayer';
|
|
6
|
+
export interface I3DProfileOptions {
|
|
7
|
+
sliceX: number;
|
|
8
|
+
sliceY: number;
|
|
9
|
+
sliceZ: number;
|
|
10
|
+
steps: number;
|
|
11
|
+
threshMin: number;
|
|
12
|
+
threshMax: number;
|
|
13
|
+
opacity: number;
|
|
14
|
+
height: number;
|
|
15
|
+
showVolume: boolean;
|
|
16
|
+
showSlice: boolean;
|
|
17
|
+
showBox: boolean;
|
|
18
|
+
useJitter: boolean;
|
|
19
|
+
showData1: boolean;
|
|
20
|
+
showData2: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare class Maplibre3DProfileLayer extends ExTimingLayer {
|
|
23
|
+
renderingMode: string;
|
|
24
|
+
palette1?: IColorPaletteVo;
|
|
25
|
+
palette2?: IColorPaletteVo;
|
|
26
|
+
options: I3DProfileOptions;
|
|
27
|
+
bufferInfoVol: twgl.BufferInfo;
|
|
28
|
+
bufferInfoSlice: twgl.BufferInfo;
|
|
29
|
+
bufferInfoLine: twgl.BufferInfo;
|
|
30
|
+
onMount(): void;
|
|
31
|
+
onUnMount(): void;
|
|
32
|
+
setOptions(options: Partial<I3DProfileOptions>): void;
|
|
33
|
+
setPalette(palette1: IColorPaletteVo, palette2: IColorPaletteVo): void;
|
|
34
|
+
onRender(options: maplibregl.CustomRenderMethodInput, wraps: number[]): void;
|
|
35
|
+
protected currData1?: I3dRenderVo;
|
|
36
|
+
protected nextData1?: I3dRenderVo;
|
|
37
|
+
protected currData2?: I3dRenderVo;
|
|
38
|
+
protected nextData2?: I3dRenderVo;
|
|
39
|
+
updateData2(currData1: I3dRenderVo, nextData1: I3dRenderVo | undefined, currData2: I3dRenderVo, nextData2: I3dRenderVo | undefined, t: number, options?: {
|
|
40
|
+
magAndMinType?: number;
|
|
41
|
+
}): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=Maplibre3DProfileLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Maplibre3DProfileLayer.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile/Maplibre3DProfileLayer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,sBAAuB,SAAQ,aAAa;IACvD,aAAa,SAAQ;IACrB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAexB;IACF,aAAa,EAAG,IAAI,CAAC,UAAU,CAAC;IAChC,eAAe,EAAG,IAAI,CAAC,UAAU,CAAC;IAClC,cAAc,EAAG,IAAI,CAAC,UAAU,CAAC;IAEjC,OAAO,IAAI,IAAI;IA4Bf,SAAS,IAAI,IAAI;IAEjB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAQ9C,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe;IAmB/D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAoK5E,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;IAClC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;IAClC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;IAClC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;IAElC,WAAW,CACT,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,CAAC,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;CAkF3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box.vs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile/box.vs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,UAAU,CAAC,uBAAuB,WAqB7E,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { mat4 } from 'gl-matrix';
|
|
2
|
+
import * as maplibregl from 'maplibre-gl';
|
|
3
|
+
/**
|
|
4
|
+
* 计算模型变换矩阵
|
|
5
|
+
* 将单位立方体([-0.5, 0.5])变换到地图上的指定区域和高度
|
|
6
|
+
* @param {Array} coords - 四个角点的地理坐标 [[lng, lat], ...]
|
|
7
|
+
* @param {number} h - 垂直高度(米)
|
|
8
|
+
* @returns {mat4} 4x4模型矩阵(变换:平移 -> 旋转 -> 缩放)
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMatrix(coords: maplibregl.LngLatLike[], height: number): mat4;
|
|
11
|
+
//# sourceMappingURL=getMatrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMatrix.d.ts","sourceRoot":"","sources":["../../../../src/layers/maplibre-3dProfile/lib/getMatrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgB/E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 边框线片段着色器 (Line Fragment Shader)
|
|
3
|
+
* 用于渲染体积数据立方体的边框线,简单返回固定颜色
|
|
4
|
+
*/
|
|
5
|
+
export declare const lineFragmentSource = "#version 300 es\nprecision mediump float;\nuniform vec3 u_color; // \u7EBF\u6761\u989C\u8272\nout vec4 fragColor;\nvoid main() { \n fragColor = vec4(u_color, 0.6); // 60%\u4E0D\u900F\u660E\u5EA6\n}\n";
|
|
6
|
+
//# sourceMappingURL=line.fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile/line.fs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,iNAO9B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 切面渲染片段着色器 (Slice Fragment Shader)
|
|
3
|
+
* 用于渲染2D切面,显示体积数据在特定平面上的投影
|
|
4
|
+
* 相比体积渲染,切面渲染更简单:直接采样切面位置的密度值,映射到颜色
|
|
5
|
+
*/
|
|
6
|
+
export declare const sliceFragmentSource = "#version 300 es\nprecision highp float;\nprecision highp sampler3D;\nin vec3 v_localPos; // \u8F93\u5165\uFF1A\u5207\u9762\u9876\u70B9\u7684\u5C40\u90E8\u5750\u6807\n\n// uniform sampler3D u_dataTexture; // \u5F53\u524D\u5E27\u6570\u636E\u7EB9\u7406\n// uniform sampler3D u_dataTextureNext; // \u4E0B\u4E00\u5E27\u6570\u636E\u7EB9\u7406\n// uniform sampler2D u_colorTexture; // \u989C\u8272\u4F20\u9012\u51FD\u6570\n// uniform float u_cmax;\n// uniform float u_cmin;\n\nuniform sampler3D u_currData1;\nuniform sampler3D u_nextData1;\nuniform sampler2D u_colorTexture1;\n\nuniform sampler3D u_currData2;\nuniform sampler3D u_nextData2;\nuniform sampler2D u_colorTexture2;\n\nuniform vec4 u_dataRange1;\nuniform vec4 u_dataRange2;\nuniform vec2 u_colorRange1;\nuniform vec2 u_colorRange2;\nuniform bool u_showData1;\nuniform bool u_showData2;\n\nuniform float u_sliceX, u_sliceY, u_sliceZ; // X/Y/Z\u5207\u9762\u4F4D\u7F6E\nuniform float u_threshMin, u_threshMax; // \u5BC6\u5EA6\u9608\u503C\nuniform float u_mixRatio; // \u65F6\u95F4\u63D2\u503C\u6BD4\u4F8B\n\nout vec4 fragColor;\n\nvec3 getColor(vec4 u_dataRange, vec2 u_colorRange, float density, sampler2D u_colorTexture){\n float curr_data_min_value = u_dataRange.x;\n float curr_data_max_value = u_dataRange.y;\n float next_data_min_value = u_dataRange.z;\n float next_data_max_value = u_dataRange.w;\n float color_min_value = u_colorRange.x;\n float color_max_value = u_colorRange.y;\n\n float min_value = mix(curr_data_min_value,next_data_min_value,u_mixRatio);\n float max_value = mix(curr_data_max_value,next_data_max_value,u_mixRatio);\n float value = density * (max_value - min_value) + min_value;\n float p = (value - color_min_value) / (color_max_value - color_min_value);\n vec3 color = texture(u_colorTexture, vec2(p, 0.5)).rgb;\n return color;\n}\n\nvoid main() {\n vec3 pos = v_localPos;\n // \u88C1\u526A\uFF1A\u53EA\u663E\u793A\u5207\u9762\u4F4D\u7F6E\u4E4B\u524D\u7684\u90E8\u5206\uFF08\u5207\u7247\u529F\u80FD\uFF09\n // 0.002\u662F\u4E3A\u4E86\u907F\u514D\u6D6E\u70B9\u6570\u7CBE\u5EA6\u95EE\u9898\n if (pos.x > u_sliceX + 0.002 || pos.y > u_sliceY + 0.002 || pos.z > u_sliceZ + 0.002) discard;\n // \u5C06\u5C40\u90E8\u5750\u6807[-0.5, 0.5]\u8F6C\u6362\u4E3A\u7EB9\u7406\u5750\u6807[0, 1]\n vec3 texCoord = pos + 0.5;\n\n // \u65F6\u95F4\u63D2\u503C\u91C7\u6837\u5BC6\u5EA6\n // float d1 = texture(u_currData1, texCoord).r;\n // float d2 = texture(u_nextData1, texCoord).r;\n // float density = mix(d1, d2, u_mixRatio);\n\n float density1 = u_showData1 ? mix(texture(u_currData1, texCoord).r, texture(u_nextData1, texCoord).r, u_mixRatio) : 0.0;\n float density2 = u_showData2 ? mix(texture(u_currData2, texCoord).r, texture(u_nextData2, texCoord).r, u_mixRatio) : 0.0;\n float density = density1 > density2 ? density1 : density2;\n bool isDensity1 = density1 > density2 ? true : false;\n\n // \u9608\u503C\u8FC7\u6EE4\uFF1A\u53EA\u663E\u793A\u6307\u5B9A\u5BC6\u5EA6\u8303\u56F4\u5185\u7684\u6570\u636E\n if (density < u_threshMin || density > u_threshMax) discard;\n\n // \u901A\u8FC7\u4F20\u9012\u51FD\u6570\u5C06\u5BC6\u5EA6\u6620\u5C04\u5230\u989C\u8272\n // float p = (density - u_cmin) / (u_cmax - u_cmin);\n // vec3 col = texture(u_colorTexture1, vec2(p, 0.5)).rgb;\n\n vec3 col = isDensity1 ? getColor(u_dataRange1, u_colorRange1, density, u_colorTexture1) : getColor(u_dataRange2, u_colorRange2, density, u_colorTexture2);\n col = pow(col, vec3(0.8)) * 1.1; // Gamma\u6821\u6B63\u548C\u4EAE\u5EA6\u589E\u5F3A\n fragColor = vec4(col, 1.0); // \u5B8C\u5168\u4E0D\u900F\u660E\u7684\u5207\u9762\n}\n";
|
|
7
|
+
//# sourceMappingURL=slice.fs%20copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice.fs copy.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile/slice.fs copy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,2pHA6E/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 切面渲染片段着色器 (Slice Fragment Shader)
|
|
3
|
+
* 用于渲染2D切面,显示体积数据在特定平面上的投影
|
|
4
|
+
* 相比体积渲染,切面渲染更简单:直接采样切面位置的密度值,映射到颜色
|
|
5
|
+
*/
|
|
6
|
+
export declare const sliceFragmentSource = "#version 300 es\nprecision highp float;\nprecision highp sampler3D;\nin vec3 v_localPos; // \u8F93\u5165\uFF1A\u5207\u9762\u9876\u70B9\u7684\u5C40\u90E8\u5750\u6807\n\n// uniform sampler3D u_dataTexture; // \u5F53\u524D\u5E27\u6570\u636E\u7EB9\u7406\n// uniform sampler3D u_dataTextureNext; // \u4E0B\u4E00\u5E27\u6570\u636E\u7EB9\u7406\n// uniform sampler2D u_colorTexture; // \u989C\u8272\u4F20\u9012\u51FD\u6570\n// uniform float u_cmax;\n// uniform float u_cmin;\n\nuniform sampler3D u_currData1;\nuniform sampler3D u_nextData1;\nuniform sampler2D u_colorTexture1;\n\nuniform sampler3D u_currData2;\nuniform sampler3D u_nextData2;\nuniform sampler2D u_colorTexture2;\n\nuniform vec4 u_dataRange1;\nuniform vec4 u_dataRange2;\nuniform vec2 u_colorRange1;\nuniform vec2 u_colorRange2;\nuniform bool u_showData1;\nuniform bool u_showData2;\n\nuniform float u_sliceX, u_sliceY, u_sliceZ; // X/Y/Z\u5207\u9762\u4F4D\u7F6E\nuniform float u_threshMin, u_threshMax; // \u5BC6\u5EA6\u9608\u503C\nuniform float u_mixRatio; // \u65F6\u95F4\u63D2\u503C\u6BD4\u4F8B\n\nout vec4 fragColor;\n\nvec3 getColor(vec4 u_dataRange, vec2 u_colorRange, float density, sampler2D u_colorTexture){\n float curr_data_min_value = u_dataRange.x;\n float curr_data_max_value = u_dataRange.y;\n float next_data_min_value = u_dataRange.z;\n float next_data_max_value = u_dataRange.w;\n float color_min_value = u_colorRange.x;\n float color_max_value = u_colorRange.y;\n\n float min_value = mix(curr_data_min_value,next_data_min_value,u_mixRatio);\n float max_value = mix(curr_data_max_value,next_data_max_value,u_mixRatio);\n float value = density * (max_value - min_value) + min_value;\n float p = (value - color_min_value) / (color_max_value - color_min_value);\n vec3 color = texture(u_colorTexture, vec2(p, 0.5)).rgb;\n return color;\n}\n\nvoid main() {\n vec3 pos = v_localPos;\n // \u88C1\u526A\uFF1A\u53EA\u663E\u793A\u5207\u9762\u4F4D\u7F6E\u4E4B\u524D\u7684\u90E8\u5206\uFF08\u5207\u7247\u529F\u80FD\uFF09\n // 0.002\u662F\u4E3A\u4E86\u907F\u514D\u6D6E\u70B9\u6570\u7CBE\u5EA6\u95EE\u9898\n if (pos.x > u_sliceX + 0.002 || pos.y > u_sliceY + 0.002 || pos.z > u_sliceZ + 0.002) discard;\n // \u5C06\u5C40\u90E8\u5750\u6807[-0.5, 0.5]\u8F6C\u6362\u4E3A\u7EB9\u7406\u5750\u6807[0, 1]\n vec3 texCoord = pos + 0.5;\n\n // \u65F6\u95F4\u63D2\u503C\u91C7\u6837\u5BC6\u5EA6\n float density1 = u_showData1 ? mix(texture(u_currData1, texCoord).r, texture(u_nextData1, texCoord).r, u_mixRatio) : 0.0;\n float density2 = u_showData2 ? mix(texture(u_currData2, texCoord).r, texture(u_nextData2, texCoord).r, u_mixRatio) : 0.0;\n float density = density1 > density2 ? density1 : density2;\n bool isDensity1 = density1 > density2 ? true : false;\n\n // \u9608\u503C\u8FC7\u6EE4\uFF1A\u53EA\u663E\u793A\u6307\u5B9A\u5BC6\u5EA6\u8303\u56F4\u5185\u7684\u6570\u636E\n if (density < u_threshMin || density > u_threshMax) discard;\n\n // \u901A\u8FC7\u4F20\u9012\u51FD\u6570\u5C06\u5BC6\u5EA6\u6620\u5C04\u5230\u989C\u8272\n vec3 col = isDensity1 ? getColor(u_dataRange1, u_colorRange1, density, u_colorTexture1) : getColor(u_dataRange2, u_colorRange2, density, u_colorTexture2);\n col = pow(col, vec3(0.8)) * 1.1; // Gamma\u6821\u6B63\u548C\u4EAE\u5EA6\u589E\u5F3A\n fragColor = vec4(col, 1.0); // \u5B8C\u5168\u4E0D\u900F\u660E\u7684\u5207\u9762\n\n // fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n}\n";
|
|
7
|
+
//# sourceMappingURL=slice.fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile/slice.fs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,m7GAwE/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 体积渲染片段着色器 (Volume Rendering Fragment Shader)
|
|
3
|
+
* 实现Raymarching算法进行体积渲染
|
|
4
|
+
* 核心原理:从摄像机出发,沿着视线方向逐步采样3D纹理,累积颜色和透明度
|
|
5
|
+
*/
|
|
6
|
+
export declare const volumeFragmentSource = "#version 300 es\nprecision highp float;\nprecision highp sampler3D;\n\nin vec3 v_localPos; // \u8F93\u5165\uFF1A\u5F53\u524D\u7247\u6BB5\u5728\u5C40\u90E8\u5750\u6807\u7CFB\u4E2D\u7684\u4F4D\u7F6E\nuniform vec3 u_cameraLocalPos; // \u6444\u50CF\u673A\u5728\u5C40\u90E8\u5750\u6807\u7CFB\u4E2D\u7684\u4F4D\u7F6E\n\nuniform sampler3D u_currData1;\nuniform sampler3D u_nextData1;\nuniform sampler2D u_colorTexture1;\n\nuniform sampler3D u_currData2;\nuniform sampler3D u_nextData2;\nuniform sampler2D u_colorTexture2;\n\nuniform vec4 u_dataRange1;\nuniform vec4 u_dataRange2;\nuniform vec2 u_colorRange1;\nuniform vec2 u_colorRange2;\n\nuniform vec3 u_clipMax; // \u88C1\u526A\u8FB9\u754C\u6700\u5927\u503C\uFF0C\u7528\u4E8E\u9650\u5236\u4F53\u79EF\u6E32\u67D3\u7684\u8303\u56F4\uFF08\u5207\u7247\u529F\u80FD\uFF09\n\nuniform float u_sliceX, u_sliceY, u_sliceZ; // X/Y/Z\u8F74\u7684\u5207\u9762\u4F4D\u7F6E\nuniform float u_steps; // Raymarching\u7684\u91C7\u6837\u6B65\u6570\uFF08\u7CBE\u5EA6\uFF09\nuniform float u_opacity; // \u6574\u4F53\u4E0D\u900F\u660E\u5EA6\u500D\u6570\nuniform float u_threshMin, u_threshMax; // \u5BC6\u5EA6\u9608\u503C\u8303\u56F4\uFF0C\u53EA\u6E32\u67D3\u6B64\u8303\u56F4\u5185\u7684\u4F53\u7D20\nuniform bool u_useJitter; // \u662F\u5426\u4F7F\u7528\u968F\u673A\u6296\u52A8\uFF08\u51CF\u5C11\u5C42\u72B6\u4F2A\u5F71\uFF09\nuniform bool u_showSliceLayer; // \u662F\u5426\u663E\u793A\u5207\u9762\u5C42\uFF08\u5F71\u54CD\u906E\u6321\u68C0\u6D4B\uFF09\nuniform float u_mixRatio; // \u65F6\u95F4\u63D2\u503C\u6BD4\u4F8B [0, 1]\uFF0C\u7528\u4E8E\u5E73\u6ED1\u8FC7\u6E21\u4E24\u5E27\u6570\u636E \n\nuniform bool u_showData1;\nuniform bool u_showData2;\n\nout vec4 fragColor;\n\n/**\n * \u5149\u7EBF\u4E0E\u8F74\u5BF9\u9F50\u5305\u56F4\u76D2\uFF08AABB\uFF09\u6C42\u4EA4\u7B97\u6CD5\n * \u8BA1\u7B97\u4ECEorig\u51FA\u53D1\u3001\u65B9\u5411\u4E3Adir\u7684\u5149\u7EBF\u4E0E\u5355\u4F4D\u7ACB\u65B9\u4F53\uFF08\u53EF\u80FD\u88AB\u88C1\u526A\uFF09\u7684\u76F8\u4EA4\u70B9\n * @param {vec3} orig - \u5149\u7EBF\u8D77\u70B9\uFF08\u6444\u50CF\u673A\u4F4D\u7F6E\uFF09\n * @param {vec3} dir - \u5149\u7EBF\u65B9\u5411\uFF08\u5F52\u4E00\u5316\uFF09\n * @returns {vec2} (tNear, tFar) - \u5149\u7EBF\u8FDB\u5165\u548C\u79BB\u5F00\u76D2\u5B50\u7684\u53C2\u6570\u503C\n */\nvec2 hitBox(vec3 orig, vec3 dir) {\n vec3 boxMin = vec3(-0.5); // \u7ACB\u65B9\u4F53\u6700\u5C0F\u89D2\u70B9\uFF08\u5355\u4F4D\u7ACB\u65B9\u4F53\uFF1A[-0.5, 0.5]\uFF09\n vec3 boxMax = u_clipMax; // \u7ACB\u65B9\u4F53\u6700\u5927\u89D2\u70B9\uFF08\u53EF\u80FD\u88AB\u5207\u7247\u88C1\u526A\uFF09\n vec3 invDir = 1.0 / dir; // \u65B9\u5411\u5411\u91CF\u7684\u5012\u6570\uFF08\u907F\u514D\u9664\u96F6\uFF09\n // \u8BA1\u7B97\u4E0E\u6BCF\u4E2A\u8F74\u5BF9\u9F50\u5E73\u9762\u7684\u4EA4\u70B9\u53C2\u6570\n vec3 tmin = (boxMin - orig) * invDir;\n vec3 tmax = (boxMax - orig) * invDir;\n vec3 t1 = min(tmin, tmax); // \u6BCF\u4E2A\u8F74\u7684\u8FD1\u4EA4\u70B9\n vec3 t2 = max(tmin, tmax); // \u6BCF\u4E2A\u8F74\u7684\u8FDC\u4EA4\u70B9\n // \u8FD1\u4EA4\u70B9\u662F\u6240\u6709\u8F74\u8FD1\u4EA4\u70B9\u7684\u6700\u5927\u503C\uFF0C\u8FDC\u4EA4\u70B9\u662F\u6240\u6709\u8F74\u8FDC\u4EA4\u70B9\u7684\u6700\u5C0F\u503C\n float tNear = max(max(t1.x, t1.y), t1.z);\n float tFar = min(min(t2.x, t2.y), t2.z);\n return vec2(tNear, tFar);\n}\n\nvec3 getColor(vec4 u_dataRange, vec2 u_colorRange, float density, sampler2D u_colorTexture){\n float curr_data_min_value = u_dataRange.x;\n float curr_data_max_value = u_dataRange.y;\n float next_data_min_value = u_dataRange.z;\n float next_data_max_value = u_dataRange.w;\n float color_min_value = u_colorRange.x;\n float color_max_value = u_colorRange.y;\n\n float min_value = mix(curr_data_min_value,next_data_min_value,u_mixRatio);\n float max_value = mix(curr_data_max_value,next_data_max_value,u_mixRatio);\n float value = density * (max_value - min_value) + min_value;\n float p = (value - color_min_value) / (color_max_value - color_min_value);\n vec3 color = texture(u_colorTexture, vec2(p, 0.5)).rgb;\n return color;\n}\n\nvoid main() {\n // fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n // return;\n\n vec3 rayDir = normalize(v_localPos - u_cameraLocalPos); // \u6444\u50CF\u673A\u5230\u7247\u6BB5\u7684\u65B9\u5411\n vec3 rayOrig = u_cameraLocalPos; // \u6444\u50CF\u673A\u4F4D\u7F6E\n \n // 1. Ray-Box Intersection (AABB\u78B0\u649E\u68C0\u6D4B)\n // \u8BA1\u7B97\u5149\u7EBF\u8FDB\u5165\u548C\u79BB\u5F00\u5355\u4F4D\u7ACB\u65B9\u4F53\u7684\u4F4D\u7F6E\uFF0CtNear\u4E3A\u8FDB\u5165\u70B9\uFF0CtFar\u4E3A\u79BB\u5F00\u70B9\n vec2 bounds = hitBox(rayOrig, rayDir);\n float tNear = max(0.0, bounds.x);\n float tFar = bounds.y;\n\n // --- \u7A33\u5065\u89C6\u89D2\u903B\u8F91\uFF1A\u9632\u6B62\u53CC\u91CD\u6E32\u67D3 ---\n // \u5982\u679C\u6211\u4EEC\u5728\u76D2\u5B50\u5916\u9762\uFF0C\u4E14\u770B\u5230\u7684\u662F\u6B63\u9762\uFF0C\u6E32\u67D3\u3002\n // \u5982\u679C\u6211\u4EEC\u5728\u76D2\u5B50\u91CC\u9762\uFF0C\u6B63\u9762\u88AB\u88C1\uFF0C\u53EA\u80FD\u770B\u5230\u80CC\u9762\uFF0C\u6E32\u67D3\u3002\n // \u4F46\u6211\u4EEC\u4E0D\u80FD\u8BA9\u5916\u9762\u7684\u65F6\u5019\uFF0C\u6B63\u9762\u80CC\u9762\u90FD\u6E32\u67D3\u3002\n // gl_FrontFacing: True if front facing.\n // \u6211\u4EEC\u5728 disable(CULL_FACE) \u6A21\u5F0F\u4E0B\u3002\n bool isInside = bounds.x < 0.0;\n \n // \u5982\u679C\u5728\u5916\u9762\uFF0C\u4E14\u5F53\u524D\u753B\u7684\u662F\u80CC\u9762 -> \u4E22\u5F03\uFF08\u53EA\u8BA9\u6B63\u9762\u753B\uFF09\n // \u5982\u679C\u5728\u91CC\u9762\uFF0C\u6B63\u9762\u770B\u4E0D\u89C1\uFF0C\u5F53\u524D\u753B\u7684\u662F\u80CC\u9762 -> \u4FDD\u7559\n // \u6CE8\u610F\uFF1AGL \u9ED8\u8BA4 CCW\u3002\n if (!isInside && !gl_FrontFacing) discard;\n\n if (bounds.x > bounds.y || bounds.y < 0.0) discard;\n\n // --- \u906E\u6321\u68C0\u6D4B ---\n vec3 entryPos = rayOrig + rayDir * tNear;\n float eps = 0.001;\n bool hitSliceFace = false;\n \n // \u53EA\u6709\u5F53\u663E\u793A\u5207\u9762\u5C42\u65F6\uFF0C\u624D\u9700\u8981\u505A\u906E\u6321\u68C0\u6D4B\n if (u_showSliceLayer) {\n if (u_sliceX < 0.495 && abs(entryPos.x - u_sliceX) < eps) hitSliceFace = true;\n if (u_sliceY < 0.495 && abs(entryPos.y - u_sliceY) < eps) hitSliceFace = true;\n if (u_sliceZ < 0.495 && abs(entryPos.z - u_sliceZ) < eps) hitSliceFace = true;\n }\n\n if (hitSliceFace) {\n float d1 = texture(u_currData1, entryPos + 0.5).r;\n float d2 = texture(u_nextData1, entryPos + 0.5).r;\n float d = mix(d1, d2, u_mixRatio);\n if (d >= u_threshMin && d <= u_threshMax) discard; \n }\n \n // 3. Raymarching Loop (\u5149\u7EBF\u6B65\u8FDB\u5FAA\u73AF)\n float stepSize = 1.732 / u_steps; // \u6B65\u957F\uFF1A\u6839\u53F73(\u7ACB\u65B9\u4F53\u5BF9\u89D2\u7EBF) / \u6B65\u6570\n float offset = 0.0;\n if (u_useJitter) {\n // \u968F\u673A\u6296\u52A8\u8D77\u59CB\u4F4D\u7F6E\uFF0C\u6D88\u9664\u5C42\u72B6\u4F2A\u5F71 (Wood-grain artifacts)\n float rand = fract(sin(dot(gl_FragCoord.xy, vec2(12.9898, 78.233))) * 43758.5453);\n offset = stepSize * rand;\n }\n float tCurrent = tNear + offset;\n vec4 accColor = vec4(0.0); // \u7D2F\u79EF\u989C\u8272 (RGB + Alpha)\n\n for(int i=0; i<600; i++) {\n // \u7EC8\u6B62\u6761\u4EF6\uFF1A\u8D85\u8FC7\u6B65\u6570\u9650\u5236\u3001\u5149\u7EBF\u7A7F\u51FA\u76D2\u5B50\u3001\u6216\u8005\u4E0D\u900F\u660E\u5EA6\u9971\u548C(>0.99)\n if(float(i) >= u_steps * 2.0 || tCurrent >= tFar || accColor.a >= 0.99) break;\n \n vec3 pos = rayOrig + rayDir * tCurrent;\n vec3 texCoord = pos + 0.5; // [-0.5, 0.5] -> [0, 1] \u7EB9\u7406\u5750\u6807\n\n // 4. Sample Density (\u91C7\u6837\u5BC6\u5EA6)\n float density1 = u_showData1 ? mix(texture(u_currData1, texCoord).r, texture(u_nextData1, texCoord).r, u_mixRatio) : 0.0;\n float density2 = u_showData2 ? mix(texture(u_currData2, texCoord).r, texture(u_nextData2, texCoord).r, u_mixRatio) : 0.0;\n float density = density1 > density2 ? density1 : density2;\n bool isDensity1 = density1 > density2 ? true : false;\n\n // 5. Transfer Function (\u4F20\u9012\u51FD\u6570\uFF1A\u5BC6\u5EA6 -> \u989C\u8272/\u4E0D\u900F\u660E\u5EA6)\n if (density >= u_threshMin && density <= u_threshMax) {\n vec3 col = isDensity1 ? getColor(u_dataRange1, u_colorRange1, density, u_colorTexture1) : getColor(u_dataRange2, u_colorRange2, density, u_colorTexture2);\n col = pow(col, vec3(0.9)); // Gamma\u6821\u6B63\n col *= (0.6 + 0.6 * texCoord.z); // \u7B80\u5355\u7684\u9AD8\u5EA6\u9634\u5F71\u6A21\u62DF\n \n // \u8BA1\u7B97\u900F\u660E\u5EA6\uFF1A\u57FA\u4E8E\u5BC6\u5EA6\u7684\u5E73\u6ED1\u8FC7\u6E21\n float alphaCurve = smoothstep(u_threshMin, u_threshMin + 0.15, density);\n float alpha = alphaCurve * stepSize * 40.0 * u_opacity * (1.0 + 0.5 * texCoord.z); \n \n // 6. Front-to-Back Blending (\u4ECE\u524D\u5411\u540E\u6DF7\u5408)\n // accum.rgb += color * alpha * (1.0 - accum.a)\n accColor.rgb += col * alpha * (1.0 - accColor.a);\n accColor.a += alpha * (1.0 - accColor.a);\n }\n tCurrent += stepSize;\n }\n if (accColor.a < 0.01) discard;\n fragColor = accColor;\n}\n";
|
|
7
|
+
//# sourceMappingURL=volume.fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile/volume.fs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,6ySAoKhC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as maplibregl from 'maplibre-gl';
|
|
2
|
+
import * as twgl from 'twgl.js';
|
|
3
|
+
import { IColorPaletteVo } from '../../types/colorPalette';
|
|
4
|
+
import { I3dRenderVo } from '../../types/gl';
|
|
5
|
+
import { ExTimingLayer } from '../base/ExTimingLayer';
|
|
6
|
+
interface I3DProfileOptions {
|
|
7
|
+
sliceX: number;
|
|
8
|
+
sliceY: number;
|
|
9
|
+
sliceZ: number;
|
|
10
|
+
steps: number;
|
|
11
|
+
threshMin: number;
|
|
12
|
+
threshMax: number;
|
|
13
|
+
opacity: number;
|
|
14
|
+
height: number;
|
|
15
|
+
showVolume: boolean;
|
|
16
|
+
showSlice: boolean;
|
|
17
|
+
showBox: boolean;
|
|
18
|
+
useJitter: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare class Maplibre3DProfileLayerV0 extends ExTimingLayer {
|
|
21
|
+
renderingMode: string;
|
|
22
|
+
palette?: IColorPaletteVo;
|
|
23
|
+
options: I3DProfileOptions;
|
|
24
|
+
bufferInfoVol: twgl.BufferInfo;
|
|
25
|
+
bufferInfoSlice: twgl.BufferInfo;
|
|
26
|
+
bufferInfoLine: twgl.BufferInfo;
|
|
27
|
+
onMount(): void;
|
|
28
|
+
onUnMount(): void;
|
|
29
|
+
setOptions(options: Partial<I3DProfileOptions>): void;
|
|
30
|
+
setPalette(palette: IColorPaletteVo): void;
|
|
31
|
+
onRender(options: maplibregl.CustomRenderMethodInput, wraps: number[]): void;
|
|
32
|
+
updateData(data: I3dRenderVo | undefined, nextData: I3dRenderVo | undefined | undefined, t: number, options?: {
|
|
33
|
+
magAndMinType?: number;
|
|
34
|
+
}): void;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=Maplibre3DProfileLayerV0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Maplibre3DProfileLayerV0.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile-v0/Maplibre3DProfileLayerV0.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtD,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,wBAAyB,SAAQ,aAAa;IACzD,aAAa,SAAQ;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAaxB;IACF,aAAa,EAAG,IAAI,CAAC,UAAU,CAAC;IAChC,eAAe,EAAG,IAAI,CAAC,UAAU,CAAC;IAClC,cAAc,EAAG,IAAI,CAAC,UAAU,CAAC;IAEjC,OAAO,IAAI,IAAI;IA4Bf,SAAS,IAAI,IAAI;IAEjB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAQ9C,UAAU,CAAC,OAAO,EAAE,eAAe;IAYnC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAqK5E,UAAU,CACR,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,EAC7C,CAAC,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;CA2C3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.vs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile-v0/common.vs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,UAAU,CAAC,uBAAuB,WA6BhF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { mat4 } from 'gl-matrix';
|
|
2
|
+
import * as maplibregl from 'maplibre-gl';
|
|
3
|
+
/**
|
|
4
|
+
* 计算模型变换矩阵
|
|
5
|
+
* 将单位立方体([-0.5, 0.5])变换到地图上的指定区域和高度
|
|
6
|
+
* @param {Array} coords - 四个角点的地理坐标 [[lng, lat], ...]
|
|
7
|
+
* @param {number} h - 垂直高度(米)
|
|
8
|
+
* @returns {mat4} 4x4模型矩阵(变换:平移 -> 旋转 -> 缩放)
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMatrix(coords: maplibregl.LngLatLike[], h: number): mat4;
|
|
11
|
+
//# sourceMappingURL=getMatrix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMatrix.d.ts","sourceRoot":"","sources":["../../../../src/layers/maplibre-3dProfile-v0/lib/getMatrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAgB1E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 边框线片段着色器 (Line Fragment Shader)
|
|
3
|
+
* 用于渲染体积数据立方体的边框线,简单返回固定颜色
|
|
4
|
+
*/
|
|
5
|
+
export declare const lineFragmentSource = "#version 300 es\nprecision mediump float;\n\nuniform vec3 u_color; // \u7EBF\u6761\u989C\u8272\n\nout vec4 fragColor;\n\nvoid main() { \n fragColor = vec4(u_color, 1.0); // 60%\u4E0D\u900F\u660E\u5EA6\n}\n";
|
|
6
|
+
//# sourceMappingURL=line.fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile-v0/line.fs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,uNAU9B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 切面渲染片段着色器 (Slice Fragment Shader)
|
|
3
|
+
* 用于渲染2D切面,显示体积数据在特定平面上的投影
|
|
4
|
+
* 相比体积渲染,切面渲染更简单:直接采样切面位置的密度值,映射到颜色
|
|
5
|
+
*/
|
|
6
|
+
export declare const sliceFragmentSource = "#version 300 es\nprecision highp float;\nprecision highp sampler3D;\n\nin vec3 v_localPos;\n\nuniform sampler3D u_dataTexture; // \u5F53\u524D\u5E27\u6570\u636E\u7EB9\u7406\nuniform sampler3D u_dataTextureNext; // \u4E0B\u4E00\u5E27\u6570\u636E\u7EB9\u7406\nuniform sampler2D u_colorTexture; // \u989C\u8272\u4F20\u9012\u51FD\u6570\n\nuniform float u_sliceX, u_sliceY, u_sliceZ; // X/Y/Z\u5207\u9762\u4F4D\u7F6E\nuniform float u_threshMin, u_threshMax; // \u5BC6\u5EA6\u9608\u503C\nuniform float u_mixRatio; // \u65F6\u95F4\u63D2\u503C\u6BD4\u4F8B\n\nuniform float u_vmin0;\nuniform float u_vmax0;\nuniform float u_vmin1;\nuniform float u_vmax1;\nuniform float u_cmax;\nuniform float u_cmin;\n\nout vec4 fragColor;\n\nvoid main() {\n vec3 pos = v_localPos;\n\n // \u88C1\u526A\uFF1A\u53EA\u663E\u793A\u5207\u9762\u4F4D\u7F6E\u4E4B\u524D\u7684\u90E8\u5206\uFF08\u5207\u7247\u529F\u80FD\uFF09\n // 0.002\u662F\u4E3A\u4E86\u907F\u514D\u6D6E\u70B9\u6570\u7CBE\u5EA6\u95EE\u9898\n if (pos.x > u_sliceX + 0.002 || pos.y > u_sliceY + 0.002 || pos.z > u_sliceZ + 0.002) discard;\n\n // \u5C06\u5C40\u90E8\u5750\u6807[-0.5, 0.5]\u8F6C\u6362\u4E3A\u7EB9\u7406\u5750\u6807[0, 1]\n vec3 texCoord = pos + 0.5;\n\n // \u65F6\u95F4\u63D2\u503C\u91C7\u6837\u5BC6\u5EA6\n float d1 = texture(u_dataTexture, texCoord).r;\n float d2 = texture(u_dataTextureNext, texCoord).r;\n float density = mix(d1, d2, u_mixRatio);\n\n // \u9608\u503C\u8FC7\u6EE4\uFF1A\u53EA\u663E\u793A\u6307\u5B9A\u5BC6\u5EA6\u8303\u56F4\u5185\u7684\u6570\u636E\n if (density < u_threshMin || density > u_threshMax) discard;\n\n // \u901A\u8FC7\u4F20\u9012\u51FD\u6570\u5C06\u5BC6\u5EA6\u6620\u5C04\u5230\u989C\u8272\n float u_vmax = mix(u_vmax0,u_vmax1,u_mixRatio);\n float u_vmin = mix(u_vmin0,u_vmin1,u_mixRatio);\n float v = density * (u_vmax - u_vmin) + u_vmin;\n float p = (v - u_cmin) / (u_cmax - u_cmin);\n vec3 col = texture(u_colorTexture, vec2(p, 0.5)).rgb;\n col = pow(col, vec3(0.8)) * 1.1; // Gamma\u6821\u6B63\u548C\u4EAE\u5EA6\u589E\u5F3A\n fragColor = vec4(col, 1.0); // \u5B8C\u5168\u4E0D\u900F\u660E\u7684\u5207\u9762\n}\n";
|
|
7
|
+
//# sourceMappingURL=slice.fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slice.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile-v0/slice.fs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,wpEAkD/B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 体积渲染片段着色器 (Volume Rendering Fragment Shader)
|
|
3
|
+
* 实现Raymarching算法进行体积渲染
|
|
4
|
+
* 核心原理:从摄像机出发,沿着视线方向逐步采样3D纹理,累积颜色和透明度
|
|
5
|
+
*/
|
|
6
|
+
export declare const volumeFragmentSource = "#version 300 es\nprecision highp float;\nprecision highp sampler3D;\n\nin vec3 v_localPos; // \u8F93\u5165\uFF1A\u5F53\u524D\u7247\u6BB5\u5728\u5C40\u90E8\u5750\u6807\u7CFB\u4E2D\u7684\u4F4D\u7F6E\nuniform vec3 u_cameraLocalPos; // \u6444\u50CF\u673A\u5728\u5C40\u90E8\u5750\u6807\u7CFB\u4E2D\u7684\u4F4D\u7F6E\n\nuniform sampler3D u_dataTexture; // \u5F53\u524D\u5E27\u76843D\u6570\u636E\u7EB9\u7406\uFF08\u5BC6\u5EA6\u573A\uFF09\nuniform sampler3D u_dataTextureNext; // \u4E0B\u4E00\u5E27\u76843D\u6570\u636E\u7EB9\u7406\uFF08\u7528\u4E8E\u65F6\u95F4\u63D2\u503C\uFF09\nuniform sampler2D u_colorTexture; // \u989C\u8272\u4F20\u9012\u51FD\u6570\u7EB9\u7406\uFF08\u5C06\u5BC6\u5EA6\u6620\u5C04\u5230\u989C\u8272\uFF09\nuniform float u_vmin0;\nuniform float u_vmax0;\nuniform float u_vmin1;\nuniform float u_vmax1;\nuniform float u_cmax;\nuniform float u_cmin;\n\nuniform vec3 u_clipMax; // \u88C1\u526A\u8FB9\u754C\u6700\u5927\u503C\uFF0C\u7528\u4E8E\u9650\u5236\u4F53\u79EF\u6E32\u67D3\u7684\u8303\u56F4\uFF08\u5207\u7247\u529F\u80FD\uFF09\n\nuniform float u_sliceX, u_sliceY, u_sliceZ; // X/Y/Z\u8F74\u7684\u5207\u9762\u4F4D\u7F6E\nuniform float u_steps; // Raymarching\u7684\u91C7\u6837\u6B65\u6570\uFF08\u7CBE\u5EA6\uFF09\nuniform float u_opacity; // \u6574\u4F53\u4E0D\u900F\u660E\u5EA6\u500D\u6570\nuniform float u_threshMin, u_threshMax; // \u5BC6\u5EA6\u9608\u503C\u8303\u56F4\uFF0C\u53EA\u6E32\u67D3\u6B64\u8303\u56F4\u5185\u7684\u4F53\u7D20\nuniform bool u_useJitter; // \u662F\u5426\u4F7F\u7528\u968F\u673A\u6296\u52A8\uFF08\u51CF\u5C11\u5C42\u72B6\u4F2A\u5F71\uFF09\nuniform bool u_showSliceLayer; // \u662F\u5426\u663E\u793A\u5207\u9762\u5C42\uFF08\u5F71\u54CD\u906E\u6321\u68C0\u6D4B\uFF09\nuniform float u_mixRatio; // \u65F6\u95F4\u63D2\u503C\u6BD4\u4F8B [0, 1]\uFF0C\u7528\u4E8E\u5E73\u6ED1\u8FC7\u6E21\u4E24\u5E27\u6570\u636E \n\nout vec4 fragColor;\n\n/**\n * \u5149\u7EBF\u4E0E\u8F74\u5BF9\u9F50\u5305\u56F4\u76D2\uFF08AABB\uFF09\u6C42\u4EA4\u7B97\u6CD5\n * \u8BA1\u7B97\u4ECEorig\u51FA\u53D1\u3001\u65B9\u5411\u4E3Adir\u7684\u5149\u7EBF\u4E0E\u5355\u4F4D\u7ACB\u65B9\u4F53\uFF08\u53EF\u80FD\u88AB\u88C1\u526A\uFF09\u7684\u76F8\u4EA4\u70B9\n * @param {vec3} orig - \u5149\u7EBF\u8D77\u70B9\uFF08\u6444\u50CF\u673A\u4F4D\u7F6E\uFF09\n * @param {vec3} dir - \u5149\u7EBF\u65B9\u5411\uFF08\u5F52\u4E00\u5316\uFF09\n * @returns {vec2} (tNear, tFar) - \u5149\u7EBF\u8FDB\u5165\u548C\u79BB\u5F00\u76D2\u5B50\u7684\u53C2\u6570\u503C\n */\nvec2 hitBox(vec3 orig, vec3 dir) {\n vec3 boxMin = vec3(-0.5); // \u7ACB\u65B9\u4F53\u6700\u5C0F\u89D2\u70B9\uFF08\u5355\u4F4D\u7ACB\u65B9\u4F53\uFF1A[-0.5, 0.5]\uFF09\n vec3 boxMax = u_clipMax; // \u7ACB\u65B9\u4F53\u6700\u5927\u89D2\u70B9\uFF08\u53EF\u80FD\u88AB\u5207\u7247\u88C1\u526A\uFF09\n vec3 invDir = 1.0 / dir; // \u65B9\u5411\u5411\u91CF\u7684\u5012\u6570\uFF08\u907F\u514D\u9664\u96F6\uFF09\n // \u8BA1\u7B97\u4E0E\u6BCF\u4E2A\u8F74\u5BF9\u9F50\u5E73\u9762\u7684\u4EA4\u70B9\u53C2\u6570\n vec3 tmin = (boxMin - orig) * invDir;\n vec3 tmax = (boxMax - orig) * invDir;\n vec3 t1 = min(tmin, tmax); // \u6BCF\u4E2A\u8F74\u7684\u8FD1\u4EA4\u70B9\n vec3 t2 = max(tmin, tmax); // \u6BCF\u4E2A\u8F74\u7684\u8FDC\u4EA4\u70B9\n // \u8FD1\u4EA4\u70B9\u662F\u6240\u6709\u8F74\u8FD1\u4EA4\u70B9\u7684\u6700\u5927\u503C\uFF0C\u8FDC\u4EA4\u70B9\u662F\u6240\u6709\u8F74\u8FDC\u4EA4\u70B9\u7684\u6700\u5C0F\u503C\n float tNear = max(max(t1.x, t1.y), t1.z);\n float tFar = min(min(t2.x, t2.y), t2.z);\n return vec2(tNear, tFar);\n}\n\nvoid main() {\n // fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n // return;\n\n vec3 rayDir = normalize(v_localPos - u_cameraLocalPos); // \u6444\u50CF\u673A\u5230\u7247\u6BB5\u7684\u65B9\u5411\n vec3 rayOrig = u_cameraLocalPos; // \u6444\u50CF\u673A\u4F4D\u7F6E\n \n // 1. Ray-Box Intersection (AABB\u78B0\u649E\u68C0\u6D4B)\n // \u8BA1\u7B97\u5149\u7EBF\u8FDB\u5165\u548C\u79BB\u5F00\u5355\u4F4D\u7ACB\u65B9\u4F53\u7684\u4F4D\u7F6E\uFF0CtNear\u4E3A\u8FDB\u5165\u70B9\uFF0CtFar\u4E3A\u79BB\u5F00\u70B9\n vec2 bounds = hitBox(rayOrig, rayDir);\n float tNear = max(0.0, bounds.x);\n float tFar = bounds.y;\n\n // --- \u7A33\u5065\u89C6\u89D2\u903B\u8F91\uFF1A\u9632\u6B62\u53CC\u91CD\u6E32\u67D3 ---\n // \u5982\u679C\u6211\u4EEC\u5728\u76D2\u5B50\u5916\u9762\uFF0C\u4E14\u770B\u5230\u7684\u662F\u6B63\u9762\uFF0C\u6E32\u67D3\u3002\n // \u5982\u679C\u6211\u4EEC\u5728\u76D2\u5B50\u91CC\u9762\uFF0C\u6B63\u9762\u88AB\u88C1\uFF0C\u53EA\u80FD\u770B\u5230\u80CC\u9762\uFF0C\u6E32\u67D3\u3002\n // \u4F46\u6211\u4EEC\u4E0D\u80FD\u8BA9\u5916\u9762\u7684\u65F6\u5019\uFF0C\u6B63\u9762\u80CC\u9762\u90FD\u6E32\u67D3\u3002\n // gl_FrontFacing: True if front facing.\n // \u6211\u4EEC\u5728 disable(CULL_FACE) \u6A21\u5F0F\u4E0B\u3002\n bool isInside = bounds.x < 0.0;\n \n // \u5982\u679C\u5728\u5916\u9762\uFF0C\u4E14\u5F53\u524D\u753B\u7684\u662F\u80CC\u9762 -> \u4E22\u5F03\uFF08\u53EA\u8BA9\u6B63\u9762\u753B\uFF09\n // \u5982\u679C\u5728\u91CC\u9762\uFF0C\u6B63\u9762\u770B\u4E0D\u89C1\uFF0C\u5F53\u524D\u753B\u7684\u662F\u80CC\u9762 -> \u4FDD\u7559\n // \u6CE8\u610F\uFF1AGL \u9ED8\u8BA4 CCW\u3002\n if (!isInside && !gl_FrontFacing) discard;\n\n if (bounds.x > bounds.y || bounds.y < 0.0) discard;\n\n // --- \u906E\u6321\u68C0\u6D4B ---\n vec3 entryPos = rayOrig + rayDir * tNear;\n float eps = 0.001;\n bool hitSliceFace = false;\n \n // \u53EA\u6709\u5F53\u663E\u793A\u5207\u9762\u5C42\u65F6\uFF0C\u624D\u9700\u8981\u505A\u906E\u6321\u68C0\u6D4B\n if (u_showSliceLayer) {\n if (u_sliceX < 0.495 && abs(entryPos.x - u_sliceX) < eps) hitSliceFace = true;\n if (u_sliceY < 0.495 && abs(entryPos.y - u_sliceY) < eps) hitSliceFace = true;\n if (u_sliceZ < 0.495 && abs(entryPos.z - u_sliceZ) < eps) hitSliceFace = true;\n }\n\n if (hitSliceFace) {\n float d1 = texture(u_dataTexture, entryPos + 0.5).r;\n float d2 = texture(u_dataTextureNext, entryPos + 0.5).r;\n float d = mix(d1, d2, u_mixRatio);\n if (d >= u_threshMin && d <= u_threshMax) discard; \n }\n \n // 3. Raymarching Loop (\u5149\u7EBF\u6B65\u8FDB\u5FAA\u73AF)\n float stepSize = 1.732 / u_steps; // \u6B65\u957F\uFF1A\u6839\u53F73(\u7ACB\u65B9\u4F53\u5BF9\u89D2\u7EBF) / \u6B65\u6570\n float offset = 0.0;\n if (u_useJitter) {\n // \u968F\u673A\u6296\u52A8\u8D77\u59CB\u4F4D\u7F6E\uFF0C\u6D88\u9664\u5C42\u72B6\u4F2A\u5F71 (Wood-grain artifacts)\n float rand = fract(sin(dot(gl_FragCoord.xy, vec2(12.9898, 78.233))) * 43758.5453);\n offset = stepSize * rand;\n }\n float tCurrent = tNear + offset;\n vec4 accColor = vec4(0.0); // \u7D2F\u79EF\u989C\u8272 (RGB + Alpha)\n\n for(int i=0; i<600; i++) {\n // \u7EC8\u6B62\u6761\u4EF6\uFF1A\u8D85\u8FC7\u6B65\u6570\u9650\u5236\u3001\u5149\u7EBF\u7A7F\u51FA\u76D2\u5B50\u3001\u6216\u8005\u4E0D\u900F\u660E\u5EA6\u9971\u548C(>0.99)\n if(float(i) >= u_steps * 2.0 || tCurrent >= tFar || accColor.a >= 0.99) break;\n \n vec3 pos = rayOrig + rayDir * tCurrent;\n vec3 texCoord = pos + 0.5; // [-0.5, 0.5] -> [0, 1] \u7EB9\u7406\u5750\u6807\n\n // 4. Sample Density (\u91C7\u6837\u5BC6\u5EA6)\n float d1 = texture(u_dataTexture, texCoord).r;\n float d2 = texture(u_dataTextureNext, texCoord).r;\n float density = mix(d1, d2, u_mixRatio); // \u65F6\u95F4\u63D2\u503C\n\n // 5. Transfer Function (\u4F20\u9012\u51FD\u6570\uFF1A\u5BC6\u5EA6 -> \u989C\u8272/\u4E0D\u900F\u660E\u5EA6)\n if (density >= u_threshMin && density <= u_threshMax) {\n float u_vmax = mix(u_vmax0,u_vmax1,u_mixRatio);\n float u_vmin = mix(u_vmin0,u_vmin1,u_mixRatio);\n float v = density * (u_vmax - u_vmin) + u_vmin;\n float p = (v - u_cmin) / (u_cmax - u_cmin);\n vec3 col = texture(u_colorTexture, vec2(p, 0.5)).rgb;\n col = pow(col, vec3(0.9)); // Gamma\u6821\u6B63\n col *= (0.6 + 0.6 * texCoord.z); // \u7B80\u5355\u7684\u9AD8\u5EA6\u9634\u5F71\u6A21\u62DF\n \n // \u8BA1\u7B97\u900F\u660E\u5EA6\uFF1A\u57FA\u4E8E\u5BC6\u5EA6\u7684\u5E73\u6ED1\u8FC7\u6E21\n float alphaCurve = smoothstep(u_threshMin, u_threshMin + 0.15, density);\n float alpha = alphaCurve * stepSize * 40.0 * u_opacity * (1.0 + 0.5 * texCoord.z); \n \n // 6. Front-to-Back Blending (\u4ECE\u524D\u5411\u540E\u6DF7\u5408)\n // accum.rgb += color * alpha * (1.0 - accum.a)\n accColor.rgb += col * alpha * (1.0 - accColor.a);\n accColor.a += alpha * (1.0 - accColor.a);\n }\n tCurrent += stepSize;\n }\n if (accColor.a < 0.01) discard;\n fragColor = accColor;\n}\n";
|
|
7
|
+
//# sourceMappingURL=volume.fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume.fs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile-v0/volume.fs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,+qRAiJhC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as maplibregl from 'maplibre-gl';
|
|
2
|
+
import * as twgl from 'twgl.js';
|
|
3
|
+
import { IColorPaletteVo } from '../../types/colorPalette';
|
|
4
|
+
import { I3dRenderVo } from '../../types/gl';
|
|
5
|
+
import { Bounds } from '../../types/map';
|
|
6
|
+
import { ExTimingLayer } from '../base/ExTimingLayer';
|
|
7
|
+
interface I3DProfileOptions {
|
|
8
|
+
sliceX: number;
|
|
9
|
+
sliceY: number;
|
|
10
|
+
sliceZ: number;
|
|
11
|
+
steps: number;
|
|
12
|
+
threshMin: number;
|
|
13
|
+
threshMax: number;
|
|
14
|
+
opacity: number;
|
|
15
|
+
height: number;
|
|
16
|
+
showVolume: boolean;
|
|
17
|
+
showSlice: boolean;
|
|
18
|
+
showBox: boolean;
|
|
19
|
+
useJitter: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class Maplibre3DProfileLayerV3 extends ExTimingLayer {
|
|
22
|
+
renderingMode: string;
|
|
23
|
+
palette?: IColorPaletteVo;
|
|
24
|
+
options: I3DProfileOptions;
|
|
25
|
+
bufferInfoVol: twgl.BufferInfo;
|
|
26
|
+
bufferInfoSlice: twgl.BufferInfo;
|
|
27
|
+
bufferInfoLine: twgl.BufferInfo;
|
|
28
|
+
private opacity;
|
|
29
|
+
private height;
|
|
30
|
+
private adaptiveSubdivision;
|
|
31
|
+
private fixedSubdivisions;
|
|
32
|
+
onMount(): void;
|
|
33
|
+
onUnMount(): void;
|
|
34
|
+
setOptions(options: Partial<I3DProfileOptions>): void;
|
|
35
|
+
setPalette(palette: IColorPaletteVo): void;
|
|
36
|
+
private gridMeshBufferInfoCache;
|
|
37
|
+
protected getGridMeshBufferInfo3D(gl: WebGLRenderingContext, bounds: Bounds): twgl.BufferInfo;
|
|
38
|
+
onRender(options: maplibregl.CustomRenderMethodInput, wraps: number[]): void;
|
|
39
|
+
updateData(data: I3dRenderVo | undefined, nextData: I3dRenderVo | undefined | undefined, t: number, options?: {
|
|
40
|
+
magAndMinType?: number;
|
|
41
|
+
}): void;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=Maplibre3DProfileLayerV3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Maplibre3DProfileLayerV3.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile-v3/Maplibre3DProfileLayerV3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtD,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,wBAAyB,SAAQ,aAAa;IACzD,aAAa,SAAQ;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAaxB;IACF,aAAa,EAAG,IAAI,CAAC,UAAU,CAAC;IAChC,eAAe,EAAG,IAAI,CAAC,UAAU,CAAC;IAClC,cAAc,EAAG,IAAI,CAAC,UAAU,CAAC;IAEjC,OAAO,CAAC,OAAO,CAAe;IAG9B,OAAO,CAAC,MAAM,CAAkB;IAGhC,OAAO,CAAC,mBAAmB,CAAiB;IAI5C,OAAO,CAAC,iBAAiB,CAAe;IAExC,OAAO,IAAI,IAAI;IAEf,SAAS,IAAI,IAAI;IAEjB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAQ9C,UAAU,CAAC,OAAO,EAAE,eAAe;IAYnC,OAAO,CAAC,uBAAuB,CAAuC;IAEtE,SAAS,CAAC,uBAAuB,CAAC,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU;IAwB7F,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAyF5E,UAAU,CACR,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,EAC7C,CAAC,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;CA2C3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.vs.d.ts","sourceRoot":"","sources":["../../../src/layers/maplibre-3dProfile-v3/common.vs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,UAAU,CAAC,uBAAuB,WA+BhF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
import { IMap } from '../../../types/map';
|
|
3
|
+
/**
|
|
4
|
+
* 计算光源位置(mercator和globe投影)
|
|
5
|
+
* @param map - MapLibre地图实例
|
|
6
|
+
* @returns 包含lightPosVec和lightPosGlobe的对象
|
|
7
|
+
*/
|
|
8
|
+
export declare function calculateLightPositions(map: IMap): {
|
|
9
|
+
lightPosVec: vec3;
|
|
10
|
+
lightPosGlobe: vec3;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=calculateLightPositions.d.ts.map
|