From 03e5f1456cc9b5046f722d9065dff4aecffdb472 Mon Sep 17 00:00:00 2001 From: JIANG Date: Wed, 11 Feb 2026 11:52:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=AF=94=E4=BE=8B=E5=B0=BA?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6=EF=BC=8C=E8=B0=83=E6=95=B4=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/OlMap/Controls/BaseLayers.tsx | 2 +- src/app/OlMap/Controls/ScaleLine.tsx | 53 ++++++++++++++++++++++++--- src/app/OlMap/Controls/Zoom.tsx | 2 +- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/app/OlMap/Controls/BaseLayers.tsx b/src/app/OlMap/Controls/BaseLayers.tsx index 7f17bb1..03f2a76 100644 --- a/src/app/OlMap/Controls/BaseLayers.tsx +++ b/src/app/OlMap/Controls/BaseLayers.tsx @@ -179,7 +179,7 @@ const BaseLayers: React.FC = () => { }; return ( -
+
{ const map = useMap(); const [zoomLevel, setZoomLevel] = useState(0); const [coordinates, setCoordinates] = useState<[number, number]>([0, 0]); + const scaleLineRef = useRef(null); useEffect(() => { if (!map) return; @@ -28,19 +30,58 @@ const Scale: React.FC = () => { // Initialize values updateZoomLevel(); + // ScaleLine control + const scaleControl = new ScaleLine({ + target: scaleLineRef.current || undefined, + units: "metric", + bar: false, + steps: 4, + text: true, + minWidth: 64, + }); + map.addControl(scaleControl); + return () => { map.un("moveend", updateZoomLevel); map.un("pointermove", updateCoordinates); + map.removeControl(scaleControl); }; }, [map]); return ( -
-
缩放: {zoomLevel.toFixed(1)}
-
- 坐标: {coordinates[0]}, {coordinates[1]} + <> + +
+
+
+
+ 缩放: {zoomLevel.toFixed(1)} +
+
+
+ 坐标: {coordinates[0]}, {coordinates[1]} +
-
+ ); }; diff --git a/src/app/OlMap/Controls/Zoom.tsx b/src/app/OlMap/Controls/Zoom.tsx index 7059a7d..e857abb 100644 --- a/src/app/OlMap/Controls/Zoom.tsx +++ b/src/app/OlMap/Controls/Zoom.tsx @@ -30,7 +30,7 @@ const Zoom: React.FC = () => { }; return ( -
+