|
1 | 1 | "use client"; |
2 | 2 |
|
3 | 3 | import React, { useEffect, useState, useRef, useMemo, memo } from "react"; |
4 | | -import { Viewer, Scene } from "resium"; |
| 4 | +import { Viewer, Scene, ImageryLayer } from "resium"; |
5 | 5 | import * as Cesium from "cesium"; |
6 | 6 | import "cesium/Build/Cesium/Widgets/widgets.css"; |
| 7 | + |
| 8 | +// Use OpenStreetMap instead of Cesium Ion (no API key required) |
| 9 | +const osmImageryProvider = new Cesium.OpenStreetMapImageryProvider({ |
| 10 | + url: "https://tile.openstreetmap.org/", |
| 11 | + credit: "© OpenStreetMap contributors" |
| 12 | +}); |
7 | 13 | import SatelliteLayer from "./SatelliteLayer"; |
8 | 14 | import { SpaceObject } from "@/lib/space-objects"; |
9 | 15 | import * as satellite from "satellite.js"; |
@@ -54,6 +60,17 @@ const Globe: React.FC<GlobeProps> = ({ objects = [], onSelect, selectedObject, o |
54 | 60 | setMounted(true); |
55 | 61 | }, []); |
56 | 62 |
|
| 63 | + // Remove default Cesium Ion imagery and use OpenStreetMap |
| 64 | + useEffect(() => { |
| 65 | + if (viewerRef && !viewerRef.isDestroyed()) { |
| 66 | + const layers = viewerRef.imageryLayers; |
| 67 | + // Remove default Cesium Ion layer (first layer) |
| 68 | + if (layers.length > 1) { |
| 69 | + layers.remove(layers.get(0), false); |
| 70 | + } |
| 71 | + } |
| 72 | + }, [viewerRef]); |
| 73 | + |
57 | 74 | // Sync Cesium Clock settings from Zustand store |
58 | 75 | useEffect(() => { |
59 | 76 | if (!viewerRef || viewerRef.isDestroyed()) return; |
@@ -223,6 +240,7 @@ const Globe: React.FC<GlobeProps> = ({ objects = [], onSelect, selectedObject, o |
223 | 240 | creditContainer={creditContainer} |
224 | 241 | > |
225 | 242 | <Scene highDynamicRange={true} /> |
| 243 | + <ImageryLayer imageryProvider={osmImageryProvider} /> |
226 | 244 |
|
227 | 245 | <SatelliteLayer |
228 | 246 | objects={objects} |
|
0 commit comments