Fix map center drift by using geographic center instead of bounds center
Problem: Map position drifted north/higher on each reload because bounds.getCenter() returns a visually offset center when pitch is applied Solution: - Use map.getCenter() for accurate geographic center (not affected by pitch) - Save and restore bearing (rotation) along with pitch - Store: lat, lon, zoom, pitch, bearing Before: bounds.getCenter() → visual center (offset by 3D tilt) After: map.getCenter() → true geographic center This ensures the map returns to the exact same position after reload, regardless of the 3D tilt angle. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
f22b9dfe06
commit
2c3722146a
|
|
@ -84,6 +84,10 @@ export function useMapCore(theme) {
|
|||
map.setZoom(v.zoom);
|
||||
// Restore pitch from storage, default to 45 if not saved
|
||||
map.setPitch(typeof v.pitch === "number" ? v.pitch : 45);
|
||||
// Restore bearing (rotation) if saved
|
||||
if (typeof v.bearing === "number") {
|
||||
map.setBearing(v.bearing);
|
||||
}
|
||||
hadLastView = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -114,14 +118,17 @@ export function useMapCore(theme) {
|
|||
const vp = getViewFromMap(map);
|
||||
setViewParams(vp);
|
||||
try {
|
||||
const center = vp.center;
|
||||
// Use map.getCenter() directly for accurate geographic center
|
||||
// (bounds.getCenter() can be offset when pitch is applied)
|
||||
const center = map.getCenter();
|
||||
localStorage.setItem(
|
||||
LAST_VIEW_KEY,
|
||||
JSON.stringify({
|
||||
lat: center[1],
|
||||
lon: center[0],
|
||||
lat: center.lat,
|
||||
lon: center.lng,
|
||||
zoom: map.getZoom(),
|
||||
pitch: map.getPitch()
|
||||
pitch: map.getPitch(),
|
||||
bearing: map.getBearing()
|
||||
})
|
||||
);
|
||||
} catch {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue