diff --git a/apps/geoportal/src/app/components/GeoportalMap/GeoportalMap.tsx b/apps/geoportal/src/app/components/GeoportalMap/GeoportalMap.tsx index a720324d..312a793e 100644 --- a/apps/geoportal/src/app/components/GeoportalMap/GeoportalMap.tsx +++ b/apps/geoportal/src/app/components/GeoportalMap/GeoportalMap.tsx @@ -484,7 +484,7 @@ export const GeoportalMap = () => { pointerEvents: isMode2d ? "none" : "auto", }} > - + )} diff --git a/apps/geoportal/src/app/config/app.config.ts b/apps/geoportal/src/app/config/app.config.ts index 0ded8561..fbb28ea7 100644 --- a/apps/geoportal/src/app/config/app.config.ts +++ b/apps/geoportal/src/app/config/app.config.ts @@ -11,6 +11,9 @@ export const CESIUM_CONFIG: CesiumConfig = { duration: 100, }, }, + camera: { + minPitch: 30 + }, baseUrl: `${APP_BASE_PATH}${CESIUM_PATHNAME}`, pathName: CESIUM_PATHNAME, }; diff --git a/libraries/mapping/engines/cesium/src/lib/CustomViewer/CustomViewer.tsx b/libraries/mapping/engines/cesium/src/lib/CustomViewer/CustomViewer.tsx index 17574194..e4625040 100644 --- a/libraries/mapping/engines/cesium/src/lib/CustomViewer/CustomViewer.tsx +++ b/libraries/mapping/engines/cesium/src/lib/CustomViewer/CustomViewer.tsx @@ -60,6 +60,7 @@ type CustomViewerProps = { //disableZoomRestrictions?: boolean; // todo //minZoom?: number; // todo + minPitch?: number; globe?: { // https://cesium.com/learn/cesiumjs/ref-doc/Globe.html baseColor?: Color; @@ -99,6 +100,7 @@ function CustomViewer(props: CustomViewerProps) { }, containerRef, enableLocationHashUpdate = true, + minPitch, } = props; const previousViewerRef = useRef(null); // track viewer changes @@ -130,7 +132,7 @@ function CustomViewer(props: CustomViewerProps) { useTransitionTimeout(); useDisableSSCC(); useCameraRollSoftLimiter(); - useCameraPitchHardLimiter(); + useCameraPitchHardLimiter(minPitch); useEffect(() => { if (viewer && enableLocationHashUpdate && !isMode2d) { diff --git a/libraries/mapping/engines/cesium/src/lib/CustomViewer/hooks/useCameraPitchHardLimiter.ts b/libraries/mapping/engines/cesium/src/lib/CustomViewer/hooks/useCameraPitchHardLimiter.ts index 36278060..581c9f8b 100644 --- a/libraries/mapping/engines/cesium/src/lib/CustomViewer/hooks/useCameraPitchHardLimiter.ts +++ b/libraries/mapping/engines/cesium/src/lib/CustomViewer/hooks/useCameraPitchHardLimiter.ts @@ -8,13 +8,16 @@ import { useViewerIsMode2d, } from "../../CustomViewerContextProvider"; -const useCameraPitchHardLimiter = (minPitch = CeMath.toRadians(-(30))) => { +const DEFAULT_MIN_PITCH = 12; + +const useCameraPitchHardLimiter = (minPitchDeg = DEFAULT_MIN_PITCH) => { const { viewer } = useCesiumCustomViewer(); const dispatch = useDispatch(); const isMode2d = useViewerIsMode2d(); const collisions = useScreenSpaceCameraControllerEnableCollisionDetection(); const lastPitch = useRef(null); const lastPosition = useRef(null); + const minPitchRad = CeMath.toRadians(-minPitchDeg); const clearLast = () => { lastPitch.current = null; lastPosition.current = null; @@ -27,12 +30,12 @@ const useCameraPitchHardLimiter = (minPitch = CeMath.toRadians(-(30))) => { ); clearLast(); const onUpdate = async () => { - const isPitchTooLow = camera.pitch > minPitch; + const isPitchTooLow = camera.pitch > minPitchRad; if (isPitchTooLow) { console.log( "LISTENER HOOK [2D3D|CESIUM|CAMERA]: reset pitch", camera.pitch, - minPitch, + minPitchRad, ); if (lastPitch.current !== null && lastPosition.current !== null) { const { latitude, longitude } = camera.positionCartographic; @@ -43,7 +46,7 @@ const useCameraPitchHardLimiter = (minPitch = CeMath.toRadians(-(30))) => { ), orientation: { heading: camera.heading, - pitch: minPitch, + pitch: minPitchRad, roll: camera.roll, }, }); @@ -57,7 +60,7 @@ const useCameraPitchHardLimiter = (minPitch = CeMath.toRadians(-(30))) => { scene.preUpdate.removeEventListener(onUpdate); }; } - }, [viewer, minPitch, collisions, isMode2d, dispatch]); + }, [viewer, minPitchRad, collisions, isMode2d, dispatch]); }; export default useCameraPitchHardLimiter; diff --git a/types/cesium-config.d.ts b/types/cesium-config.d.ts index 6b2d5766..9d12ce18 100644 --- a/types/cesium-config.d.ts +++ b/types/cesium-config.d.ts @@ -4,6 +4,9 @@ export type CesiumConfig = { duration: number; }; }; + camera: { + minPitch: number; + }; baseUrl: string; pathName: string; };